apache-spark - 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 个文件要分组或拆分
我看到了以下解决方案,我认为它与我已经完成的类似。
- 为什么 LoadIncrementalHFiles 会失败?
- 在容器化环境中执行 LoadIncrementalHFiles 之前,Hfiles 是否也应该在容器上?
- 我应该以不同的方式预先分割 Hbase 区域吗?
- 有没有计算区域数量的公式?
在 Hbase 日志中,我可以看到以下错误:
regionserver.SecureBulkLoadManager:无法完成批量加载 java.io.FileNotFoundException:文件...不存在
解决方案
问题在于 Hfile 的位置。
我阅读了 Hbase 日志,发现它在我的主机上查找 Hfile,抛出了 FileNotFoundException。
我将 Hfiles 目录挂载到 Hbase 容器中,问题就解决了。
推荐阅读
- html - 我无法让滚动成为网站的一部分
- java - 如何使用包含哈希图和另一个属性的 gson 反序列化 JSON?
- ruby-on-rails - 为什么这个 link_to 使用 GET 而不是我指定的 DELETE?
- c++ - int a = ++i + ++i 是未定义的行为吗?
- javascript - 如何将“本周”按钮变成下拉菜单?我究竟做错了什么?
- sql - 带有日期和时间的 Oracle SQL Case when 语句
- node.js - Angular 8:基于组件在html中动态设置formControlName
- java - JMeter 清除 JDBC 响应数据
- python - 比较两个文件中同名但值不同的两个json文件
- snowflake-cloud-data-platform - 使用可能的 CASE 语句在 Snowflake 中旋转 JSON