Apache spark LoadIncrementalHFiles:对HFiles进行分组时发生拆分
我实现了一个Spark(v2.4)应用程序,它处理原始数据并将其存储到容器化Hbase(v2.1)中。 我想将数据批量加载到Hbase中,为此,我使用。我遵循了这一点 我将Hbase区域预拆分为10,并通过散列和对散列值应用模来转换每个键,然后将其作为前缀连接到键。 例如:key=a123,newKey=0_a123(假设:hash(a123)mod 10=0) 当我运行Spark应用程序时,我可以看到已创建了Hfiles,但当我尝试使用LoadIncrementalHFiles加载BulkLoad时,出现以下错误: LoadIncrementalHFiles:分组HFiles时发生拆分,请重试 尝试12次,剩余10个文件进行分组或拆分 我看到了以下我认为与我已经做的相似的事情Apache spark LoadIncrementalHFiles:对HFiles进行分组时发生拆分,apache-spark,hbase,bulk-load,Apache Spark,Hbase,Bulk Load,我实现了一个Spark(v2.4)应用程序,它处理原始数据并将其存储到容器化Hbase(v2.1)中。 我想将数据批量加载到Hbase中,为此,我使用。我遵循了这一点 我将Hbase区域预拆分为10,并通过散列和对散列值应用模来转换每个键,然后将其作为前缀连接到键。 例如:key=a123,newKey=0_a123(假设:hash(a123)mod 10=0) 当我运行Spark应用程序时,我可以看到已创建了Hfiles,但当我尝试使用LoadIncrementalHFiles加载BulkLo
由于可以对行进行散列以获得更好的分布,因此可能需要使用十六进制区域拆分器实用程序对表进行预拆分。它将根据您拥有的区域服务器数量,自动计算出如何在十六进制空间中很好地分割表。也许这可以帮助您绕过不必要的动态拆分。您可以通过以下命令行使用它:
hbase org.apache.hadoop.hbase.util.RegionSplitter TableName HexStringSplit -c 10 -f CF
- TableName是您的表名
- 10是群集中的区域服务器数
- CF是要创建的柱族的名称
启动此操作时,该表不应存在。问题在于Hfiles的位置 我阅读了Hbase日志,看到它在查找主机上的Hfiles,抛出了FileNotFoundException
我将Hfiles目录装载到Hbase容器中,问题就解决了。有人能帮忙吗?首先感谢您的帮助。我按照你的建议做了预拆分,但我一直都会遇到同样的错误,你还有其他想法吗?我忘了提到我运行容器化Hbase实例(将更新问题中的此信息)。不确定容器是否在这里起作用。也许您不应该使用LoadIncrementalHfiles,而应该尝试更严格的方法,将数据从Spark上传到HBase,例如通过SHC连接器。有很多关于如何使用它的文档,而且非常健壮。我发布了我的问题的解决方案。谢谢你的帮助!