运行mr jobs时如何忽略mapfiles的索引文件?

oyxsuwqo  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(255)

我有一个目录 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 支票,但我觉得这很难看。有没有更好的办法?

lsmepo6l

lsmepo6l1#

我找到了它在索引文件上被绊倒的地方。启用输入路径的递归遍历时(通过设置 mapreduce.input.fileinputformat.input.dir.recursivetrue )Map任务的文件是通过遍历文件和目录树来收集的。这个 SequenceFileInputFormat 然后接收单个文件而不是目录,因此 MapFile 检测失败。只有当输入格式接收到包含组成文件的两个文件的目录时,它才起作用 MapFile . 当关闭递归并确保布局时,mr需要一个 MapFile 要处理的被存储在“平面”中,没有额外的文件夹结构,也没有添加包含 MapFile 通过调用 FileInputFormat.addInputPath 对于每一个这样的目录,作业都不会失败。
编辑:报告为错误:mapreduce-6155

相关问题