hbase mapreduce对不同Map程序的分割扫描

dpiehjr4  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(298)

我正在努力为几个Map任务以正确的方式分配hbase行。我的目标是通过row键分割扫描,并将一组行分配给一个map作业。
到目前为止,我只能定义一个扫描,我的Map器总是一次一行。但这不是我想要的-我需要的Map输入设置明智。
那么有没有可能拆分我的hbase表resp。扫描成n组行,然后输入n个Map器?
我不是在寻找一个解决方案,开始一个mapreduce作业写n个文件和另一个mapreduce作业读回它们作为文本输入获取这些集。
提前谢谢!

fslejnso

fslejnso1#

Map程序总是一次得到一行-这就是map reduce工作的方式如果你想关联到map端的多行,你可以自己做(例如使用一些静态变量等),或者把逻辑写成一个合并器,这是map端的“reduce”步骤。
请注意,您仍然需要一个reducer来处理边缘情况,在这种情况下,相关的键由不同的Map器处理—因为在hbase中,键是在磁盘上排序的,所以只能在分割的结束/开始时获得。您可以通过预拆分来降低发生这种情况的风险

lyfkaqu1

lyfkaqu12#

查看实现时,我发现使用一次扫描调用map步骤只会导致使用一个Map器。这就是为什么输入集没有被分割。
使用扫描列表,将其交给 TableMapReduceUtil.initTableReducerJob 函数,则在每次扫描时分割输入集。因此,可以定义mapreduce作业中使用的Map器的数量。
另一种方法是延长 TableInputFormat 类并重写split方法。
正如arnon rotem gal oz所说的,在mapper的map函数中一次只能访问一行。

相关问题