如上图我简单的画了一个草图给大家用大白话解释一下yarn是干什么的,其实总结来说并没有大家常看的那么麻烦,那些都是最底层的,咱们虽然要知道,但是没有必要知道的那么详细,毕竟我们不是做yarn本身的研发
先给大家介绍一下yarn其实是一个资源调度器,它是Hadoop2.0之后提出来的一个组件,同时发展至今已然是一个很成熟的调度框架了,可以脱离Hadoop单独对其他框架提供支持,如Spark、Flink等
而Hadoop1.0的时候yarn的工作是一个叫做JobTracker的组件兼任的,但是这个组件随着Hadopp的发展它胜任的工作越来越繁杂,因此Hadoop2.0的时候被分离出来组成了yarn
yarn主要的组件是resourcemanager、nodemanager
resourcemanager位于yarn节点上,nodemanager在每个datanode上各一个,依靠着这样的方式yarn节点掌控着整个集群的资源
在我们提交一个MapReduce任务对数据做处理的时候,yarn并不是直接接受这个任务,而是先由一个Driver进程对数据进行一个规划,其中设计到分区等,之后同任务运行时所需要的资源一起向yarn发出任务申请,yarn会返回一个application_id,这个id对应的不止是任务的编号,还表示了任务提交的临时路径,它存在的意义就是保存这次任务而已,如果有心的朋友就会发现我们在空白的hdfs状态下,用Hadoop跑一个MapReduce任务之后会生成一个或两个路径,那个路径就是现在我说的路径
yarn接受任务的形式是Task,任务提交时启动的driver进程会把任务包装成一个task向yarn提交,yarn会把接受的Task放入自己的调度队列中,而这个任务的唯一标识就是之前生成的Application_id,有兴趣了解调度队列的可以看看
https://blog.csdn.net/dudadudadd/article/details/111604805
在yarn调度队列中,当一个Task要执行时,yarn会和nodemanager联系找到一个有资源的Datanode将Task交给它,而当datanode接受到Task时,会在自身上针对于这个任务启动一个applicationmaster进程,这个进程会承包这个Task在运行时所需要的一切动作,比如向yarn申请资源,同时它的生命也随着Task开始而开始,Task结束而结束
最后对于applicationmaster这个节点有可能有一些争议,就是明明有Driver了,为什么还要存在一个applicationmaster呢?
其实这两个线程不冲突,applicationmaster在整个Task的执行中负责的主要是和yarn之间为Task的运行而做的资源调配,而Driver节点负责的是偏向于合并结果等善后的问题,地位上大家可以理解为applicationmaster是Driver的大哥大,但是要注意我最后说的这个driver和任务开始进行规划的不是一个,他们两个虽然是同一类进程,但是他们所完成的任务和起动的时间也不一样,我最后说的这个driver,是在applicationmaster启动之后,跟随启动的