Yarn概念
 
         Yarn  
 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式  
 
 
 的 
 操作系统平台 
 ,而  
 MapReduce  
 等运算程序则相当于运行于 
 操作系统之上的应用程序 
 。 
 
 
Yarn的四大组件
 
          YARN 主要由  
  ResourceManager(整个集群资源的老大) 
  、 
  NodeManager(单个节点资源的老大) 
  、 
  ApplicationMaster(每个作业的老大)  
  和  
  Container(容器,负责运行MapTask、ReduceTask)  
  等组件构成。 
 
 
 ResourceManager(RM)
- 处理客户端请求,客户端请求提交一个任务,由RM来进行处理
- 监控NodeManager,监控所有节点的运行情况,有节点资源不足就进行处理
- 启动或监控ApplicationMaster,客户端提交了一个MR程序,对应启动一个ApplicationMaster,如果纸处理这个任务的节点挂了,就把这个任务交给别的节点去处理
- 资源的分配和调度
NodeManager
- 管理单个节点上的资源
- 处理来自RresourceManager的命令
- 处理来自ApplicationMaster的命令
ApplicationMaster
- 为应用程序申请资源并分配给内部任务
- 任务的监控与容错(MapTask、ReduceTask)
Container
           是YARN中对资源的抽象,封装了节点上的资源(内存、CPU、磁盘、网络等),相当于一台小型计算机。 
 
 
  
 YARN工作机制

   例子:我们提交一个MapReduce程序给集群进行WordCount单词统计。 
 
 
 1.客户端提交MapReduce程序
   job.waitForCompletion();  -> 创建一个YarnRunnner -> 
 
 
 2.客户端向RM申请一个Application
3. RM给客户端返回一个集群路径 以及 一个应用id(Application_id)->
4. 客户端提交MapReduce作业需要的资源
- job.split,作业的切片信息
- job.xml 作业的配置参数信息
- wordcount.jar 用户的业务逻辑代码
5. 客户端告诉MR资源提交完毕,申请运行MRAppMaster
6.RM将客户端的请求初始化为一个Task
           由于我们的客户端可能是多个,所以需要将每个客户端的Task都放到一个队列当中,一个一个执行。 
 
 
 7. NodeManager领取Task
           NodeManager领取到Task后创建容器Container(任何Task都是在容器中执行) 
 
 
 
   Container启动一个MRAppMaster进程 
 
 
 8. 去集群上下载job运行需要的资源到本地
9. MRAppMaster再次向RM申请MapTask容器
10. MRAppMaster创建MapTask需要的容器
           通过多个或一个NodeManager创建多个的容器,开启对应个数的MapTask(即使是多个MapTask也可能在同一个NodeManager的多个容器中) 
 
 
 11. MRAppMaster发送启动命令
           MRAppMaster向新开启的NodeManager发送启动命令,启动对应的MapTask,一个MapTask对应一个YarnChild进程。 
 
 
 
           MapTask运行完毕,将数据持久化到磁盘 
 
 
 12. MRAppMaster创建ReduceTask需要的容器
           MRAppMaster一直监控运行的执行情况,当检测到MapTask任务执行完毕之后,立即向RM申请相应数量的容器来执行ReduceTask程序,依旧是开启相应数量的容器,在容器中启动ReduceTask,这些ReduceTask对应的进程任然是YarnChild。 
 
 
 13. 作业完成释放资源
           MRAppMaster检测到ReduceTask执行完毕,向RM申请注销自己,将资源(开启的所有NodeManager)全部释放 
 
 
  













![[python bezier贝塞尔曲线] 数值解法、德卡斯特里奥解法解法以及bezier库的使用demo](https://img-blog.csdnimg.cn/30e4862eb7a94835a13d34b2d605181a.png)




