如何在运行MR作业时忽略MapFiles的索引文件?

时间:2014-11-11 13:00:24

标签: hadoop mapreduce

我的目录已满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>并使用ifinstanceof检查,但我认为这很难看。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我发现它在索引文件中的位置。当启用输入路径的递归遍历时(通过将mapreduce.input.fileinputformat.input.dir.recursive设置为true),可以通过向下遍历文件和目录树来收集映射任务的文件。然后SequenceFileInputFormat接收单个文件而不是目录,因此MapFile检测失败。仅当输入格式接收包含组成MapFile的两个文件的目录时,它才有效。 关闭递归并确保MR期望的布局 - 即,要处理的所有MapFile存储的目录“平面”而没有其他文件夹结构 - 或者手动添加包含MapFile的所有目录为每个这样的目录调用FileInputFormat.addInputPath,作业运行没有失败。

编辑:报告为错误:MAPREDUCE-6155