如何解决LoadIncrementalHFiles:分组 HFile 时发生拆分
我实现了一个 Spark(v2.4) 应用程序,它处理原始数据并将其存储到容器化的 Hbase(v2.1) 中。 我想将数据批量加载到 Hbase 中,为此,我使用 apache/hbase-connectors。我关注了这个example。
我将 Hbase 区域预先拆分为 10,并通过对哈希值进行散列和应用模数来转换每个键,然后将其连接为键的前缀。 例如:key = a123,newKey = 0_a123(假设:hash(a123) mod 10 = 0)。
当我运行我的 Spark 应用程序时,我可以看到 Hfiles 已创建,但是当我尝试使用 LoadIncrementalHFiles 执行 doBulkLoad 时,我收到以下错误:
LoadIncrementalHFiles:分组 HFile 时发生拆分,重试 尝试 12 个剩余 10 个文件进行分组或拆分
我看到以下 solution,我认为这与我已经做过的相似。
- 为什么 LoadIncrementalHFiles 失败?
- 在容器化环境中执行 LoadIncrementalHFiles 之前,Hfiles 是否也应该在容器上?
- 我应该以不同的方式预拆分 Hbase 区域吗?
- 是否有计算区域数量的公式?
在 Hbase 日志中,我可以看到以下错误:
regionserver.SecureBulkLoadManager:无法完成批量加载 java.io.FileNotFoundException:文件...不存在
解决方法
由于您可以散列行以获得更好的分布,您可能希望使用十六进制区域拆分器实用程序预先拆分您的表。它将根据您拥有的区域服务器数量自动确定如何在十六进制空间中很好地拆分表。也许这可以帮助您即时绕过不必要的拆分。您可以像这样从命令行使用它:
hbase org.apache.hadoop.hbase.util.RegionSplitter TableName HexStringSplit -c 10 -f CF
- TableName 是你的表名
- 10 是您在集群中拥有的区域服务器数量
- CF 是要创建的列族的名称
当您启动此表时,该表不应该存在。
,问题在于 Hfile 的位置。
我阅读了 Hbase 日志,发现它在我的主机上查找 Hfile,抛出了 FileNotFoundException。
我把Hfiles目录挂载到Hbase容器,问题解决了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。