首页 > 解决方案 > LoadIncrementalHFiles:分组 HFiles 时发生拆分

问题描述

我实现了一个 Spark(v2.4) 应用程序,它处理原始数据并将其存储到容器化的 Hbase(v2.1) 中。我想将数据批量加载到 Hbase 中,为此,我使用apache/hbase-connectors。我按照这个例子

我将 Hbase 区域预拆分为 10,并通过散列和对散列值应用取模来转换每个键,然后将其连接为键的前缀。例如:key = a123,newKey = 0_a123(假设:hash(a123) mod 10 = 0)。

当我运行我的 Spark 应用程序时,我可以看到 Hfiles 已创建,但是当我尝试使用 LoadIncrementalHFiles 执行 BulkLoad 时,我收到以下错误:

LoadIncrementalHFiles:分组 HFile 时发生拆分,重试 12 次,剩余 10 个文件要分组或拆分

我看到了以下解决方案,我认为它与我已经完成的类似。

  1. 为什么 LoadIncrementalHFiles 会失败?
  2. 在容器化环境中执行 LoadIncrementalHFiles 之前,Hfiles 是否也应该在容器上?
  3. 我应该以不同的方式预先分割 Hbase 区域吗?
  4. 有没有计算区域数量的公式?

在 Hbase 日志中,我可以看到以下错误:

regionserver.SecureBulkLoadManager:无法完成批量加载 java.io.FileNotFoundException:文件...不存在

标签: apache-sparkhbasebulk-load

解决方案


问题在于 Hfile 的位置。

我阅读了 Hbase 日志,发现它在我的主机上查找 Hfile,抛出了 FileNotFoundException。

我将 Hfiles 目录挂载到 Hbase 容器中,问题就解决了。


推荐阅读