我刚刚在看MapReduce中的单词计数示例。地图功能非常简单。是否有一个更高级的函数来决定文件的哪个部分到哪个映射器?假设您依赖于依赖于整个文件输入的函数(如SHA1),是否有任何告诉框架不要拆分文件?
是否有一个更高级的函数来决定文件的哪个部分到哪个映射器?
当一个节点上的映射槽空闲时,调度程序选择一个最接近该节点的分割,以尽可能避免数据传输。如果未处理的输入分割与空闲映射槽在同一节点上,则处理该分割,如果不是,则选择同一机架内的分割,否则选择机架外的分割。
有没有告诉框架不要拆分文件?
实现FileInputFormat#isSplitable()。然后不分割输入文件,每个map处理一个。
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;
}
}
您可以在Hadoop中编写自定义InputSplit和RecordReader。你可以对这些方法进行编程,告诉框架按照你想要的方式分割输入文件。
请查看:http://developer.yahoo.com/hadoop/tutorial/module5.html