大量插入HBase

时间:2016-06-22 12:36:49

标签: scala hadoop apache-spark hbase hortonworks-data-platform

当我尝试将数据插入HBase时,我遇到了问题。

我有一个1200万行的Spark DataFrame,有两个字段:

SELECT a.*, b.accno as b_accno FROM vtindex a
JOIN vi_accno b
ON b.fileref = a.FileRef
WHERE (a.AccNo like '%123456789%') or (b.accno like '%123456789%')

我需要将它存储在HBase表中,KEY是rowkey,MATCH是一列。

我在rowkey上创建了一个拆分表:

* KEY, a md5 hash
* MATCH, a boolean ("1" or "0")

我使用Hortonworks的HBase shc连接器,如下所示:

create 'GTH_TEST', 'GTH_TEST', {SPLITS=> ['10000000000000000000000000000000',
'20000000000000000000000000000000','30000000000000000000000000000000',
'40000000000000000000000000000000','50000000000000000000000000000000',
'60000000000000000000000000000000','70000000000000000000000000000000',
'80000000000000000000000000000000','90000000000000000000000000000000',
'a0000000000000000000000000000000','b0000000000000000000000000000000',
'c0000000000000000000000000000000','d0000000000000000000000000000000',
'e0000000000000000000000000000000','f0000000000000000000000000000000']}

此代码永远不会结束。它开始向HBase插入数据并永久运行(至少在我杀死它之前35小时)。它执行11984/16000任务,总是执行相同数量的任务。

我做了一个改变:

df.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方面有一些调整吗?

谢谢!

杰弗里

1 个答案:

答案 0 :(得分:0)

我们终于改变了HBase连接器。

使用it.nerdammer.spark.hbase(通过RDD),它可以很好地工作。

import it.nerdammer.spark.hbase._
rdd.toHBaseTable(tableName)
   .toColumns("MATCHED")
   .inColumnFamily(cfName)
   .save()