HBASE 批量加载复制

HBASE Bulk load replication

我们有一个基于 HBase 的系统,我们希望在生产中每天批量加载几百万行。我们认为与 puts 相比,HBase Bulk Load 将是一个不错的选择 - 批量加载功能使用 MapReduce 作业以 HBase 的内部数据格式输出 table 数据,然后直接将生成的 StoreFiles 加载到 运行集群。与简单地使用 HBase API 相比,使用批量加载将使用更少的 CPU 和网络资源。我们对此进行了评估,它运行良好。参考指南中的以下部分讨论了这些限制:

72.2. Bulk Load Limitations 由于批量加载绕过了写路径,WAL 不会作为过程的一部分被写入。复制通过读取 WAL 文件来工作,因此它不会看到批量加载的数据——使用 Put.setDurability(SKIP_WAL) 的编辑也是如此。一种处理方法是将原始文件或 HFile 传送到另一个集群并在那里进行其他处理。

这是一个大问题,因为我们要使用高可用性。我们还发现了另一个 JIRA HBASE-13153,它表明修复后复制工作正常。

问题:

  1. 批量加载是否用于生产用途?
  2. HBase 文档是否已过时,现在限制已解决?
  3. 使用批量加载还有其他限制吗?如果是,首选方法是什么?
  1. 是的。许多用户在生产中使用批量加载
  2. 是的,在 HBASE-13153 之后,提到的限制不存在。但请参阅问题的发行说明。默认情况下,此功能处于关闭状态。您将必须配置它才能工作。然后批量加载的文件也将被复制到对等集群。是的,该文档已过时。很快就会修好。另请参阅修复版本。您必须相应地 select 版本。
  3. 其他限制:您需要使用安全性 (ACL)?如果是这样,批量加载需要的 ACL 是对 table/CF 的 CREATE 权限,而不仅仅是 WRITE 权限。请记住这一点。这不是限制而只是说。批量加载存在一些缺陷,但在 1.3+ 版本中这些应该已经修复。

你确定你可以尝试使用数据写入的批量加载方式,这似乎非常适合你的用例。