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

标签 hbase

我正在将 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/

相关文章:

java - HBase-0.90.6 在 hbase-site xml 文件中的 Window 7 错误配置

macos - brew 安装hbase?

hadoop - HBase 和 Hadoop

hadoop - 示例 如何将表从 RDBMS 表示到 HBase

java - Hive INSERT OVERWRITE显示错误

hadoop - 如何修复 Jython 和 HBase 中的 "ImportError: No module name apache"错误

java - 当多个map任务在同一个datanote上并行运行时,datanode内存使用的困惑

java - 需要建议,将消息从JMS Queue保存到Hadoop Hbase是一个好的解决方案?

hadoop - 我怎样才能知道 hbase 表中的所有列?

hadoop - 如何将数据存储在 HBase 中以通过部分键扫描进行高效提取?