MapReduce输入输出选择性

时间:2018-05-24 17:46:16

标签: hadoop mapreduce

我正在编写MapReduce程序,我对mapper的要求是输出/发出地图输入文件的 x% 以用作reducer的输入。例如,如果我的文件在100阈值处有50%条记录,则reducer的输入应该只有50条记录。

我已经看过获得前N个记录的例子,但这不是我想要的。

2 个答案:

答案 0 :(得分:0)

有多种方法可以实现它,

  1. 编写自定义的InputFormat,只接受X%的数据。

  2. 由于映射器的数量取决于InputSplit,因此在Mapper中编写自定义代码,只能从Mapper中发出X%的数据。

  3. 如果数据均匀分布,则可以使用分区程序将X%的数据传递给Reducer。

答案 1 :(得分:-1)

产生的映射器数量将由输入文件被分解的InputSplits个数决定。此数字通常由基础HDFS块大小确定 - 每个InputSplit将对应于HDFS块(例如64 MB)。您可以使用JobConf setNumMapTasks(int n),但这只是对框架的暗示。

如果您希望映射器输出由一定数量的Reducer处理,您可以通过两种方式设置它:

  1. SET mapreduce.job.reduces=n
  2. JobConf setNumReduceTasks (int n)方法
  3. 这将使用默认的HashPartitioner并从mapper输出中生成n分区,然后由n reducer处理。