第四章 关于YARN
Apache YARN(Yet Another Resource Negotiator)是Hadoop的集群资源管理系统。
剖析YARN应用运行机制
YARN通过两类长期运行的守护进程提供自己的核心服务:管理集群上资源使用的资源管理器(resource manager),运行在集群中所有节点上且能够启动和监控容器(container)的节点管理器(node manager)。
⓵资源请求:YARN有一个很灵活的资源请求模型。但请求多个容器时,可以指定每个容器需要的计算机资源数量(内存和CPU),还可以指定对容器的本地限制要求。
⓶应用生命期:YARN应用的生命期差异性很大。与其关注应用运行多长时间,不如按照应用到用户运行的作业之间的映射关系对应用进行分类更有意义。三种模型:
❶一个用户作业对应一个应用,这也是MapReduce采取的方式。
❷作业的每个工作流或每个用户对话对应一个应用。Spark采取这种模型。
❸多个用户共享一个长期运行的应用。
- YARN与MapReduce1对比
MapReduce1 YARN Jobtracker 资源管理器、application master、时间轴服务器 Tasktracker 节点管理器 Slot 容器
⓵可扩展性:YARN可以在更大规模的集群上运行。
⓶可用性:当服务守护进程失败时,通过为另一个守护进程复制接管工作所需的状态以便其继续提供服务,从而可以获得高可用性(HA)。
⓷利用率
⓸多租户
- YARN中的调度
YARN调度器的工作就是根据既定策略为应用分配资源。调度通常是一个难题,并且没有一个所谓“最好”的策略,这也是为什么YARN提供了多种调度器和可配置策略供我们选择的原因。
⓵调度选项:YARN中有三种调度器可用。FIFO调度器、容量调度器和公平调度器。
FIFO调度器将应用设置在一个队列中,然后按照提交的顺序运行应用。首先为队列中第一个应用的请求分配资源,第一个应用的请求被满足后,在依次为队列中下一个应用服务。
FIFO调度器的优点是,简单易懂,不需要任何配置,但是不适合共享集群。在一个共享集群中,更适合使用容量调度器或公平调度器。
⓶容量调度器配置:容量调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列可以进一步按层次划分,在一个队列内,使用FIFO调度策略对应用进行调度。对特定队列进行配置时,时通过以下形式的配置属性。
yarn.scheduler.capacity.<queue-path>.<sub-property>,<queue-path>表示队列的层次路径(用圆点隔开),如:root.prod,root.dev.eng。
⓷公平调度器配置:
➊启用公平调度器:公平调度器的使用由属性yarn.resourcemanager.scheduler.class的设置所决定。默认是使用容量调度器。如要使用,需将yarn-site.xml文件中的yarn.resoucemanager.scheduler.class设置为公平调度器的完全限定名:org.apache.hadoop.yarn.server.resoucemanager.scheduler.fair.FairScheduler。
➋队列配置:
➌队列放置:公平调度器使用一个基于规则的系统来确定应用应该放到哪个队列。
➍抢占:就是允许调度器终止那些占用资源超过了其公平共享份额的队列的容器,这些容器资源释放后,可以分配给资源数量低于应得份额的队列。注意,抢占会降低整个集群的效率,因为被终止的containers需要重新执行。