HBase聚合,获取和放置操作,批量操作

时间:2016-09-27 14:08:49

标签: hadoop mapreduce hbase

我想知道如何映射键的值。 我知道可以使用Get和then Put操作完成。有没有其他方法可以有效地做到这一点? 'checkAndPut'并非有用 可以通过以下方式完成:

(key,value) =>  value+g()

我已经阅读了 HBase the Definitive Guide 这本书,看起来Map Reduce Job被解释为在HBase之上的Put / Get操作。这是否意味着它不是“批量操作”(因为它是每个键的操作)?

Spark如何与Spark相关?

2 个答案:

答案 0 :(得分:2)

  1. HBase扫描(1)以检索多行;和MapReduce作业可以并且确实使用此命令(2)。
  2. 对于HBase来说,“批量”主要是[或仅仅]是“批量加载”/“批量导入”,其中一个通过构造HFiles并将它们“注入”到HBase集群(而不是PUT-s)来添加数据({{ 3}})。
  3. 您的任务可以实现为MapReduce作业以及Spark应用程序(3是其中一个示例,可能不是最好的一个),或Pig脚本,或Hive查询(如果您使用HBase表)来自Hive(4);选择你的毒药。

答案 1 :(得分:0)

如果使用计数器设置表,则可以使用Increment在原子操作中向现有值添加一定量。

从MapReduce作业中,您可以小批量汇总输入(无论您在哪里获得增量计数),按键/值对它们进行分组,总结它们,然后从您的工作中发出Put(1个Put按键)。

我上面提到的并不是批量生产的'如果你在每个批次中修改的行数与表格中的总数或行数相比相对较小,那么它可能会正常工作。

IFF您希望在每个批次中修改整个表格,然后您应该查看Bulk Loads。这将要求您编写一个读取HBase中现有值的作业,来自增量源的新值,将它们一起添加,然后将它们写回HBase(以批量加载方式,而不是直接)

批量加载直接将HFile写入HDFS,而无需通过HBase写入管道' (Memstore,次要压缩,主要压缩等),然后发出命令将现有文件与新文件交换。交换很快!注意,你也可以在HBase集群之外生成新的HFile(不要重载它),然后复制它们并发出swap命令。