在MapReduce中为映射器提供输入

时间:2011-12-07 05:23:24

标签: mapreduce

我刚刚浏览了MapReduce中的单词计数示例。地图功能非常简单。是否有更高级别的函数来决定文件的哪个部分转到哪个映射器? 假设您依赖于依赖于整个文件输入的函数(例如SHA1),是否有任何告诉框架不要拆分文件?

2 个答案:

答案 0 :(得分:2)

  

是否有更高级别的函数来决定文件的哪个部分转到哪个映射器?

当节点上的映射槽空闲时,调度程序会选择最接近节点的拆分,以尽可能避免数据传输。如果未处理的输入拆分与空闲映射插槽位于同一节点上,则处理该拆分,否则将选择同一机架中的拆分,或者选择在机架外部拆分。

  

有没有告诉框架不要拆分文件?

实施FileInputFormat#isSplitable()。然后输入文件不会被拆分,并且每个地图都会处理一次。

import org.apache.hadoop.fs.*;
import org.apache.hadoop.mapred.TextInputFormat;
public class NonSplittableTextInputFormat extends TextInputFormat {
    @Override
    protected boolean isSplitable(FileSystem fs, Path file) {
        return false;
    }
}

答案 1 :(得分:1)

您可以在Hadoop中编写自定义InputSplit和RecordReader。您可以对这些方法进行编程,以告诉框架以您希望的方式拆分输入文件。

请查看:http://developer.yahoo.com/hadoop/tutorial/module5.html