我在某个网站上发现了以下问题,但我不确定答案是否正确。
MapReduce程序中的哪个Hadoop服务会生成一个新的Mapper?
JobTracker
会生成一个新Mapper
来处理单个文件中的所有记录。 TaskTracker
会生成一个新的Mapper
来处理每个键值对。 TaskTracker
会生成一个新的Mapper
来处理单个输入拆分中的所有记录。 JobTracker
调用TaskTracker
的{{1}}方法,然后调用configure ()
方法,最后调用map ()
方法。 网站说答案是选项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
类来控制排序和分组。
答案 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)
这里有两个术语需要考虑。
在这种情况下,答案3似乎是最准确的答案。
参考: - 权威指南第3版
答案 5 :(得分:0)
将InputSplits作为一个整体提供给地图任务。
分裂又包含键值对。
文件 - &gt; 按此顺序拆分 - &gt; 分区
答案 6 :(得分:0)
正确答案是选项-3
2. TaskTracker产生一个新的Mapper来处理每个键值对。
3. TaskTracker生成一个新的Mapper来处理单个输入分割中的所有记录。
对我来说,为每个键值对生成一个新的Mapper是没有意义的 - 想想64MB块大小包含1000条记录(键值对)。我认为框架不会在这里创建1000个映射器。
Mapper任务处理单输入拆分(不是文件或块或某些记录)