📜  MapReduce 中的作业初始化

📅  最后修改于: 2021-10-27 06:33:00             🧑  作者: Mango

当资源管理器收到对其submitApplication()方法的调用时,它会将请求移交给 YARN 调度程序。当调度器在节点管理器的管理下分配一个容器时,资源管理器在那里启动应用程序主进程。 MRAppMaster是Java应用程序的Java应用程序的主要类,它为 MapReduce 作业主控。通过创建许多簿记对象,它初始化作业以跟踪作业的进度。这是因为它将接收完成报告并从任务中接收进度。
下一步是检索输入拆分。这些是在客户端从共享文件系统中计算出来的。然后为每个拆分创建一个映射任务对象。它还创建了许多由mapreduce.job.reduces 属性确定的 reduce 任务对象。此属性由 Job 上的setNumReduceTasks()方法设置。此时,任务被赋予了 ID,如何运行构成 MapReduce 作业的任务由应用程序主机决定。
如果作业很小,Application master 可能会选择在与自己相同的 JVM 中运行任务。如果应用程序运行和分配的运行任务和开销超过并行运行的收益,应用程序主将继续工作。据说这样的任务是uberised

一个少于 10 个映射器的作业,只有一个 reducer 可以定义为一个小作业。对于小型作业,输入的大小小于一个 HDFS 块。通过设置mapreduce.job.ubertask.maxmapsmapreduce.job.ubertask.maxreducesmapreduce.job.ubertask.maxbytes ,这些值可能会为作业更改。
通过将mapreduce.job.ubertask.enable设置为 true,必须显式启用 Uber 任务(对于单个作业或跨集群)。应用程序主机调用 OutputCommitter 上的setupJob()方法,最后在任何任务可以运行之前,应用程序主机调用OutputCommitter上的setupJob()方法。
作业的最终输出目录和任务输出的临时工作空间由FileOutputCommitter创建(这是默认设置)。为作业创建最终输出目录,并为任务输出创建临时工作空间。