2017-04-18 64 views
0

我知道結果序列化用於我使用單個輸入表的情況。MultideInput MapReduce with ResultSerialization

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: Task Id : attempt_1492475015807_0003_m_000003_2, Status : FAILED Error: java.lang.NullPointerException at 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) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:747) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:340) at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:168) 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:1614) at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

回答

0

我能夠通過這個階段獲得的。我在作業配置中明確指定了ResultSerialization類(但必須在作業實例創建之前完成)。

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

這是他在使用單個輸入表時初始化映射器時如何指定的。 如果我對此有任何進一步的調查結果,我將確保更新此答案,以便可能對其他需要此方法的人有用。