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