我有一个满是MapFile
s的目录。我现在想在它们上运行MR作业。我使用新API的SequenceFileInputFormat
,它应该知道MapFile
s作为线程状态中的一个答案。但是,这并不奏效。这项工作达到了一定的百分比,之后,我得到了
Error: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to com.mycompany.MyOwnWritable
我想映射器会绊倒索引文件。如何确保忽略这些,或者更好的是,只使用具有正确输入键和值类的文件?想到的唯一方法是重写Mapper<Object, Object, MyKeyOut, MyValueOut>
并使用if
和instanceof
检查,但我认为这很难看。有更好的方法吗?
我发现了它在索引文件上的位置。当启用输入路径的递归遍历时(通过将mapreduce.input.fileinputformat.input.dir.recursive
设置为true
),映射任务的文件是通过沿着文件和目录树向下走来收集的。SequenceFileInputFormat
然后接收单独的文件而不是目录,因此MapFile
检测失败。只有当输入格式接收到包含构成MapFile
的两个文件的目录时,它才起作用。当关闭递归并确保布局MR所期望的(即,要处理的所有MapFile
s都"平面"存储的目录,而没有额外的文件夹结构)时,或者通过为每个此类目录调用FileInputFormat.addInputPath
手动添加包含MapFile
s的所有目录时,作业运行不会失败。
编辑:报告为错误:MAPREDUCE-6155