五、hadoop MapReduce之运行job的流程

22 篇文章 0 订阅
15 篇文章 0 订阅

不论是使用hadoop jar xx.jar  com.example.MyMainClass命令去执行main方法,还是在idea等编译器直接运行main方法,效果其实是一样的。都是为了启动执行指定的类的main方法,然后执行job.waitForCompletion。

 

一、在执行main方法里面的代码时(另一篇文章中job的模板代码)

执行job.waitForCompletion方法时,会启动一个RunJar进程;

(1)

《1》RunJar会向yarn的Resource Manager申请执行一个job;

《2》Resource Manager返回jar相关资源提交的路径(staging-dir)和为本job产生的jobID;

《3》RunJar会把当前job的切片信息、job 的配置信息以及 jar 包上传到指定的路径下,该路径是在hdfs中。

《4》路径大概是:/tmp/xx/xx./yarn-staging/jobID/ ,只是举个例子,不同版本可能不一样;

《5》RunJar向ResourceManager汇报提交结果;

《6》ResourceManager将本job加入任务调度器中;(各种类型调度器)

(2)(3)ResourceManager找到一个nodemanager节点启动mapreduce的MRAppMaster进程。

(4)

《1》MRAppMaster 从 HDFS 中获取需要的数据,如分片信息。这些数据在第三步中存入;

《2》ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源.

(5)一旦ApplicationMaster申请到资源后,ApplicationMaster就会将命令NodeManager启动任务。启动命令里包含了一些信息使得Container可以与ApplicationMaster进行通信。

(6)

《1》NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务(Container)。container执行时会启动yarnchild进程,然后把任务交给yarnchild进程执行。yarnChild进程执行完一个任务就会销毁。(这里的任务可能是map也可能是reduce)

《2》在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态

(MRAppMaster就像一个主控程序,用于控制在哪些container上执行map、哪些container根据key进行分组、哪些container执行reduce、以及某个container上的任务启动失败了再找一个新的运行。);

(7)NodeManger上的该job的container中的任务完成后(上传完结果什么的),向ResourceManager注销自己。此时container上的资源就会被回收了;

在执行hadoop jar xx.jar  com.example.MyMainClass命令后稍等一会儿使用jps命令可以看到RunJar、MRAppMaster、YarnChild等进程,并且YarnChild进程会动态变化(因为map任务和reduce任务是在不同的YarnChid进程上执行的,map执行完,对应的yarnchild就会销毁)。。用jps可以看到进程名,多次jps就可以看到进程的变化了。

 

上面的内容我是看传智播客视频看到的。不过是里面的老师口述,而我用文字再根据自己理解打出来了。

具体可以看下图:

与上面的步骤一一对应

è¿éåå¾çæè¿°

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值