快乐学习 一个网站喵查铺子(catpuzi.com)全搞定~

Job提交的流程以及Yarn的工作机制一览

大数据 数据帝 2020-02-09 扫描二维码

在昨天的mapreduce代码里面有Job的类用于统一的资源调度。那么深挖一层,这个Job类的流程是怎样进行的呢?

当我们执行job.waitforcompletion()时候,会启动一个进程Runjar,通过它与集群进行通信。

首先,Runjar它会去找老大哥resouce manger申请执行一个job,老大哥同意后,返回一个job相关资源提交的路径(Stage-Dir)和产生的jobID。接下来,runjar拿到大哥的手令,把资源和JobID传给HDFS里面对应的Stage-Dir路径。最后,runjar告诉大哥resouce manger,提交已经结束。Resouce manger知道后,开始把本次的job加入任务队列。紧接着,另外的小弟nodemanger就开始领取任务,每个nodemanager会分配运行时候所需的资源容器(包含所需CPU,内存,磁盘IO,网络IO等)。在这些资源分配好后,Resouce manger会启动MRAppMaster这个类。至此,Yarn的工作基本结束,接下来是MRAppMaster登场。

MRAppMaster会先找resouce manger注册(包括自己将在哪里运行等),MRAppMaster会去相应节点启动map和reduce任务。我们查看进程会看到YarnChild,就是map任务在工作了。每一个任务执行完后,MRAppMaster会通知resouce manger把相应的资源回收。

因此,当运行代码之前,通过jps首先看到的只是静态进程,一旦我们启动,首先就会看到新增的进程Runjar,紧接着会看到MRAppMaster还有YarnChild。当任务执行完后,YarnChild,Runjar和MRAppMaster都会被释放,jps看到的就是运行之前的进程。
Job提交的流程以及Yarn的工作机制一览

喜欢 (0)
关于作者: