【发布时间】:2017-03-27 14:32:33
【问题描述】:
我在 HDFS (~20Gb) 中有一个大文件,我通常在该文件上执行 MapReduce 作业。创建了大约 170 个映射器。使用的InputFormat 是FileInputFormat。
现在我想只对文件的一部分执行 MapReduce 作业(例如,文件的前 40Mb)。
有没有简单的方法来执行此操作?
感谢您的帮助。
【问题讨论】:
我在 HDFS (~20Gb) 中有一个大文件,我通常在该文件上执行 MapReduce 作业。创建了大约 170 个映射器。使用的InputFormat 是FileInputFormat。
现在我想只对文件的一部分执行 MapReduce 作业(例如,文件的前 40Mb)。
有没有简单的方法来执行此操作?
感谢您的帮助。
【问题讨论】:
大家好,
最后,我找到了一个解决方案,包括派生FileInputFormat 类并覆盖getSplits 方法,以便仅获取与HDFS 文件所需部分相对应的拆分。
在这个方法中,我调用超类来获取InputFileFormat类生成的拆分。由于作业的配置,我设法获得了一些信息,例如我想要读取的 HDFS 文件的开头和 HDFS 文件的结尾。最后,所有从超类的getSPlits方法得到的split的开头和结尾与之前的信息进行比较,如果它们与HDFS文件的所需部分匹配则返回。
【讨论】: