具有ResultSerialization

时间:2017-04-18 15:23:04

标签: hadoop mapreduce hbase

我理解结果序列化用于我使用单个输入表的情况。

TableMapReduceUtil.initTableMapperJob( tableName, scan, Mapper.class, Text.class, Result.class, job );

在使用MultiTableInput(多次扫描作为输入)时如何实现相同的想法?

TableMapReduceUtil.initTableMapperJob( scans, SummaryMapper.class, Text.class, Result.class, job );

运行MR作业时出现以下错误:

  

INFO mapreduce.Job:任务ID:attempt_1492475015807_0003_m_000003_2,   状态:FAILED错误:java.lang.NullPointerException           在org.apache.hadoop.mapred.MapTask $ MapOutputBuffer.init(MapTask.java:988)           at org.apache.hadoop.mapred.MapTask.createSortingCollector(MapTask.java:391)           at org.apache.hadoop.mapred.MapTask.access $ 100(MapTask.java:80)           at org.apache.hadoop.mapred.MapTask $ NewOutputCollector。(MapTask.java:675)           在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:747)           在org.apache.hadoop.mapred.MapTask.run(MapTask.java:340)           在org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:168)           at java.security.AccessController.doPrivileged(Native Method)           在javax.security.auth.Subject.doAs(Subject.java:422)           在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)           在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

1 个答案:

答案 0 :(得分:0)

我能够度过这个阶段。我在作业配置中明确指定了ResultSerialization类(但必须在创建作业实例之前完成)。

config.setStrings( "io.serializations", config.get( "io.serializations" ),
                    MutationSerialization.class.getName(), ResultSerialization.class.getName(),
                    KeyValueSerialization.class.getName() );

这是他在使用单个输入表初始化映射器时的指定方式。 如果我对此有任何进一步的发现,我将一定会更新这个答案,以便对可能需要它的其他人有用。