热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yarn【架构、原理、多队列配置】

目录一.什么是yarn二.yarn的基本架构和角色三.yarn的工作机制四.任务提交流程五.资源调度器FIFO容量调度器公平调度器六.容量调度器多队列提交案例实操1.案例:配置de

目录
  • 一.什么是yarn
  • 二.yarn的基本架构和角色
  • 三.yarn的工作机制
  • 四.任务提交流程
  • 五.资源调度器
    • FIFO
    • 容量调度器
    • 公平调度器
  • 六.容量调度器多队列提交案例实操
    • 1.案例:配置default、hive多队列
      • ①增加队列,添加队列的属性配置
      • ②分发配置文件到集群,重启Yarn
      • ③测试,向default ,hive队列分别提交任务
    • 2.配置Hive的默认提交队列

一.什么是yarn

​ Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。

二.yarn的基本架构和角色

yarn主要由ResourceManagerNodeManagerApplicationMasterContainer等组件构成。

Yarn【架构、原理、多队列配置】

三.yarn的工作机制

Yarn【架构、原理、多队列配置】

(1)MR程序提交到客户端所在的节点。
(2)YarnRunner向ResourceManager申请一个Application。
(3)RM将该应用程序的资源路径返回给YarnRunner。
(4)该程序将运行所需资源提交到HDFS上。
(5)程序资源提交完毕后,申请运行mrAppMaster。
(6)RM将用户的请求初始化成一个Task。
(7)其中一个NodeManager领取到Task任务。
(8)该NodeManager创建容器Container,并产生MRAppmaster。
(9)Container从HDFS上拷贝资源到本地。
(10)MRAppmaster向RM 申请运行MapTask资源。
(11)RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(12)MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
(13)MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
(14)ReduceTask向MapTask获取相应分区的数据。
(15)程序运行完毕后,MR会向RM申请注销自己。

四.任务提交流程

Yarn【架构、原理、多队列配置】

作业提交全过程详解
(1):作业提交
第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第2步:Client向RM申请一个作业id。
第3步:RM给Client返回该job资源的提交路径和作业id。
第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
第5步:Client提交完资源后,向RM申请运行MrAppMaster。
(2)作业初始化
第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
第7步:某一个空闲的NM领取到该Job。
第8步:该NM创建Container,并产生MRAppmaster。
第9步:下载Client提交的资源到本地。
(3):任务分配
第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(4):任务运行
第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
第14步:ReduceTask向MapTask获取相应分区的数据。
第15步:程序运行完毕后,MR会向RM申请注销自己。
(5):进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
(6):作业完成
除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

五.资源调度器

Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop3.1.3默认的资源调度器是Capacity Scheduler。

具体设置详见:yarn-default.xml文件


    The class to use as the resource scheduler.
    yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

FIFO

先进先出,同一时间队列中只有一个任务在执行

Yarn【架构、原理、多队列配置】

容量调度器

多队列;每个队列内部先进先出, 同一时间队列中只有一个任务在执行, 队列的并行度为队列的个数。

Yarn【架构、原理、多队列配置】

公平调度器

多队列;每个队列内部按照缺额大小分配资源启动任务,同一时间队列中有多个任务执行。队列的并行度大于等于队列的个数

Yarn【架构、原理、多队列配置】

Yarn【架构、原理、多队列配置】

六.容量调度器多队列提交案例实操

需求

Yarn默认调度器为Capacity Scheduler(容量调度器),且默认只有一个队列——default。该调度器单个队列内的调度策略为FIFO,故单个队列的任务并行度为1,即一个队列,同一时刻,只能有一个任务运行。

在实际使用中会出现单个任务阻塞整个队列的情况。同时,随着业务的增长,公司需要分业务限制集群使用率。这就需要我们按照业务种类配置多条任务队列。

1.案例:配置default、hive多队列

默认Yarn的配置下,容量调度器只有一条Default队列。在$HADOOP_HOME/etc/hadoop/capacity-schdualer.xml中可以配置多条队列,并降低default队列资源占比:

①增加队列,添加队列的属性配置



   
  
    yarn.scheduler.capacity.maximum-applications
    10000
    
      Maximum number of applications that can be pending and running.
    
  

  
  
    yarn.scheduler.capacity.maximum-am-resource-percent
    0.1
    
      Maximum percent of resources in the cluster which can be used to run 
      application masters i.e. controls number of concurrent running
      applications.
    
  

  
  
    yarn.scheduler.capacity.resource-calculator
    org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator
    
      The ResourceCalculator implementation to be used to compare 
      Resources in the scheduler.
      The default i.e. DefaultResourceCalculator only uses Memory while
      DominantResourceCalculator uses dominant-resource to compare 
      multi-dimensional resources such as Memory, CPU etc.
    
  

   
  
    yarn.scheduler.capacity.root.queues
    default,hive
    
      The queues at the this level (root is the root queue).
    
  

  
  
    yarn.scheduler.capacity.root.default.capacity
    30
    Default queue target capacity.
  
  
  
    yarn.scheduler.capacity.root.hive.capacity
    70
    Default queue target capacity.
  
  
  

    
  
    yarn.scheduler.capacity.root.default.user-limit-factor
    1
    
      Default queue user limit a percentage from 0.0 to 1.0.
    
  
  
   
    yarn.scheduler.capacity.root.hive.user-limit-factor
    1
    
      Default queue user limit a percentage from 0.0 to 1.0.
    
  
 

  
  
    yarn.scheduler.capacity.root.default.maximum-capacity
    100
    
      The maximum capacity of the default queue. 
    
  
  
   
    yarn.scheduler.capacity.root.hive.maximum-capacity
    100
    
      The maximum capacity of the default queue. 
    
  
  
  

    
  
    yarn.scheduler.capacity.root.default.state
    RUNNING
    
      The state of the default queue. State can be one of RUNNING or STOPPED.
    
  
  
    
    yarn.scheduler.capacity.root.hive.state
    RUNNING
    
      The state of the default queue. State can be one of RUNNING or STOPPED.
    
  

  
  
  
    yarn.scheduler.capacity.root.default.acl_submit_applications
    *
    
      The ACL of who can submit jobs to the default queue.
    
  
  
  
    yarn.scheduler.capacity.root.hive.acl_submit_applications
    *
    
      The ACL of who can submit jobs to the default queue.
    
  
  

  
    yarn.scheduler.capacity.root.default.acl_administer_queue
    *
    
      The ACL of who can administer jobs on the default queue.
    
  
  
  
    yarn.scheduler.capacity.root.hive.acl_administer_queue
    *
    
      The ACL of who can administer jobs on the default queue.
    
  
  
 

  
    yarn.scheduler.capacity.node-locality-delay
    40
    
      Number of missed scheduling opportunities after which the CapacityScheduler 
      attempts to schedule rack-local containers. 
      Typically this should be set to number of nodes in the cluster, By default is setting 
      approximately number of nodes in one rack which is 40.
    
  

  
    yarn.scheduler.capacity.queue-mappings
    
    
      A list of mappings that will be used to assign jobs to queues
      The syntax for this list is [u|g]:[name]:[queue_name][,next mapping]*
      Typically this list will be used to map users to queues,
      for example, u:%user:%user maps all users to queues with the same name
      as the user.
    
  

  
    yarn.scheduler.capacity.queue-mappings-override.enable
    false
    
      If a queue mapping is present, will it override the value specified
      by the user? This can be used by administrators to place jobs in queues
      that are different than the one specified by the user.
      The default is false.
    
  



②分发配置文件到集群,重启Yarn
③测试,向default ,hive队列分别提交任务

提交到default队列:

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi -Dmapreduce.job.queuename=hive 1 1

提交到hive队列

hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi -Dmapreduce.job.queuename=hive 1 1

查看yarn任务ui界面:http://hadoop103:8088/cluster/scheduler

提交就可以查看了,不然任务跑完就看不到了....

Yarn【架构、原理、多队列配置】

2.配置Hive的默认提交队列

方式一

当前hive的shell窗口有效,关闭就不行了

SET mapreduce.job.queuename=hive;
SET mapreduce.job.priority=HIGH;

方式二

修改配置文件,永久生效



    mapreduce.job.queuename
    hive


推荐阅读
  • Hadoop之Yarn
    目录1Hadoop1.x和Hadoop2.x架构区别2Yarn概述3Yarn基本架构4Yarn工作机制5作业提交全过程6资源调度器7任务的推测执行1Hadoop1.x和Hadoo ... [详细]
  • Hadoop源码解析1Hadoop工程包架构解析
    1 Hadoop中各工程包依赖简述   Google的核心竞争技术是它的计算平台。Google的大牛们用了下面5篇文章,介绍了它们的计算设施。   GoogleCluster:ht ... [详细]
  • 【转】腾讯分析系统架构解析
    TA(TencentAnalytics,腾讯分析)是一款面向第三方站长的免费网站分析系统,在数据稳定性、及时性方面广受站长好评,其秒级的实时数据更新频率也获得业界的认可。本文将从实 ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
  •        在搭建Hadoop环境之前,请先阅读如下博文,把搭建Hadoop环境之前的准备工作做好,博文如下:       1、CentOS6.7下安装JDK,地址:http:b ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文讨论了微软的STL容器类是否线程安全。根据MSDN的回答,STL容器类包括vector、deque、list、queue、stack、priority_queue、valarray、map、hash_map、multimap、hash_multimap、set、hash_set、multiset、hash_multiset、basic_string和bitset。对于单个对象来说,多个线程同时读取是安全的。但如果一个线程正在写入一个对象,那么所有的读写操作都需要进行同步。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • mapreduce源码分析总结
    这篇文章总结的非常到位,故而转之一MapReduce概述MapReduce是一个用于大规模数据处理的分布式计算模型,它最初是由Google工程师设计并实现的ÿ ... [详细]
  • Zookeeper为分布式环境提供灵活的协调基础架构。ZooKeeper框架支持许多当今最好的工业应用程序。我们将在本章中讨论ZooKeeper的一些最显着的应用。雅虎ZooKee ... [详细]
  • Java开发实战讲解!字节跳动三场技术面+HR面
    二、回顾整理阿里面试题基本就这样了,还有一些零星的问题想不起来了,答案也整理出来了。自我介绍JVM如何加载一个类的过程,双亲委派模型中有 ... [详细]
author-avatar
拉着潜艇的鱼_396
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有