我正在为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。
答案 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中。单独存储每个列可能占用大量空间。
祝你好运......