Hadoop v2(Yarn) 调度分析 (1) JobClient 的提交过程
2013-03-06 16:05
776 查看
ResourceManager:
ApplicationManager:
负责为AppMaster申请Container (资源),并监控AppMaster的failedResourceScheduler:
负责多个application的资源分配,调度ContainerNodeManager:
负责启动和监控ContainerApplicationMaster:
负责监控Task (Map或Reduce) 的执行情况,为Task向RM申请Container,记录Task的history,在Task出问题的时候回放history注: 本图作者 infcollector@gmail.com; weibo http://weibo.com/u/2249325320
JobClient 的提交过程:
1. JobClient通过submitJob提交Job给RM(ResourceManager),RM为AM(AppMaster)分配Container,并通知NM(NodeManager)启动Container。
源码跟踪:1). JobSubmitter.java: SubmitJobInternal() -> YARNRunner.java : submitJob() -> ClientRMProtocolPBClientImpl.java: resMgrDelegate.submitApplication() -> proxy.submitApplication() (protobuffer)
之后通过 RPC 发送命令,(还包括很多其他的信息)内容如下:
....
JAVA_HOME/bin/java -Dlog4j.configuration=container-log4j.properties -Dyarn.app.mapreduce.container.log.dir=<LOG_DIR>
-Dyarn.app.mapreduce.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Xmx1024m
org.apache.hadoop.mapreduce.v2.app.MRAppMaster 1><LOG_DIR>/stdout 2><LOG_DIR>/stderr
....
在这些信息中还包含着job.jar和job.xml的内容,在此时Master会将用户提交的MapReduce任务共享到HDFS上,给各个Slave Node 分享(未验证)。
2). NM的dispatcher接收到Event后分派给ContainerLauncher,ContainerLauncher的handle收到LAUNCH_CONTAINER event后,通过containerLauncher.submit(launch)提交给ContainerLaunch,ContainerLaunch调用Call方法启动Container, ret = exec.launchContainer(exec为DefaultContainerExecutor类,在默认情况下),在DefaultContainerExecutor中launchContainer通过调用shExec.execute()(shExec在hadoop-common工程的Shell.java中),使runCommand执行脚本launch_container.sh,启动脚本之后,通过process.waitFor()等待脚本执行完成。
3). launch_container.sh会自动生成在/tmp/nm-local-dir/usercache/USERNAME/appcache下,生成脚本的内容一部分来自于RM之前通过RPC发来的命令(如上),编号为1的目录为启动MRAppMaster的脚本的所在目录;当Job完成后,USERNAME下的所有文件都会被自动删除。
2. MRAppMaster.java 启动后会配置和启动一些Service来完成AM的功能,
当所有的Service都启动完成后,MRAppMaster.java进程结束。
Service Name: DispatcherService Name: org.apache.hadoop.mapred.TaskAttemptListenerImpl
Service Name: TaskHeartbeatHandler
Service Name: TaskCleaner
Service Name: MRClientService
Service Name: org.apache.hadoop.mapreduce.v2.app.speculate.DefaultSpeculator
Service Name: org.apache.hadoop.mapreduce.v2.app.MRAppMaster$ContainerAllocatorRouter
Service Name: org.apache.hadoop.mapreduce.v2.app.MRAppMaster$ContainerLauncherRouter
Service Name: org.apache.hadoop.mapreduce.v2.app.MRAppMaster$StagingDirCleaningService
Service Name: JobHistoryEventHandler
1). MRAppMaster.java启动后会配置启动10个Services(如上), 同时,发送JOB_INIT和JOB_START事件给JobImpl.java,JobImpl的handle收到event后,stateMachine会从状态NEW -> INIT -> RUNNING,同时,在收到JOB_START时,JobImpl调用startTransition,并通过job.scheduleTasks向TaskImpl发送T_SCHEDULE,将状态从NEW->SCHEDULED,同时向TaskAttemptImpl发送TA_SCHEDULE,并TaskImpl开始监控TaskImpl,如果出错发送TA_RESCHEDULE,TaskAttemptImpl的状态从NEW->UNASSIGNED。
2). Hadoop Yarn调度中有很多Attempt的执行方式,意思是尝试执行,比如TaskImpl和TaskAttemptImpl,Task启动TaskAttempt后,监视TA,如果TA执行过慢,Task会从新启动一个TA,和之前的TA竞争执行,取其较快的结果;防止Hadoop被过慢的Node托慢整个Job。
相关文章推荐
- hadoop2提交到Yarn: Mapreduce执行过程分析1
- hadoop2提交到Yarn: Mapreduce执行过程分析1
- hadoop2提交到Yarn: Mapreduce执行过程分析
- Hadoop源码分析(三)--------------job提交过程分析(3)之job的split过程
- hadoop2提交到Yarn: Mapreduce执行过程分析2
- hadoop2提交到Yarn: Mapreduce执行过程分析2
- Hadoop源码分析23:MapReduce的Job提交过程
- hadoop yarn的job提交流程源码分析
- hadoop2提交到Yarn: Mapreduce执行过程reduce分析3
- hadoop2提交到Yarn: Mapreduce执行过程reduce分析3
- hadoop 源码分析(一) jobClient 提交到JobTracker
- Hadoop 2.0 Yarn代码:RM与NM代码_心跳驱动服务分析_1 初始阶段(Job提交前)
- Hadoop 2.0 Yarn代码:RM与NM代码_心跳驱动服务分析_1 初始阶段(Job提交前)
- hadoop2提交到Yarn: Mapreduce执行过程分析
- hadoop2提交到Yarn: Mapreduce执行过程分析1
- Hadoop v2(Yarn)调度分析(2)ResourceManager
- hadoop2提交到Yarn: Mapreduce执行过程分析2
- Hadoop提交Job Client端源码分析
- hadoop2提交到Yarn: Mapreduce执行过程reduce分析3
- hadoop2提交到Yarn: Mapreduce执行过程分析