大量插入到 HBase
Huge insert to HBase
我在尝试向 HBase 插入数据时遇到问题。
我有一个包含 2 个字段的 1200 万行 Spark DataFrame :
* KEY, a md5 hash
* MATCH, a boolean ("1" or "0")
我需要将其存储在 HBase 中table,KEY 是行键,MATCH 是列。
我创建了 table,在 rowkey 上进行了拆分:
create 'GTH_TEST', 'GTH_TEST', {SPLITS=> ['10000000000000000000000000000000',
'20000000000000000000000000000000','30000000000000000000000000000000',
'40000000000000000000000000000000','50000000000000000000000000000000',
'60000000000000000000000000000000','70000000000000000000000000000000',
'80000000000000000000000000000000','90000000000000000000000000000000',
'a0000000000000000000000000000000','b0000000000000000000000000000000',
'c0000000000000000000000000000000','d0000000000000000000000000000000',
'e0000000000000000000000000000000','f0000000000000000000000000000000']}
我这样使用 Hortonworks 的 HBase shc 连接器:
df.write
.options(Map(HBaseTableCatalog.tableCatalog -> cat_matrice))
.format("org.apache.spark.sql.execution.datasources.hbase")
.save()
此代码永无止境。它开始向 HBase 插入数据并永远运行(至少在我杀死它之前 35 小时)。它执行 11984/16000 个任务,总是相同数量的任务。
我做了一个改变:
df.limit(Int.MaxValue)
.write
.options(Map(HBaseTableCatalog.tableCatalog -> cat_matrice))
.format("org.apache.spark.sql.execution.datasources.hbase")
.save()
使用限制(Int.MaxValue),插入1200万行需要4/5分钟。
有人可以解释这种行为吗? HBase 端有 max_connexions 吗?
在 HBase 或 Spark 端是否需要进行一些调整?
谢谢!
杰弗里
我们终于更改了 HBase 连接器。
使用 it.nerdammer.spark.hbase(通过 RDD),它工作得很好。
import it.nerdammer.spark.hbase._
rdd.toHBaseTable(tableName)
.toColumns("MATCHED")
.inColumnFamily(cfName)
.save()
我在尝试向 HBase 插入数据时遇到问题。
我有一个包含 2 个字段的 1200 万行 Spark DataFrame :
* KEY, a md5 hash
* MATCH, a boolean ("1" or "0")
我需要将其存储在 HBase 中table,KEY 是行键,MATCH 是列。
我创建了 table,在 rowkey 上进行了拆分:
create 'GTH_TEST', 'GTH_TEST', {SPLITS=> ['10000000000000000000000000000000',
'20000000000000000000000000000000','30000000000000000000000000000000',
'40000000000000000000000000000000','50000000000000000000000000000000',
'60000000000000000000000000000000','70000000000000000000000000000000',
'80000000000000000000000000000000','90000000000000000000000000000000',
'a0000000000000000000000000000000','b0000000000000000000000000000000',
'c0000000000000000000000000000000','d0000000000000000000000000000000',
'e0000000000000000000000000000000','f0000000000000000000000000000000']}
我这样使用 Hortonworks 的 HBase shc 连接器:
df.write
.options(Map(HBaseTableCatalog.tableCatalog -> cat_matrice))
.format("org.apache.spark.sql.execution.datasources.hbase")
.save()
此代码永无止境。它开始向 HBase 插入数据并永远运行(至少在我杀死它之前 35 小时)。它执行 11984/16000 个任务,总是相同数量的任务。
我做了一个改变:
df.limit(Int.MaxValue)
.write
.options(Map(HBaseTableCatalog.tableCatalog -> cat_matrice))
.format("org.apache.spark.sql.execution.datasources.hbase")
.save()
使用限制(Int.MaxValue),插入1200万行需要4/5分钟。
有人可以解释这种行为吗? HBase 端有 max_connexions 吗? 在 HBase 或 Spark 端是否需要进行一些调整?
谢谢!
杰弗里
我们终于更改了 HBase 连接器。
使用 it.nerdammer.spark.hbase(通过 RDD),它工作得很好。
import it.nerdammer.spark.hbase._
rdd.toHBaseTable(tableName)
.toColumns("MATCHED")
.inColumnFamily(cfName)
.save()