HBase聚合、Get And Put操作、Bulk操作

HBase aggregation, Get And Put operation, Bulk Operation

我想知道如何映射键的值。 我知道它可以通过 Get 然后 Put 操作来完成。有没有其他方法可以有效地做到这一点? 'checkAndPut' 不是很有帮助 可以用类似的东西来完成吗:

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

我读过 HBase 权威指南 这本书,似乎 Map Reduce Job 解释为 HBase 之上的 Put/Get 操作。这是否意味着它不是 'Bulk Operation' (因为它是每个键的操作)?

Spark 与此处有什么关系?

  1. HBase 有扫描(1) to retrieve multiple rows; and MapReduce jobs can and do use this command (2)。
  2. 对于 HBase 'bulk' 大部分 [或仅] 是 'bulk load'/'bulk import',其中通过构建 HFile 添加数据并将它们 'injecting' 添加到 HBase 集群(相反到 PUT-s) (3).
  3. 您的任务可以作为 MapReduce 作业以及 Spark 应用程序来实现 (4 being one of examples, maybe not the best one), or a Pig script, or a Hive query if you use HBase table from Hive (5);选择你的毒药。

如果您使用计数器设置 Table,那么您可以使用 Increment 在原子操作中将一定数量添加到现有值。

从 MapReduce 作业中,您将以微批次的方式汇总您的输入(无论您有增量计数),按 key/value 对它们进行分组,对它们求和,然后从您的 Put 发出一个 Put作业(每个键 1 个 Put)。

我上面提到的不是 'bulk' 操作,但如果您在每个批次中修改的行数与 table.

如果您希望在每批中修改整个 table,那么您应该查看 Bulk Loads。这将要求您编写一个作业来读取 HBase 中的现有值和来自增量源的新值,将它们相加,然后将它们写回 HBase(以 'bulk load' 方式,而不是直接)

Bulk Load 直接将 HFiles 写入 HDFS,而不通过 HBase 'write pipeline'(Memstore、minor compactions、major compactions 等),然后发出命令将现有文件与新文件交换。交换是快速的!请注意,您还可以在 HBase 集群外部生成新的 HFile(不要使其过载),然后将它们复制过来并发出交换命令。