gpt4 book ai didi

hadoop - hive 到 Hbase : wrong use case for Spark?

转载 作者:可可西里 更新时间:2023-11-01 15:29:21 28 4
gpt4 key购买 nike

我最近遇到了一个关于将数据从 Hive 迁移到 Hbase 的问题。我们项目在 cdh5.5.1 集群上使用 Spark(7 个节点在 SUSE Linux Enterprise 上运行,具有 48 个内核,每个 256 GB RAM,hadoop 2.6)。作为初学者,我认为使用 Spark 从 Hive 加载表数据是个好主意。我正在使用正确的 Hive 列/Hbase ColumnFamily 和列映射在 HBase 中插入数据。

我找到了一些关于如何将数据批量插入 Hbase 的解决方案,例如我们可以使用 hbaseContext.bulkPutrdd.saveAsHadoopDataset(我测试了两者的结果相似) .

结果是一个功能正常的程序,但工作真的太慢了​​(比如 10 分钟/GB,3GB 减慢到 1 小时),而且我的 regionServers 内存/堆大小使用太多(它们可能会崩溃,取决于我设置的配置)。

在一次又一次地修改regionServers和Hbase配置后,我尝试使用简单的Hive方式,即使用hbase存储处理程序创建一个外部表作为hbase的入口点,并加载

INSERT OVERWRITE TABLE entry_point 
SELECT named_struct('rk_field1', rk_field1, 'rk_field2', rk_field2)
, field1
, field2
FROM hive_table

非常顺利,在 10 分钟内在 hbase 中插入了 22GB 的数据。我的问题是,为什么那样会好很多?是配置问题吗?为什么它会成为 Spark 如此糟糕的用例?

编辑:即使使用最后一种技术,它仍然很慢(插入 150 GB 需要 2 小时)。我可以通过 cloudera 管理器看到的唯一问题是 GC 时间,平均为 8 秒,但有时会增加到 20 秒,具体取决于哪个区域服务器。

最佳答案

HBase数据加载慢的原因是因为put操作。HBase 中的正常 put 操作包括,

  • WAL(Write Ahead Log)中的条目
  • 内存存储刷新
  • 一直到将数据作为 HFile 写入 hdfs。

如果您正在对 HBase 执行批量加载,那么您应该考虑通过 HfileFormat2 执行此操作,与常规 HBase put 相比它要快得多。

我们遇到了同样的情况,试图通过 put 将 2 TB 的数据加载到 HBase,加载数据大约需要 10 个小时,在配置和调整 HBase 之后,加载时间减少到 7-8 个小时。

然后我们决定加载为 HFileFormat,以实现此目的

  1. 首先了解您的数据,然后创建一个包含预拆分区域的表
  2. 通过Spark/Map-Reduce Job处理输入数据集并将结果写入HFileFormat
  3. 最后使用 hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles 将数据加载到 HBase 表中

关于hadoop - hive 到 Hbase : wrong use case for Spark?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37594261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com