yarn是apache的新引入的子系统,与mapreduce和hdfs并列,是一个资源管理系统,如果你了解mapreduce,那么可对比理解yarn,它的基本设计思想是将mapreduce中的jobtracker拆分成了两个独立的服务:一个全局的资源管理器resourcemanager和每个应用程序特有的applicationmaster。其中resourcemanager负责整个系统的资源管理和分配,而applicationmaster则负责单个应用程序的管理。
当用户向yarn中提交一个应用程序后,yarn将分两个阶段运行该应用程序:第一个阶段是启动applicationmaster;第二个阶段是由applicationmaster创建应用程序,为它申请资源,并监控它的整个运行过程,直到运行成功。如图2-7所示,yarn的工作流程分为以下几个步骤(图和文字摘自《hadoop技术内幕:深入解析mapreduce架构设计与实现原理》一书第12章 “下一代mapreduce框架”):
步骤1 用户向yarn中提交应用程序,其中包括applicationmaster程序、启动applicationmaster的命令、用户程序等。
步骤2 resourcemanager为该应用程序分配第一个container,并与对应的nodemanager通信,要求它在这个container中启动应用程序的applicationmaster。
步骤3 applicationmaster首先向resourcemanager注册,这样,用户可以直接通过resourcemanage查看应用程序的运行状态,然后,它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
步骤4 applicationmaster采用轮询的方式通过rpc协议向resourcemanager申请和领取资源。
步骤5 一旦applicationmaster申请到资源后,则与对应的nodemanager通信,要求其启动任务。
步骤6 nodemanager为任务设置好运行环境(包括环境变量、jar包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
步骤7 各个任务通过某个rpc协议向applicationmaster汇报自己的状态和进度,以让applicationmaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过rpc向applicationmaster查询应用程序的当前运行状态。
步骤8 应用程序运行完成后,applicationmaster向resourcemanager注销,并关闭自己。
在单机程序设计中,为了快速处理一个大的数据集,通常采用多线程并行编程,大体流程如下:先由操作系统启动一个主线程,由它负责数据切分、任务分配、子线程启动和销毁等工作,而各个子线程只负责计算自己的数据,当所有子线程处理完数据后,主线程再退出。类比理解,yarn上的应用程序运行过程与之非常相近,只不过它是集群上的分布式并行编程。可将yarn看做一个云操作系统,它负责为应用程序启动applicationmaster(相当于主线程),然后再由applicationmaster负责数据切分、任务分配、启动和监控等工作,而由applicationmaster启动的各个task(相当于子线程)仅负责自己的计算任务,当所有任务计算完成后,applicationmaster认为应用程序运行完成,然后退出。
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:)!