SplitFile给出了投射错误

时间:2016-07-27 08:20:29

标签: hadoop mapreduce hdfs

我在hdfs上放置了一个mp4文件并试图直接分析它我的类名为VideoRecordReader,它给出了转换错误。以下是错误的描述。

  

您已加载库/usr/local/lib/libopencv_core.so.3.0.0   可能已禁用堆栈保护。 VM将尝试修复堆栈   现在守卫。 attempt_201607261400_0011_m_000000_1:非常高兴   建议您使用'execstack -c'修复库,或者   用'-z noexecstack'链接它。 16/07/26 17:32:27信息   mapred.JobClient:任务ID:attempt_201607261400_0011_m_000000_2,   状态:FAILED java.lang.ClassCastException:   无法转换为org.apache.hadoop.mapreduce.lib.input.FileSplit   org.apache.hadoop.mapred.FileSplit at   com.finalyearproject.VideoRecordReader.initialize(VideoRecordReader.java:65)     在   org.apache.hadoop.mapred.MapTask $ NewTrackingRecordReader.initialize(MapTask.java:521)     在org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)     在org.apache.hadoop.mapred.MapTask.run(MapTask.java:364)at   org.apache.hadoop.mapred.Child $ 4.run(Child.java:255)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:1190)     在org.apache.hadoop.mapred.Child.main(Child.java:249)

这是SplitFile的代码。

public void initialize(InputSplit genericSplit, TaskAttemptContext context)
            throws IOException, InterruptedException {

        FileSplit split = (FileSplit) genericSplit;
        Configuration job = context.getConfiguration();

        start = 0;
        end = 1; 

        final Path file = split.getPath();
        FileSystem fs = file.getFileSystem(job);
        fileIn = fs.open(split.getPath());
        filename = split.getPath().getName();
        byte [] b = new byte[fileIn.available()];
        fileIn.readFully(b);
        video = new VideoObject(b);
    }

请帮助我,谢谢你们的问候。

1 个答案:

答案 0 :(得分:0)

您可能会将mapredmapreduce API混合在一起。

它抱怨你正在尝试将org.apache.hadoop.mapreduce.lib.input.FileSplit投射到org.apache.hadoop.mapred.FileSplit

您需要确保通常不要在两个API之间混合导入。

因此,请检查是否已导入org.apache.hadoop.mapred.FileSplit并将其更改为org.apache.hadoop.mapreduce.lib.input.FileSplit