hbase与集成测试

bhmjp9jg  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(348)

我有一个spark项目,它使用hbase作为键/值存储。我们从整体上开始实施更好的ci/cd实践,我正在编写一个python客户机来运行针对自包含aws环境的集成测试。
而我可以很容易地提交我们的Spark作业,并运行他们作为电子病历的步骤。我还没有找到与python中的hbase交互的好方法。我的目标是能够针对示例hdfs数据运行我们的代码,然后在hbase中验证我是否得到了预期的结果。有人能提出一个好的方法吗?
另外,我的测试集非常小。如果我能简单地将整个hbase表读入内存并进行检查,我也会很高兴。感谢社区的意见。

7gyucuyw

7gyucuyw1#

下面是使用happybase api和thrift server从python读取hbase数据的简单方法。
要在hbase服务器上启动thrift server:

/YOUR_HBASE_BIN_DIR/hbase-daemon.sh start thrift

然后从python:

import happybase

HOST = 'Hbase server host name here'
TABLE_NAME = 'MyTable'
ROW_PREFIX = 'MyPrefix'
COL_TXT = 'CI:BO'.encode('utf-8') # column family CI, column name BO (Text)
COL_LONG = 'CI:BT'.encode('utf-8') # column family CI, column name C (Long)

conn = happybase.Connection(HOST) # uses default port 9095, but provide second arg if non-default port
myTable = conn.table(TABLE_NAME)

for rowID, row in myTable.scan(row_prefix=ROW_PREFIX.encode('utf-8')): # or leave empty if want full table scan
    colValTxt = row[COL_TXT].decode('utf-8')
    colValLong = int.from_bytes(row[COL_LONG], byteorder='big')
    print('Row ID: {}\tColumn Value: {}'.format(rowID, colValTxt))
print('All Done')

正如在评论中所讨论的,如果您尝试将内容传递给spark workers,这将不起作用,因为上面的hbase连接是不可序列化的。所以只能从主程序运行这种类型的代码。如果你想办法——分享!

相关问题