问题一:集群提交任务,是什么决定任务分配到哪个节点上?
Yarn(RM,NM)
问题二:集群提交任务,偶尔成功,偶尔失败(使用外部配置文件)?
答:程序所需要的数据(配置文件)缺失。有的节点缺失,有的节点不缺失。
解决:在所有的节点上存一份程序所需要的数据(配置文件)
是谁来分配的呢? 答案:Yarn
ResourceManager:一个集群只有一个ResourceManager对外提供服务(可能有多个ResourceManager)
NodeManager:一个集群有多个NodeManager,通常每个DataNode也是NodeManager角色。
什么是Yarn?
一个通用资源管理系统和调度平台。
Yarn特点:支持多个数据计算框架,运行成本低,数据共享。
资源指的是什么? CPU 内存
Yarn的意义:
降低了企业的硬件开销(硬件成本),降低资源浪费,运行成本低,数据共享。
Yarn的内部组成
1、ResourceManager 一个集群资源的管理者
2、NodeManager 一个节点的资源管理者
3、ApplicationMaster 一个计算任务的管理者,每个计算任务都有一个APPMaster
4、Container 容器,包含内存与cpu
Yarn提交任务的流程
1、client向RM提交应用程序,其中包括启动该应用的ApplicationMaster的必须信息,例如ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
2、ResourceManager启动一个container用于运行ApplicationMaster。
3、启动中的ApplicationMaster向ResourceManager注册自己,启动成功后与RM保持心跳。
4、ApplicationMaster向ResourceManager发送请求,申请相应数目的container。
5、申请成功的container,由ApplicationMaster进行初始化。container的启动信息初始化后,AM与对应的NodeManager通信,要求NM启动container。
6、NM启动启动container。
7、container运行期间,ApplicationMaster对container进行监控。container通过RPC协议向对应的AM汇报自己的进度和状态等信息。
8、应用运行结束后,ApplicationMaster向ResourceManager注销自己,并允许属于它的container被收回。
Yarn得调度器
1、FIFO Scheduler: 先进先出,谁先提交谁先执行(先来后到)。
2、Capacity Scheduler:容量调度器。以列得形式配置集群资源,每个队列可以抢占其他队列得资源。多个队列可以同时执行任务。但是一个队列内部还是FIFO
3、Fair Scheduler 公平调度器,同样以列得形式配置集群资源,每个队列可以抢占其他队列得资源。当被抢占得队列有任务时,抢占得队列奉还资源。不知指出在与奉还资源需要一段时间。
FiFo举例子
排队食堂打饭、排队买车票、医院挂号
容量调度器举例子
多窗口买火车票、多窗口排队食堂打饭、多窗口银行柜台办理业务、高速收费口
公平调度器
军人优先买车票、公交车老人坐
Capacity Scheduler(CDH默认的调度器)
Root
├── prod(生产环境) 40 %
└── dev(开发环境) 60 %
├── mapreduce 60 %的50%
└── spark 60 % 的50%
1、编辑集群内的capacity-scheduler.xml 配置文件,输入一下内容
yarn.scheduler.capacity.root.queues
prod,dev
yarn.scheduler.capacity.root.dev.queues
mapreduce,spark
yarn.scheduler.capacity.root.prod.capacity
40
yarn.scheduler.capacity.root.dev.capacity
60
yarn.scheduler.capacity.root.dev.maximum-capacity
75
yarn.scheduler.capacity.root.dev.mapreduce.capacity
50
yarn.scheduler.capacity.root.dev.spark.capacity
50
2、将更新的配置分发到集群所有的节点
scp capacity-scheduler.xml node02:/
P
W
D
s
c
p
c
a
p
a
c
i
t
y
−
s
c
h
e
d
u
l
e
r
.
x
m
l
n
o
d
e
03
:
/
PWD scp capacity-scheduler.xml node03:/
PWDscpcapacity−scheduler.xmlnode03:/PWD
3、重启Yarn集群
./stop-all.sh
./start-all.sh
4、验证上面创建的对列
通过mapreduce.job.queuename指定对列的名字
mapreduce.job.queuename=mapreduce
hadoop jar …/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi -D mapreduce.job.queuename=mapreduce 10 10
补充说明
<!—未指定对列 默认提交default队列,该对列名字为用户名 -->
yarn.scheduler.fair.user-as-default-queue
true
公平调度器
1、修改yarn-site.xml配置文件添加以下配置
2、添加fair-scheduler.xml配置文件
<?xml version="1.0"?> 30 512mb,4vcores 102400mb,100vcores 100 1.0 fair<queue name="default">
<minResources>512mb,4vcores</minResources>
<maxResources>30720mb,30vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.0</weight>
<!-- 所有的任务如果不指定任务队列,都提交到default队列里面来 -->
<aclSubmitApps>*</aclSubmitApps>
</queue>
<queue name="hadoop">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>2.0</weight>
<aclSubmitApps>hadoop hadoop</aclSubmitApps>
<aclAdministerApps>hadoop hadoop</aclAdministerApps>
</queue>
<queue name="develop">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1</weight>
<aclSubmitApps>develop develop</aclSubmitApps>
<aclAdministerApps>develop develop</aclAdministerApps>
</queue>
<queue name="test1">
<minResources>512mb,4vcores</minResources>
<maxResources>20480mb,20vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<schedulingMode>fair</schedulingMode>
<weight>1.5</weight>
<aclSubmitApps>test1,hadoop,develop test1</aclSubmitApps>
<aclAdministerApps>test1 group_businessC,supergroup</aclAdministerApps>
</queue>
3、分发新添加的配置文件到集群的所有节点
scp yarn-site.xml fair-scheduler.xml node02: P W D s c p y a r n − s i t e . x m l f a i r − s c h e d u l e r . x m l n o d e 03 : PWD scp yarn-site.xml fair-scheduler.xml node03: PWDscpyarn−site.xmlfair−scheduler.xmlnode03:PWD
4、重启Yarn集群
stop-yarn.sh
start-yarn.sh
5、验证
a)添加验证需要的用户(在队列内配置的)
useradd hadoop
passwd hadoop
添加组
groupadd supergroup
对应用户与组的关系(supergroup)
usermod -a -G supergroup hadoop
usermod -a -G supergroup test1
usermod -a -G supergroup develop
刷新HDFS上的组
su - root -s /bin/bash -c “hdfs dfsadmin -refreshUserToGroupsMappings”
b)提交任务,查看浏览器验证
su test1
hadoop jar …/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.14.0.jar pi 10 10
查看界面