![](/img/trans.png)
[英]HBase chain MapReduce job with broadcasting smaller tables to all Mappers
[英]HBase MapReduce split scan for different mappers
我正在努力以适当的方式分布我的HBase行,以完成多个地图任务。 我的目的是通过行键拆分我的扫描,并将每个行分配给地图作业。
到目前为止,我只能定义一个扫描,其中我的映射器每次总是获得一行。 但这不是我想要的-我需要设置map-input。
因此,有可能拆分我的HBase表响应。 扫描到n行,然后输入n个映射器?
我不是在寻找一种解决方案来启动MapReduce作业来编写n个文件,而另一个MapReduce作业来重新读取它们作为获取这些集合的文本输入。
提前致谢!
映射器总是一次只能获得一行-如果要与地图侧的多行相关联,这就是map-reduce的工作方式,您可以自己执行操作(例如,使用一些静态变量等),也可以将逻辑写为组合器 ,它是地图端的“减少”步骤。
请注意,您仍然需要一个reducer来处理相关键由不同的映射器处理的极端情况-因为在磁盘上对hbase键进行排序时,您只会在拆分的末尾/开始得到它。 您可以通过预先拆分来降低发生这种情况的风险
仔细研究实现,我看到一次扫描就调用映射步骤,结果恰好使用了一个映射器。 这就是为什么完全不拆分输入集的原因。
使用扫描列表,并将其提供给TableMapReduceUtil.initTableReducerJob
函数,在每次扫描时对输入集进行拆分。 因此,可以定义MapReduce作业中使用的映射器的数量。
另一种方法是扩展TableInputFormat
类并重写split方法。
正如Arnon Rotem-Gal-Oz所说的那样,在映射器的地图功能中,一次只能访问一行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.