008 Yarn资源调度器

1、Yarn基本架构

YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等组件构成。
在这里插入图片描述

2、Yarn工作机制

在这里插入图片描述

3、作业提交全过程

在这里插入图片描述

4、资源调度器

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

<property>
    <description>The class to use as the resource scheduler.</description>
    <name>yarn.resourcemanager.scheduler.class</name>
	<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

Hadoop集群典型的应用:

  • 批处理作业(I/O密集型):这种作业往往耗时较长,对时间完成一般没有严格要求,如数据挖掘、机器学习等方面的应用程序。
  • 交互式作业:这种作业期望能及时返回结果,如SQL查询(Hive)等。
  • 生产性作业(CPU密集型):这种作业要求有一定量的资源保证,如统计值计算、垃圾数据分析等。

Hadoop作业调度器

  • 先进先出调度器(FIFO):将所有的 Application 按照提交时候的顺序来执行,只有当上一个 Job 执行完成之后后面的 Job 才会按照队列的顺序依次被执行。
  • 容量调度器(Capacity Scheduler):1)可有多队列,可设置每个队列的资源占比;2)队列有最低资源保证和使用上限;3)用户可设定资源使用上限;4)队列A空闲资源可以共享给其他队列B,当队列A有新的应用程序提交,队列B归还队列A的资源;5)队列中的任务共享队列资源;6)支持多用户共享集群和多应用同时运行;7)动态更新配置文件;8)使用Hadoop ACL 控制队列訪问权限
  • 公平调度器(Fair Scheduler):1)可有多队列,可设置每个队列的资源占比;2)对一个队列的作业按照优先级分享整个队列的资源,并发执行;3)可设置每个作业最小资源值,调度器保证作业获得设定资源;4)时间尺度上,所有作业公平获得资源,调度器优先为缺额(作业应获得资源和实际获取资源的缺额)大的作业分配资源;5)max-min fairness 最大最小公平算法

5、配置多队列的容量调度器

Capacity Scheduler 中 user-limit-factor 参数的理解
Hadoop: Capacity Scheduler

hadoop yarn公平调度配置
Hadoop: Fair Scheduler

yarn-site.xml中指定调度器类型,默认为容量调度器(Capacity Scheduler),Capacity-scheduler.xml中默认只有default队列,以下为集群多队列配置(hadoop102、hadoop103、hadoop104)。

<!-- 指定多队列,增加hive队列 -->
<property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>default,hive</value>
    <description>
      The queues at the this level (root is the root queue).
    </description>
</property>
<!-- 降低default队列资源额定容量为40%,默认100% -->
<property>
    <name>yarn.scheduler.capacity.root.default.capacity</name>
    <value>40</value>
</property>
<!-- 降低default队列资源最大容量为60%,默认100% -->
<property>
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
    <value>60</value>
</property>

<!-- 指定hive队列的资源额定容量 -->
<property>
    <name>yarn.scheduler.capacity.root.hive.capacity</name>
    <value>60</value>
</property>
<!-- 指定队列中,用户提交job占用集群资源的百分比-->
<property>
    <name>yarn.scheduler.capacity.root.hive.user-limit-factor</name>
    <value>1</value>
</property>
<!-- 指定hive队列的资源最大容量 -->
<property>
    <name>yarn.scheduler.capacity.root.hive.maximum-capacity</name>
    <value>80</value>
</property>
<!--指定队列的工作状态-->
<property>
    <name>yarn.scheduler.capacity.root.hive.state</name>
    <value>RUNNING</value>
</property>
<!--访问权限,设定那些用户可以提交应用,*表示所有用户-->
<property>
    <name>yarn.scheduler.capacity.root.hive.acl_submit_applications</name>
    <value>*</value>
</property>
<!--访问权限,设定那些用户是管理者,*表示所有用户-->
<property>
    <name>yarn.scheduler.capacity.root.hive.acl_administer_queue</name>
    <value>*</value>
</property>
<!--访问权限,设定那些用户有优先,*表示所有用户平等-->
<property>
    <name>yarn.scheduler.capacity.root.hive.acl_application_max_priority</name>
    <value>*</value>
</property>
<!--访问权限,设定job的最大存活时间,-1表示没有限定-->
<property>
    <name>yarn.scheduler.capacity.root.hive.maximum-application-lifetime</name>
    <value>-1</value>
</property>
<!--访问权限,设定job的默认存活时间,-1表示没有限定-->
<property>
    <name>yarn.scheduler.capacity.root.hive.default-application-lifetime</name>
    <value>-1</value>
</property>

6、Yarn运行模式:在集群中启动jar(集群模式),在IDEA中启动jar(客户端模式)

Spark 在yarn上运行模式详解:cluster模式和client模式

Cluster模式与Client模式最大的区别在于Driver启动的位置,Cluster模式下ApplicationMaster(与Driver等价)与executor container交互,Client模式下Driver(与ApplicationMaster不等价)与executor container进行交互。ApplicationMaster、executor都是在Node的container中运行;在container中执行maptask、reducetask、ApplicationMaster;Client提交job给ResourceManager,ResourceManager首先分配一个container运行ApplicationMaster,ApplicationMaster再向ResourceManager申请container先后运行maptask、reducetask。

  • Cluster模式:Driver程序在YARN中运行,应用的运行结果不能在客户端显示,所以最好运行那些将结果最终保存在外部存储介质(如HDFS、Redis、Mysql)而非stdout输出的应用程序,客户端的终端显示的仅是作为YARN的job的简单运行状况。
  • Client模式:Driver运行在Client上,应用程序运行结果会在客户端显示,所以适合运行结果有输出的应用程序(如spark-shell)
在集群上运行MapReduce程序,以WordCount程序为例
// 声明配置对象
Configuration conf = new Configuration();
// 指定当前job提交的队列的名称
conf.set("mapreduce.job.queuename","hive");
// 以命令行的反射设置参数
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));

打包程序上传到HDFS,执行如下命令

[atguigu@hadoop102 program]$ hadoop jar Demo02-1.0-SNAPSHOT.jar com.atguigu.mr.wordcount.WordCountDriver /input /output1

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值