我正在编写MapReduce程序,我对mapper的要求是输出/发出地图输入文件的 x%
以用作reducer的输入。例如,如果我的文件在100
阈值处有50%
条记录,则reducer的输入应该只有50条记录。
我已经看过获得前N个记录的例子,但这不是我想要的。
答案 0 :(得分:0)
有多种方法可以实现它,
编写自定义的InputFormat,只接受X%的数据。
由于映射器的数量取决于InputSplit,因此在Mapper中编写自定义代码,只能从Mapper中发出X%的数据。
答案 1 :(得分:-1)
产生的映射器数量将由输入文件被分解的InputSplits
个数决定。此数字通常由基础HDFS
块大小确定 - 每个InputSplit
将对应于HDFS
块(例如64 MB)。您可以使用JobConf
setNumMapTasks(int n),但这只是对框架的暗示。
如果您希望映射器输出由一定数量的Reducer处理,您可以通过两种方式设置它:
SET mapreduce.job.reduces=n
JobConf
setNumReduceTasks (int n)方法这将使用默认的HashPartitioner
并从mapper输出中生成n
分区,然后由n
reducer处理。