我在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);
}
请帮助我,谢谢你们的问候。
答案 0 :(得分:0)
您可能会将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
。