将 Huge 数据保存到 HBase 一直很慢

Saving Huge data to HBase has been very slow

我正在将 1450 万条记录保存到 HBase。每行有 20 多列。我首先尝试插入 70 万条记录,非常顺利,并在 1.7 分钟内完成。

然后我尝试插入实际和完整的数据,即 1450 万。如果我尝试将它们全部插入一次,那会花费很多时间。它 运行 1.5 小时。

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

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

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

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

我仍在努力寻找 HBase 为何会因为 1450 万条记录而窒息。数据只有 9 GB 左右。

可能是您没有预先拆分 table 并且 hbase 仅使用 1 个区域服务器来写入数据?

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

你有没有想过拼接机?

https://github.com/splicemachine/spliceengine

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

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

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

还需要考虑的一件事是如何将数据存储到 HBase 中。单独存储每一列会占用很多 space。

祝你好运...