Hadoop 如何在没有MapReduce的情况下在HBase中进行分布式更新

Hadoop 如何在没有MapReduce的情况下在HBase中进行分布式更新,hadoop,mapreduce,hbase,Hadoop,Mapreduce,Hbase,问题 我有一些工作只需要迭代HBase表中的每条记录并执行一些任务。例如,为导出提取字段或基于某些新业务规则更新字段 推理 MapReduce在这里似乎有些过分。没有什么真正的地图,也没有“减少”。地图永远只是钥匙+记录。洗牌和排序肯定没有用,因为它们的键在HBase中是唯一的 出于性能原因,仍应分发此文件。我想我正在寻找一个好的旧时尚表格扫描,碰巧是分布式的 问题 有哪些选项可以利用集群,但可以避免完整MapReduce作业中不必要的步骤 就是为了这个。链接:“一个用于灵活和通用扩展的框架,以

问题

我有一些工作只需要迭代HBase表中的每条记录并执行一些任务。例如,为导出提取字段或基于某些新业务规则更新字段

推理

MapReduce在这里似乎有些过分。没有什么真正的地图,也没有“减少”。地图永远只是钥匙+记录。洗牌和排序肯定没有用,因为它们的键在HBase中是唯一的

出于性能原因,仍应分发此文件。我想我正在寻找一个好的旧时尚表格扫描,碰巧是分布式的

问题


有哪些选项可以利用集群,但可以避免完整MapReduce作业中不必要的步骤

就是为了这个。链接:“一个用于灵活和通用扩展的框架,以及直接在HBase服务器进程中进行分布式计算的框架”。

您可以执行仅映射的工作—它将完全满足您的需要 要获取仅映射作业,可以使用
TableMapReduceUtil.initTableMapperJob
helper方法 并设置无减速机
job.setNumReduceTasks(0)


此外,如果您为扫描指定了一个过滤器,您还可以将一些处理推送到hbase,尽管它不是真正分布式的
hbase.hregion.max.filesize
默认值为
10737418240
。因此,如果表小于此值,整个表将在单个节点上处理,而不是以分布式方式处理。。。你的意思是什么?如果一个表只有一个区域,那么你就错了。这就像说mapreduce不是分布式的,因为我可能只在一个块上运行mapreduce作业。如果有一个表有2GB的数据,那么对于单个区域,协处理器将在单个节点上处理它。将其拆分为128mb区域进行分布式处理是一个糟糕的选择。如果相同的2gb数据在hdfs中,由于复制的原因,mr处理将在相同128mb块的多个节点上分布的可能性更大。就我的2c。“需要多考虑一下。@PraveenSripati我们讨论的表分布在数百个地区的数十台服务器上。我们已经尝试过了。然而,基本的问题是,我们似乎无法让一个仅映射器的作业与一个将所有计算传递给还原器的作业运行得一样快。也许是因为我们无法配置映射器的数量,而您可以配置还原器的数量?我们不确定这是M/R作业的设计还是配置。谢谢。一个带有HBase的map/reduce会为每个区域创建一个映射-如果你把你的区域划分得足够好的话,你会有尽可能多的并行性。非常感谢,我会仔细研究的。