我有一些工作,只是需要每个记录遍历在HBase的表,并做一些任务。例如,根据一些新的业务规则提取导出字段或更新字段。
推理
的MapReduce似乎矫枉过正这里。没有什么真正的地图,也没有“减少”。地图总是关键+记录。对于随机播放和排序来说,肯定没有用处,因为它们的密钥在HBase中是唯一的。
由于性能原因,这应该仍然是分布式的。我想我正在寻找一个好的旧时尚表扫描,恰好分布。
问题
方面有哪些办法来利用集群但要避免一个完整的MapReduce工作的不必要的步骤?
我有一些工作,只是需要每个记录遍历在HBase的表,并做一些任务。例如,根据一些新的业务规则提取导出字段或更新字段。
推理
的MapReduce似乎矫枉过正这里。没有什么真正的地图,也没有“减少”。地图总是关键+记录。对于随机播放和排序来说,肯定没有用处,因为它们的密钥在HBase中是唯一的。
由于性能原因,这应该仍然是分布式的。我想我正在寻找一个好的旧时尚表扫描,恰好分布。
问题
方面有哪些办法来利用集群但要避免一个完整的MapReduce工作的不必要的步骤?
Co-processors就是为了这个。从链接:“一个灵活和通用的扩展框架,以及直接在HBase服务器进程中分布式计算的框架”。
你可以做一个地图,唯一的工作 - 它会做你想要 正是为了得到一个地图只有工作,你可以使用TableMapReduceUtil.initTableMapperJob
助手方法 并设置没有减速job.setNumReduceTasks(0);
你也可以把一些如果您为扫描指定了一个过滤器,则处理为hbase
我们试过这个。但是,最基本的问题是,我们似乎无法让一个映射器的工作速度与将所有计算传递给还原器的工作一样快。也许是因为我们无法配置mappers的数量,而您可以配置reducer的数量?我们不确定这是M/R作业的设计还是配置。谢谢。 –
使用HBase进行地图/缩小可以为每个地区创建一张地图 - 如果您将区域划分得足够好,那么您将拥有尽可能多的并行度。 –
非常感谢,会考虑一下。 –
虽然它不是真正的分布式。 'hbase.hregion.max.filesize'默认为'10737418240'。所以,如果表格小于这个数值,整个表格将在单个节点上处理,而不是以分布式的方式处理。 –
呃......你说的是什么意思?如果你只有一个地区的桌子,那么你做错了。 –
这就像是说mapreduce没有分发,因为我可能只在一个块上运行mapreduce作业。 –