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

lyfkaqu1  于 2021-06-09  发布在  Hbase
关注(0)|答案(1)|浏览(327)

我想将一个表从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)
y1aodyip

y1aodyip1#

我刚刚经历了这个问题—将旧的ibm big insight系统中的数据迁移到hdp中。
我为解决这个问题所做的是
写一个happybase程序来逐步遍历hbase表(以100个键值为单位)。。。。
每隔几百万左右,python代码就会停止。。。。
在hbase shell中,我对同一个键范围进行了扫描,可以看到列中的数据格式不正确。
我的特定数据是格式错误的utf-8数据,导致编解码器出现问题。
我手动删除列-并重复这些步骤。。。。
当一个表可以被“扫描”时,我现在执行hbase导出,然后执行hbase导入—所有这些都工作了。
您可以使用spark对此进行改进,方法是导出数据、复制到本地,然后使用spark将序列文件作为rdd读取。然后应用数据过滤规则。

相关问题