Sqoop2 Hbase 导入:无法为行键列插入具有空值的行

Posted

技术标签:

【中文标题】Sqoop2 Hbase 导入:无法为行键列插入具有空值的行【英文标题】:Sqoop2 Hbase Import:Could not insert row with null value for row-key column 【发布时间】:2017-04-26 13:06:44 【问题描述】:

我正在尝试使用 sqoop 作业将数据从 oracle 迁移到 Hbase。看起来它已成功导出,但在 Hbase 中导入时会引发错误。

工作1:

​ `​sqoop import --verbose --connect *** --username *** --password *** --table 'abc' --columns "MID,EID,RTIMESTAMP,VALUE,UTIMESTAMP" --split-by 'abc.ID' --hbase-table "HPVSQOOP" --column-family "cf1" --hbase-row-key MID,EID,RTIMESTAMP --num-mappers 4 --hbase-bulkload​

​其中 ID 是 Oracle 中的主键,但我希望我的 HBase 行键为 MID_EID_RTIMESTAMP

​Map-Reduced 因抛出错误而失败: ​

​INFO mapreduce.Job:任务 ID:attempt_1492489711789_0014_m_000003_2, 状态:失败错误:java.io.IOException:无法插入行 行键列的空值:MID、EID、RTIMESTAMP at org.apache.sqoop.hbase.ToStringPutTransformer.getPutCommand(ToStringPutTransformer.java:146) 在 org.apache.sqoop.mapreduce.HBaseBulkImportMapper.map(HBaseBulkImportMapper.java:83)

​ 另一个带有 --query 的作业不适用于 Hbase 导入。 ​​​ ​工作2:

​sqoop import --verbose --connect *** --username *** --password **' --query "select MID,EID,VALUE,RTIMESTAMP,UTIMESTAMP,ID from database.abc where \$CONDITIONS" --split-by 'abc.ID' --hbase-table "HPVSQOOP" --column-family "cf1" --hbase-row-key "MID,EID,RTIMESTAMP" --num-mappers 4 --hbase-bulkload

​最终抛出错误: ​

错误 sqoop.Sqoop:运行 Sqoop 时出现异常: java.lang.NullPointerException java.lang.NullPointerException

【问题讨论】:

【参考方案1】:

如果你的数据库中的列名是小写的,你应该在命令行中使用小写的名字,比如--hbase-row-key "mid,eid..."

【讨论】:

以上是关于Sqoop2 Hbase 导入:无法为行键列插入具有空值的行的主要内容,如果未能解决你的问题,请参考以下文章

使用不存在的 hbase 行键更新行?

sqoop1与sqoop2

CouchDB 为行键返回无(减少功能)

HBase基本操作

HBase里的优秀行键设计

HBase - 行键基础