我已经使用python流(只有mapper函数实现)编写了一个mapreduce代码,并使用happybase从Hbase中读取。当我在5节点分发中运行mapreduce代码时,由于python流式代码具有从hbase读取记录的扫描功能,并且分布在整个集群中,因此创建的所有映射器实例都在处理从hbase提取/读取的相同数据集。
示例:
for key, data in table.scan(row_start='1'):
Somecompute( key, data)
这里,如果我在hbase中有100行,那么集群中派生的所有映射器实例都在处理来自hbase的相同的100条记录,因为它在分发中执行相同的映射器代码,因此重复。我的要求是m1映射器应该处理1到20条记录,m2映射器应该加工21到40条记录,m3应该加工41到60条记录等等。。。。如何使用happy base在python流媒体中实现这一点?有人能帮忙吗。谢谢
在happybase中,使用扫描,row_start
表示决定开始行键。
所以若startrows相同,那个么结果集也将相同。
如果您想获得下一个集合,您必须将row_start设置为预结果的最后一行关键字
像下面的
- 第一次扫描:
row_start=1
、result=[1:101]
、last_row=101
和Somecompute(1 ~ 100)
- 第二次扫描:
row_start=101
、result=[101:201]
、last_row=201
和Somecompute(101 ~ 200)
- 第三次扫描:
我希望它会有所帮助。