运行“hbase org.apache.hadoop.hbase.mapreduce.Import”时出现行长度为0的问题

时间:2017-04-18 07:19:48

标签: hbase hadoop2

我想将一个表从hbase版本0.98群集复制到hbase版本1.2.0-cdh5.7.3群集。

运行命令:

hbase org.apache.hadoop.hbase.mapreduce.Import -Dmapreduce.job.queuename= -Dhbase.import.version=0.98 -Dmapreduce.map.speculative=false -Dmapreduce.reduce.speculative=false 

但是我有这样的错误:

Error: java.lang.IllegalArgumentException: Row length is 0
    at org.apache.hadoop.hbase.client.Mutation.checkRow(Mutation.java:534)
    at org.apache.hadoop.hbase.client.Put.<init>(Put.java:110)
    at org.apache.hadoop.hbase.client.Put.<init>(Put.java:68)
    at org.apache.hadoop.hbase.client.Put.<init>(Put.java:58)
    at org.apache.hadoop.hbase.mapreduce.Import$Importer.processKV(Import.java:199)
    at org.apache.hadoop.hbase.mapreduce.Import$Importer.writeResult(Import.java:164)
    at org.apache.hadoop.hbase.mapreduce.Import$Importer.map(Import.java:149)
    at org.apache.hadoop.hbase.mapreduce.Import$Importer.map(Import.java:132)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at    org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

1 个答案:

答案 0 :(得分:0)

我刚刚遇到过这个问题 - 将数据从旧的IBM Big-Insight系统迁移到HDP。

我为解决这个问题做了什么

编写一个HappyBase程序来逐步执行hBase表(以100个键值为步骤)....

每隔几百万左右 - Python代码就会停止......

hbase shell 中,我在同一个键范围内进行了扫描,我可以看到列中包含格式错误的数据。

我的具体数据是格式错误的utf-8数据,导致编解码器出现问题。

我手动删除了列 - 并重复了这些步骤....

当一张表格可以被扫描时,我现在执行了Hbase导出,接着是Hbase导入 - 这一切都有效。

您可以使用Spark,通过导出数据,copyToLocal,然后使用Spark将序列文件作为RDD进行改进。然后应用您的数据过滤规则。