在我的舞台环境中,我可以运行hbase export和copytable,一切正常:
2016-10-25 15:47:15,532 INFO [main] mapreduce.Job: Running job: job_1476894918073_0029
2016-10-25 15:47:23,699 INFO [main] mapreduce.Job: Job job_1476894918073_0029 running in uber mode : false
2016-10-25 15:47:23,702 INFO [main] mapreduce.Job: map 0% reduce 0%
2016-10-25 15:47:34,888 INFO [main] mapreduce.Job: map 19% reduce 0%
但在生产环境中:
2016-10-25 14:58:07,794 INFO [main] mapreduce.Job: map 0% reduce 0%
2016-10-25 14:58:11,888 INFO [main] mapreduce.Job: Task Id : attempt_1469517270026_20969_m_000000_0, Status : FAILED
Error: java.io.IOException: Cannot create a record reader because of a previous error. Please look at the previous logs lines from the task's full log for more details.
at org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.createRecordReader(TableInputFormatBase.java:174)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:515)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:758)
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:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.IllegalStateException: The input format instance has not been properly initialized. Ensure you call initializeTable either in your constructor or initialize method
at org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.getTable(TableInputFormatBase.java:585)
at org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.createRecordReader(TableInputFormatBase.java:169)
当然,我检查了我的完整日志:
java.io.IOException: Cannot create a record reader because of a previous error.
阶段:HDP 2.5
产品:HDP 2.3(无法升级整个产品)。
您是否经历过类似的问题?我需要在不同的集群之间移动hbase数据。
更新
好的,我会尝试更新帖子,找到解决方案,我在舞台环境中使用的命令(但不是在制作中)是:
srcCluster $ hbase org.apache.hadoop.hbase.mapreduce.CopyTable --peer.adr = dstClusterZK:2181:/ hbase tableOrig
或
hbase org.apache.hadoop.hbase.mapreduce.Export
我在代码中也看了github:
apache/hbase github, TableInputFormatBase.java
它看起来像我的生产hbase没有看到表:| 怎么可能这样呢?
if (getTable() == null) {
// initialize() must not have been implemented in the subclass.
throw new IOException(INITIALIZATION_ERROR);
}
无论如何,我开始认为可能还有一些其他的解决方案, CopyTable 或导出来移动不同群集之间的数据,你现在还有吗?
我想我不能简单地复制数据,因为在源代码上我有10个hbase服务器和目标4个hbase服务器(但功能更强大)。
任何建议都会非常有用。
更新
盯着认为这可能与减少进程的内存量太少有关。我会检查一下,然后带着反馈返回这里。
更新
我已将MRD设置更改为以下内容:
mapreduce.map.memory.mb:2048, mapreduce.reduce.memory.mb:4096
mapreduce.map.java.opts:1638, mapreduce.reduce.java.opts:3276
基于:MAPREDUCE 2 IN HDP 2.x 但是我没有帮助,或者我应该重新启动而不仅仅是纱线的NodeManager&#39>