📜  MapReduce 作业执行

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

一旦资源管理器的调度程序将资源分配给特定节点上的容器的任务,应用程序主控程序将通过联系节点管理器来启动容器。主类为YarnChild的任务由Java应用程序执行。
它在可以运行任务之前本地化任务所需的资源。它包括作业配置、分布式缓存中的任何文件和 JAR 文件。它最终运行 map 或 reduce 任务。用户定义的 map 和 reduce 函数(甚至 YarnChild 中)中的任何类型的错误都不会影响节点管理器,因为 YarnChild 在专用 JVM 中运行。所以它不会受到崩溃或挂起的影响。
在与任务本身相同的 JVM 中运行的所有操作都由每个任务设置执行。这些由作业的OutputCommitter确定。对于基于文件的作业,提交操作将任务输出从其初始位置移动到其最终位置。当启用推测执行时,提交协议确保只提交一个重复任务,另一个被中止。


流媒体是什么意思?

流式减少任务并运行特殊映射,目的是启动用户提供的可执行文件并与之通信。使用标准输入和输出流,它与进程通信。 Java进程在任务执行期间将输入的键值对传递给外部进程。它通过用户定义的 map 或 reduce函数运行进程,并将输出的键值对传递回Java进程。
从管理器的角度来看,就好像子进程运行了映射或减少了代码本身。 MapReduce 作业的运行时间从几十秒到几小时不等,这就是长时间运行的批处理的原因。用户获得有关工作进展情况的反馈很重要,因为这可能需要很长的时间。包括任务在内的每个作业都有一个状态,包括作业或任务的状态、作业计数器的值、映射和减少的进度以及描述或状态消息。这些状态在作业过程中发生变化。
当任务正在运行时,任务会跟踪其进度,就像任务的一部分完成一样。这是已为地图任务处理的输入的比例。 reduce 任务稍微复杂一些,但系统仍然可以估计已处理的 reduce 输入的比例。当一个任务正在运行时,它会跟踪它的进度(即任务完成的比例)。对于地图任务,这是已处理输入的比例。对于reduce任务,稍微复杂一些,但是系统还是可以估计出reduce输入处理的比例。

涉及流程——

  • 在映射器或化简器中读取输入记录。
  • 在映射器或化简器中写入输出记录。
  • 设置状态描述。
  • 使用 Reporter 的 incrCounter() 方法或 Counter 的 increment() 方法递增计数器。
  • 调用 Reporter 或 TaskAttemptContext 的 progress() 方法。