TaskTracker为每个输入拆分或每个键值对产生一个新的Mapper?

时间:2015-01-02 11:04:06

标签: hadoop

我在某个网站上发现了以下问题,但我不确定答案是否正确。

  

MapReduce程序中的哪个Hadoop服务会生成一个新的Mapper?

  1. JobTracker会生成一个新Mapper来处理单个文件中的所有记录。
  2. TaskTracker会生成一个新的Mapper来处理每个键值对。
  3. TaskTracker会生成一个新的Mapper来处理单个输入拆分中的所有记录。
  4. JobTracker调用TaskTracker的{​​{1}}方法,然后调用configure ()方法,最后调用map ()方法。
  5. 网站说答案是选项2,但我对答案3感到困惑。

    close ()的java doc中,我发现了以下内容:

      

    Hadoop Map-Reduce框架为mapper为作业生成的每个InputSplit生成一个地图任务。 InputFormat实施可以通过Mapper访问作业的配置   框架首先调用theJobContext.getConfiguration(),然后setup(org.apache.hadoop.mapreduce.Mapper.Context)调用map(Object, Object, Context)中的每个键/值对。最后调用InputSplit。   随后将与给定输出键关联的所有中间值按框架分组,并传递给cleanup(Context)以确定最终输出。用户可以通过指定两个键Reducer类来控制排序和分组。

7 个答案:

答案 0 :(得分:1)

是2

Map Task是JVM

Mapper只是一个java类或一个对象

作业计划程序为每个拆分创建一个Map任务:(MapReduce1第191页Hadoop The Definitive Guide 3rd)。

Application Master为每个分割创建一个map任务对象:(同一本书的MapReduce2第199页)。

无论哪种情况,都不是taskTrack产生Map任务。

TaskTrack产生Mapper类来处理每个键/值对。

答案 1 :(得分:0)

答案是选项3.Tasktrackers生成映射器实例执行的JVM。映射器始终处理整个inputsplit。

答案 2 :(得分:0)

从Definitve指南中选择,选项3是正确的答案。以下是本书所说的内容

YarnChild在专用JVM中运行,原因与tasktrackers产生的原因相同 MapReduce 1中任务的新JVM:

答案 3 :(得分:0)

答案应为2

查看Mapper类代码:

 public class MaxTemperatureMapper
     extends Mapper<LongWritable, Text, Text, IntWritable> {

这意味着Mapper类/对象每次都会占用一个键/值对,当处理了这个k / v对时,类/对象完成,它就完成了。下一个k / v对将由另一个Mapper处理,一个新的类/对象。

答案 4 :(得分:0)

这里有两个术语需要考虑。

  • Mapper ,就像TaskTracker在单独生成的Map任务中一样 JVM处理输入拆分。 ( 所有的 )。对于TextInputFormat,这将是输入文件中特定数量的行。
  • 为分割中的每个记录(键值对)调用的
  • 映射方法。 Mapper.map(...)。对于TextInputFormat,每个map方法(调用)都将处理输入拆分中的一行。

在这种情况下,答案3似乎是最准确的答案。

参考: - 权威指南第3版

答案 5 :(得分:0)

将InputSplits作为一个整体提供给地图任务。

分裂又包含键值对。

文件 - &gt; 按此顺序拆分 - &gt; 分区

答案 6 :(得分:0)

正确答案是选项-3

2. TaskTracker产生一个新的Mapper来处理每个键值对。

3. TaskTracker生成一个新的Mapper来处理单个输入分割中的所有记录。

对我来说,为每个键值对生成一个新的Mapper是没有意义的 - 想想64MB块大小包含1000条记录(键值对)。我认为框架不会在这里创建1000个映射器。

Mapper任务处理单输入拆分(不是文件或块或某些记录)