将大量数据保存到HBase非常慢

时间:2016-08-03 03:52:50

标签: hbase

我正在为HBase节省1450万条记录。每行有20多列。我尝试先插入0.7百万条记录,这些记录非常顺利,并在1.7分钟内完成。

然后我尝试插入14.5百万的实际和完整数据。如果我试图将所有这些插入一次,则需要花费大量时间。它运行了1.5个小时。

Spark是我的编程模型。我尝试使用使用TableOutPutFormat的saveAsNewHadoopDataSet和cloudera的hbase-spark bulkput。

两者似乎都在使用相同的东西。我在8个节点集群上运行,具有8个区域服务器并且仅使用单列族。我为区域服务器和主服务器分配了4GB堆。

我不确定,如果我遗漏任何东西或HBase真的窒息一次大量数据插入。

请提供你的想法。我还计划安装pheonix层,这样我就可以直接在HBase数据上使用数据帧抽象,并将数据帧直接保存到HBase。

我仍然在努力寻找HBase如何能够扼杀1450万条记录。数据大约只有9 GB。

2 个答案:

答案 0 :(得分:3)

可能是你没有预分割你的表,而hbase只使用1个regionserver来写数据?

请检查表拆分计数,如果它有一个拆分,您可以在插入100万个记录并截断表然后插入所有数据后将其拆分。截断表不会更改拆分计数,删除所有数据。由于您有8个节点,因此表中至少需要8个拆分。

答案 1 :(得分:0)

你有没有想过Splice Machine?

https://github.com/splicemachine/spliceengine

它可以将每个节点每秒大约100K条记录导入HBase。它有一个非常简单的批量导入命令

http://doc.splicemachine.com/Administrators/ImportingData.html

它在内部使用Spark进行导入,压缩和大型查询。

还要考虑的一件事是,如何将数据存储到HBase中。单独存储每个列可能占用大量空间。

祝你好运......