收藏 分享(赏)

python访问hbase.docx

上传人:11xg27ws 文档编号:7805635 上传时间:2019-05-26 格式:DOCX 页数:7 大小:100.87KB
下载 相关 举报
python访问hbase.docx_第1页
第1页 / 共7页
python访问hbase.docx_第2页
第2页 / 共7页
python访问hbase.docx_第3页
第3页 / 共7页
python访问hbase.docx_第4页
第4页 / 共7页
python访问hbase.docx_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、python 通过 thrift 访问 hbase(2014-01-15 14:51:04)转载 分类: python 首先学习一下 Hbase 的表结构:Row KeyRow key 行键 (Row key)可以是任意字符串( 最大长度是 64KB,实际应用中长度一般为 10-100bytes),在 hbase 内部,row key 保存为字节数组。列族 (column family)hbase 表中的每个列,都归属与某个列族。列族是表的 chema 的一部分(而列不是),必须在使用表之前定义。列名都以列族作为前缀。例如 courses:history , courses:math 都属于

2、courses 这个列族。时间戳HBase 中通过 row 和 columns 确定的为一个存贮单元称为 cell。每个 cell 都保存着同一份数据的多个版本。版本通过时间戳来索引。时间戳的类型是 64 位整型。时间戳可以由hbase(在数据写入时自动 )赋值,此时时间戳是精确到毫秒的当前系统时间。时间戳也可以由客户显式赋值。如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。每个 cell 中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。为了避免数据存在过多版本造成的的管理 (包括存贮和索引) 负担,hbase 提供了两种数据版本回收方式。一是保存数据的最后 n

3、个版本,二是保存最近一段时间内的版本(比如最近七天)。用户可以针对每个列族进行设置。对 Hbase 而言,表结构设计会对系统的性能以及开销上造成很大的区别;thrift 是 facebook 开发并开源的一个二进制通讯中间件,通过 thrift,我们可以充分利用各个语言的优势,编写高效的代码。关于 thrift 的论文:http:/ 11 transport = TTransport.TBufferedTransport(transport)12 13 protocol = TBinaryProtocol.TBinaryProtocol(transport);14 15 client = Hb

4、ase.Client(protocol)16 transport.open()17 18 19 contents = ColumnDescriptor(name=cf:, maxVersions=1)20 client.createTable(test, contents)21 22 print client.getTableNames()执行代码,成功后,进入 hbase 的 shell,用命令 list 可以看到刚刚的 test 表已经创建成功。插入数据:1 from thrift import Thrift2 from thrift.transport import TSocket3 f

5、rom thrift.transport import TTransport4 from thrift.protocol import TBinaryProtocol5 6 from hbase import Hbase7 8 from hbase.ttypes import *9 10 transport = TSocket.TSocket(localhost, 9090)11 12 transport = TTransport.TBufferedTransport(transport)13 14 protocol = TBinaryProtocol.TBinaryProtocol(tran

6、sport)15 16 client = Hbase.Client(protocol)17 18 transport.open()19 20 row = row-key121 22 mutations = Mutation(column=“cf:a“, value=“1“)23 client.mutateRow(test, row, mutations, None)插入成功,通过 scan 命令查看插入结果:获取一行数据:1 from thrift import Thrift2 from thrift.transport import TSocket3 from thrift.transpor

7、t import TTransport4 from thrift.protocol import TBinaryProtocol5 6 from hbase import Hbase7 from hbase.ttypes import *8 9 transport = TSocket.TSocket(localhost, 9090)10 transport = TTransport.TBufferedTransport(transport)11 12 protocol = TBinaryProtocol.TBinaryProtocol(transport)13 14 client = Hbas

8、e.Client(protocol)15 16 transport.open()17 18 tableName = test19 rowKey = row-key120 21 result = client.getRow(tableName, rowKey, None)22 print result23 for r in result:24 print the row is , r.row25 print the values is , r.columns.get(cf:a).valuegetRow 返回的是 TResult 列表,结果如下:返回多行则需要使用 scan:1 from thri

9、ft import Thrift2 from thrift.transport import TSocket3 from thrift.transport import TTransport4 from thrift.protocol import TBinaryProtocol5 6 from hbase import Hbase7 from hbase.ttypes import *8 9 transport = TSocket.TSocket(localhost, 9090)10 transport = TTransport.TBufferedTransport(transport)11

10、 12 protocol = TBinaryProtocol.TBinaryProtocol(transport)13 14 client = Hbase.Client(protocol)15 transport.open()16 17 scan = TScan()18 tableName = test19 id = client.scannerOpenWithScan(tableName, scan, None)20 21 result2 = client.scannerGetList(id, 10)22 23 print result2scannerGetList 会取 10 条数据,然后

11、输出结果scannerGet 则是每次只取一行数据:1 from thrift import Thrift2 from thrift.transport import TSocket3 from thrift.transport import TTransport4 from thrift.protocol import TBinaryProtocol5 6 from hbase import Hbase7 from hbase.ttypes import *8 9 transport = TSocket.TSocket(localhost, 9090)10 transport = TTran

12、sport.TBufferedTransport(transport)11 12 protocol = TBinaryProtocol.TBinaryProtocol(transport)13 14 client = Hbase.Client(protocol)15 transport.open()16 17 scan = TScan()18 tableName = test19 id = client.scannerOpenWithScan(tableName, scan, None)20 result = client.scannerGet(id)21 while result:22 pr

13、int result23 result = client.scannerGet(id)输出结果:zzfrom: http:/ thrift 生成的代码中提供的方法有:void enableTable(Bytes tableName)void disableTable(Bytes tableName)bool isTableEnabled(Bytes tableName)void compact(Bytes tableNameOrRegionName)void majorCompact(Bytes tableNameOrRegionName)getTableNames()getColumnDes

14、criptors(Text tableName)getTableRegions(Text tableName)void createTable(Text tableName, columnFamilies)void deleteTable(Text tableName)get(Text tableName, Text row, Text column)getVer(Text tableName, Text row, Text column, i32 numVersions)getVerTs(Text tableName, Text row, Text column, i64 timestamp

15、, i32 numVersions)getRow(Text tableName, Text row)getRowWithColumns(Text tableName, Text row, columns)getRowTs(Text tableName, Text row, i64 timestamp)getRowWithColumnsTs(Text tableName, Text row, columns, i64 timestamp)getRows(Text tableName, rows)getRowsWithColumns(Text tableName, rows, columns)ge

16、tRowsTs(Text tableName, rows, i64 timestamp)getRowsWithColumnsTs(Text tableName, rows, columns, i64 timestamp)void mutateRow(Text tableName, Text row, mutations)void mutateRowTs(Text tableName, Text row, mutations, i64 timestamp)void mutateRows(Text tableName, rowBatches)void mutateRowsTs(Text table

17、Name, rowBatches, i64 timestamp)i64 atomicIncrement(Text tableName, Text row, Text column, i64 value)void deleteAll(Text tableName, Text row, Text column)void deleteAllTs(Text tableName, Text row, Text column, i64 timestamp)void deleteAllRow(Text tableName, Text row)void deleteAllRowTs(Text tableNam

18、e, Text row, i64 timestamp)ScannerID scannerOpenWithScan(Text tableName, TScan scan)ScannerID scannerOpen(Text tableName, Text startRow, columns)ScannerID scannerOpenWithStop(Text tableName, Text startRow, Text stopRow, columns)ScannerID scannerOpenWithPrefix(Text tableName, Text startAndPrefix, columns)ScannerID scannerOpenTs(Text tableName, Text startRow, columns, i64 timestamp)ScannerID scannerOpenWithStopTs(Text tableName, Text startRow, Text stopRow, columns, i64 timestamp)scannerGet(ScannerID id)scannerGetList(ScannerID id, i32 nbRows)void scannerClose(ScannerID id)参考: http:/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报