我有一个目录 MapFile
s。我现在想对他们做一个mr测试。我使用 SequenceFileInputFormat
新的api应该知道 MapFile
这条线索中的一个答案是。但是,这是行不通的。工作达到一定比例之后,我得到了
Error: java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to com.mycompany.MyOwnWritable
我想Map程序会跳过索引文件。我怎样才能确保这些被忽略,或者更好的是,只使用具有正确输入键和值类的文件?唯一能想到的方法就是 Mapper<Object, Object, MyKeyOut, MyValueOut>
以及使用 if
s和 instanceof
支票,但我觉得这很难看。有没有更好的办法?
1条答案
按热度按时间lsmepo6l1#
我找到了它在索引文件上被绊倒的地方。启用输入路径的递归遍历时(通过设置
mapreduce.input.fileinputformat.input.dir.recursive
至true
)Map任务的文件是通过遍历文件和目录树来收集的。这个SequenceFileInputFormat
然后接收单个文件而不是目录,因此MapFile
检测失败。只有当输入格式接收到包含组成文件的两个文件的目录时,它才起作用MapFile
. 当关闭递归并确保布局时,mr需要一个MapFile
要处理的被存储在“平面”中,没有额外的文件夹结构,也没有添加包含MapFile
通过调用FileInputFormat.addInputPath
对于每一个这样的目录,作业都不会失败。编辑:报告为错误:mapreduce-6155