我正在将 1450 万条记录保存到 HBase。每行有 20 多列。我先尝试插入70万条记录,非常顺利,1.7分钟就完成了。
然后我尝试插入实际的完整数据,即 1450 万条。如果我尝试将它们全部插入一次,则会花费很多时间。它运行了1.5小时。
Spark 是我的编程模型。我尝试使用 TableOutPutFormat 和 cloudera 的 hbase-sparkbulkput 使用 saveAsNewHadoopDataSet。
两者似乎都使用相同的。我在 8 个节点集群上运行,有 8 个区域服务器并且仅使用单个列族。我为区域服务器和主服务器分配了 4GB 堆。
我不确定我是否遗漏了任何内容,或者 HBase 是否真的因一次插入大量数据而感到窒息。
请提供您的想法。我还计划安装 pheonix 层,以便我可以直接在 HBase 数据上使用数据帧抽象并将数据帧直接保存到 HBase。
我仍在努力找出 HBase 如何因 1450 万条记录而阻塞。数据约为 9 GB。
最佳答案
可能是您没有预先拆分表并且 hbase 仅使用 1 个区域服务器来写入数据?
请检查表拆分计数,如果有一次拆分,则可以在插入 100 万条记录并截断表然后插入所有数据后拆分它。截断表不会更改拆分计数,而是删除所有数据。由于您有 8 个节点,因此表中至少需要 8 个拆分。
关于hbase - 将大量数据保存到 HBase 非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38734103/