我们有一个基于 HBase 的系统,我们希望在生产中每天批量加载几百万行。我们认为与 puts 相比,HBase Bulk Load将是一个不错的选择——批量加载功能使用 MapReduce 作业以 HBase 的内部数据格式输出表数据,然后将生成的 StoreFiles 直接加载到正在运行的集群中。与简单地使用 HBase API 相比,使用批量加载将使用更少的 CPU 和网络资源。我们已经对此进行了评估,并且效果很好。参考指南中的以下部分讨论了限制:
72.2。批量加载限制 由于批量加载绕过了写入路径,WAL 不会作为进程的一部分被写入。复制通过读取 WAL 文件来工作,因此它不会看到批量加载的数据——使用 Put.setDurability(SKIP_WAL) 的编辑也是如此。处理该问题的一种方法是将原始文件或 HFile 发送到另一个集群并在那里进行其他处理。
这是一个大问题,因为我们要使用高可用性。我们还发现了另一个 JIRA HBASE-13153,这表明修复后复制工作正常。
问题:
- Bulk Load 是否用于生产用途?
- HBase 文档是否已过时并且限制现在已解决?
- 使用批量加载还有其他限制吗?如果是,首选方法是什么?