无法在MR 2.3中从TaggedInputSplit转换为FileSplit

时间:2015-02-20 10:44:34

标签: hadoop mapreduce yarn

当我在MR作业中使用MultipleInput时,我得到了这个classcast异常。

Error: java.lang.ClassCastException: org.apache.hadoop.mapreduce.lib.input.TaggedInputSplit cannot be cast to org.apache.hadoop.mapreduce.lib.input.FileSplit
    at com.capitalone.integratekeys.mapreduce.mapper.IntegrationKeysMapperInput.setup(IntegrationKeysMapperInput.java:74)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:142)
    at org.apache.hadoop.mapreduce.lib.input.DelegatingMapper.run(DelegatingMapper.java:55)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:784)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
    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:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)

inputSource = ((FileSplit)context.getInputSplit()).getPath().toString();

虽然我在JIRA找到了一张关于它已经解决的票据。但我仍然面临着这个问题。请给我一些意见。

1 个答案:

答案 0 :(得分:1)

在这一行

inputSource =((FileSplit)context.getInputSplit())。getPath()。toString();

context.getInputSplit()是TaggedInputSplit的实例

并转换为FileSplit。

我检查两个班级都没有父子关系。 所以得到例外。 您可以使用Hadoop conf来获取inputSource。

获取输入源的方法: 参数

中的JobContext上下文

inputSource = context.getConfiguration()。get(" mapreduce.input.fileinputformat.inputdir",null);

如果您无法获取输入源,请提供我如何在驱动程序中设置输入文件路径