开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Hadoop 2】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/75/detail/15842
Hadoop 2(三)
内容介绍:
一、Map Reduce
二、Map Reduce-WordCount
三、MapReduce
四、Java MapReduce
五、Scaling Out
六、MapReduce inside:JobTracker
七、YARN
六、MapReduce inside:JobTracker
所以在这个过程当中,我们可以确定工作原理是在 Hadoop 里面有很重要的一个 job track。
上图是一个客户端,客户端会创建一个 job track,然后把作业提交上去,提交上去之后,会找到一组机器去分配,去运行,在运行的过程当中,每台机器上都有一个 Task tracker ,跟踪当前这台机器上分配过来的 map 和r educe是活的还是死的,有没有执行,有没有一直发信号给 job tracker,在这个过程当中,job tracker 一旦知道某个任务不能运行它就会重新调动,在这个过程当中,客户端是不知道的。在这个过程当中,所有的 task 都要到 Shared File System 里面去读原始的输入,以上就是整个过程。
这个过程被人认为有一点问题,首先要看有哪一些节点,有哪些节点可以来接受 map 任务,或者 reduce 任务。所以第一部分工作就是管理当前的一些资源,来决定每一个可以执行什么任务;第二个当任务真正分发到节点之后,他还得接受这些所有节点发过来的信息,指导这些任务,身份有两重,第一重是管理资源,知道哪些资源能干什么,第二重是管理所有的 task,要知道每个任务执行的状态,那两个角色完全可以分离,全部让 job tracker 去做,job tracker是个重量级的对象,很耗资源,是否可以分离这两个,就是被称为下一代 map reduce 的 YARN 。
七、YARN
YARN 就是把资源管理和作业调度分开,一个只管资源,另外一个专门去跟踪所有的 task。相当于在观察节点好不好,一个是判断运行的任务好不好,把两个东西分离到两个不同的手绘线。这就是 YARN 的一个原理,会把整个原来job tracker做的工作分离成 ResourceManager 或者 Application master 两个部分。 ResourceManager 是全集性的,判断资源是否可用,能不能分配任务。Application master 每个资源一个,只跟踪本身所有的 master ,map 或者reduce 的 task。可以看到,职责分离了,未来会有一个 ResourceManager 和若干个 Application master ,这里面指的 Application master 就是之前的作业,可能是一个复杂作业,多个作业构成的一个有向无环图。
未来就会变成整个全局里有一个单一的 ResourceManager。每一个节点上都会有一个 Node Manager, Node Manager 要发 Node 的状态,也就是告诉当前节点的资源利用率是多少,是否活着,以心跳的方式发过来,就会知道现在所有的资源是什么样的。当一个客户端提交一个作业之后,会根据这些 Node 的状态分配容器去运行 map 和 reduce ,然后在一个机器上起红色去管所有的任务,可以看到,container 是在运行 map 或者 reduce 的任务的容器,只向 master 汇报,master会周期性地向 resource 汇报。请求资源,汇报的时候会说不够,希望多给一些资源,它就会根据当前收集到的Node Manager 的状态多分配资源。图中的紫色也提交过任务,根据当前的这个状态,给分配一个 Master 然后 Master 就说根据当前的状态新加一个 container ,就会定期的把心跳数据发送给 master 。 master 拿到数据就会知道执行的效果怎么样。从图中可以看到有两个客户端提交了两个 job ,两个 job 的 master 是分离的,各有一个专门去管,然后 ResourceManager 就在监听所有节点的状态,并且接收 master 分配资源的请求,给他们分配资源 。这个分配完资源以后,文件中跑的 map 或者 reduce 的任务,执行任务的状态只向 APP Mstr 做汇报。
所以资源管理和任务的调度就被完全抵消。首先在系统当中,原来都是 job tracker 管理两个方法,它的压力显著下降。因为只管理所有节点的状态,把所有任务的应用管理全部分散到各个 master 里面,每一个 master 只管自己的容器里的状态,所以也不会有很重的任务。这样一个分离显得更科学一点,然后在 container 里可以跑多个 map 或者 reduce 去并行处理。这是真正的 Hadoop 里面看到 YARN 的实现,刚才看到的所有东西,应该都是在这样的框架里面去执行。
所以 YARN 里面看到的实际上 ResourceManager 就是把它分割成一个调度器,为一个任务的管理器,而任务的管理器就是在告诉在什么地方可以去跑一个应用,真正的应用管理器真正在接收 job 的提交,然后把任务分布到若干个机器上,Node Manager 周期性的汇报状态的职责就被分开了。以上就是 YARN 的结构。