我在hdfs上放置了一个mp4文件,并试图直接分析它,我有一个类名VideoRecordReader
,其中给出了强制转换错误。以下是"错误"的描述。
您已经加载了库/usr/local/lib/libopencv_core.so.3.0.0可能已禁用堆栈保护。虚拟机将尝试修复堆栈现在守卫。尝试_201607261400_0011_m_0000000_1:高度建议您使用"execstack-c"修复库,或者将其与"-z noexecstack"链接。26年7月16日17:32:27信息映射。JobClient:任务Id:attempt_201607261400_0011_m_0000000_2,状态:失败java.lang.ClassCastException:org.apache.hadoop.mapreduce.lib.input.FileSplit无法强制转换为org.apache.hadop.mapred.FileSplitcom.finalyearproject.VideoRecordReader.initialize(VideoRecordReader.java:65)在org.apache.hadop.mapred.MapTask$NewTrackingRecordReader.initialize(MapTask.java:521)网址:org.apache.hadop.mapred.MapTask.runNewMapper(MapTask.java:763)在org.apache.hadop.mapred.MapTask.run(MapTask.java:364)org.apache.hadop.mapred.Child$4.run(Child.java:255)位于的java.security.AccessController.doPrivileged(本机方法)javax.security.auth.Subject.doAs(Subject.java:422)org.apache.hoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)网址:org.apache.hadop.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);
}
请帮我谢谢你的问候。
很可能是将mapred
和mapreduce
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
。