| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> hadoop之YARN -> 正文阅读 |
|
[大数据]hadoop之YARN |
目录
Yarn
是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式
的
操作系统平台
,而
MapReduce
等运算程序则相当于运行于
操作系统之上的应用程序
。
总结一句话是:yarn主要是为了调度资源,管理任务等
1.1 Yarn 基础架构
YARN
主要由
ResourceManager
、
NodeManager
、
ApplicationMaster
和
Container
等组件
构成。
1)ResourceManager
(
RM整个集群资源的老大
)主要作用如下
(1)处理客户端请求
(
2
)监控NodeManager
(
3
)启动或监控ApplicationMaste(
2
)任务的监控与容错r
(4)资源的分配与调度
2)NodeManager
(
NM单台节点资源的调度
)主要作用如下
定时向
ResourceManager汇报本节点的资源使用情况和各个
Container的运行状态
(
1
)管理单个节点上的资源
(
2
)处理来自
ResourceManager
的命令
(
3
)处理来自
ApplicationMaster的命令
3)ApplicationMaster(AM应用程序管理器
)作用如下
(
1)为应用程序申请资源并分配给内部的任务
(
2
)任务的监控与容错
4)
Container(相当于一台小电脑)
Container
是
YARN
中的资源抽象,它封装了某个节点上的多维度资源,
如内存、
CPU
、磁 盘,网络等
。
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
申请注销自己。
作业提交的全过程
(
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
会清理工作状态。作业的信息会被作业历史服务器存储
以备之后用户核查
Yarn 调度器和调度算法
目前,
Hadoop
作业调度器主要有三种:
FIFO
、容量(
Capacity Scheduler
)和公平(
Fair
Scheduler
)。
Apache Hadoop3.1.3
默认的资源调度器是
Capacity Scheduler
。
CDH
框架默认调度器是
Fair Scheduler
。
先进先出调度器(FIFO)
FIFO
调度器(
First In First Out
):单队列,根据提交作业的先后顺序,先来先服务。
优点:简单易懂;
缺点:不支持多队列,生产环境很少使用;
容量调度器(Capacity Scheduler)?Capacity Scheduler 是 Yahoo 开发的多用户调度器。(有多个注册的用户可以向集群提交任务) 1、多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略,按照到达的时间排序,先到先服务。
2
、容量保证:管理员可为每个队列设置资源最低保证和资源使用上限(资源上限就是每个队列的总资源)
3
、
灵活性
:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
4
、多租户:
支持多用户共享集群和多应用程序同时运行。
为了防止同一个用户的作业独占队列中的资源,该调度器会对
同一用户提交的作业所占资源量进行限定(当占用资源超过资源上限时,就需要等待资源)。
容量调度器资源分配算法
root
|---queueA 20%
|---queueB 50%
|---queueC 30%
|---ss 50%
|---cls 50%
1
)队列资源分配
从
root
开始,使用深度优先算法,
优先 选择资源占用率最低
的队列分配资源。
队列A占用的资源最少,所以优先执行队列A
2
)作业资源分配
默认按照提交作业的
优先级(需要设置)
和
提交时间(如果没有设置优先级,则按提交时间)?
顺序分配资源。
3
)容器资源分配
按照容器的
优先级(需要设置)
分配资源; 如果优先级相同,按照
数据本地性原则
:
(
1
)任务和数据在同一节点
(
2
)任务和数据在同一机架
(
3
)任务和数据不在同一节点也不在同一机架
?公平调度器(Fair Scheduler)
Fair Schedulere
是
Facebook
开发的多用户调度器
特点:
1)与容量调度器相同点
(
1
)多队列:支持多队列多作业
(
2
)容量保证:管理员可为每个队列设置资源最低保证和资源使用上线
(
3
)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
(
4
)多租户:支持多用户共享集群和多应用程序同时运行;为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
2
)与容量调度器不同点
(
1
)核心调度策略不同
容量调度器:优先选择
资源利用率低
的队列
公平调度器:优先选择对资源的
缺额(在下面有解释缺额)
比例大的
(
2
)每个队列可以单独设置资源分配方式
容量调度器:
FIFO
、
DRF
公平调度器:
FIFO
、
FAIR
、
DRF
公平调度器
——
缺额
~公平调度器设计目标是:在
时间
尺度上,所有作业获得公平的资源。某一时刻一个作业应获资源和实际获取资源的差距叫
“缺额”
·调度器会
优先为缺额大的作业分配资源
?公平调度器队列资源分配方式
1
)
FIFO
策略
公平调度器每个队列资源分配策略如果选择
FIFO
的话,此时公平调度器相当于上面讲过的容量调度器。
2
)
Fair
策略
Fair
策略(默认)是一种基于最大最小公平算法实现的资源多路复用方式,默认情况下,每个队列内部采用该方式分配资 源。这意味着,如果一个队列中有两个应用程序同时运行,则每个应用程序可得到1/2的资源;如果三个应用程序同时运行,则每个应用程序可得到
1/3
的资源。
具体资源分配流程和容量调度器一致;
资源分配流程:
(
1
)选择队列
(
2
)选择作业
(
3
)选择容器
以上三步,每一步都是按照公平策略分配资源
?
实际最小资源份额
:
mindshare = Min
(资源需求量,配置的最小资源)
?
是否饥饿
:
isNeedy =
资源使用量
< mindshare
(实际最小资源份额)
?
资源分配比
:
minShareRatio =
资源使用量
/ Max
(
mindshare, 1)
?
资源使用权重比
:
useToWeightRatio =
资源使用量
/
权重
公平调度器资源分配算法
?Yarn 常用命令?(重要)
Yarn
状态的查询,除了可以在
hadoop103:8088
页面查看外,还可以通过命令操作
yarn application
查看任务
(
1
)列出所有
Application:
yarn application -list
(
2
)根据
Application
状态过滤:
yarn application -list -appStates
(所有状态:
ALL
、
NEW
、
NEW_SAVING
、
SUBMITTED
、
ACCEPTED
、
RUNNING
、
FINISHED
、
FAILED
、
KILLED
)
yarn application -list -appStates
FINISHED (自己想要状态过滤的状态)???????
(
3
)
Kill
掉
Application:
yarn application
-kill
application_1612577921195_0001(想要杀死的进程)
yarn logs
查看日志 (重要)
(
1
)查询
Application
日志:
yarn logs -applicationId <ApplicationId>
yarn logs -applicationId
application_1612577921195_0001 (想查看的进程)
(
2
)查询
Container
日志:
yarn logs -applicationId <ApplicationId> -containerId <ContainerId>
yarn logs -applicationId
a
pplication_1612577921195_0001
containerId
container_1612577921195_0001_01_000001
yarn applicationattempt
查看尝试运行的任务
(
1
)列出所有
Application
尝试的列表:
yarn applicationattempt -list <ApplicationId>
yarn applicationattempt -list
application_1612577921195_0001
(
2
)打印
ApplicationAttemp
状态:yarn applicationattempt -status <ApplicationAttemptId>
yarn container -list
appattempt_1612577921195_0001_000001
yarn container
查看容器
(
1
)列出所有
Container
:
yarn container -list <ApplicationAttemptId>
yarn container -list
appattempt_1612577921195_0001_000001
(
2
)打印
Container
状态:
yarn container -status <ContainerId>
yarn container -status
container_1612577921195_0001_01_000001
注:只有在任务跑的途中才能看到
container
的状态
yarn node
查看节点状态
列出所有节点:
yarn node -list -all
yarn node -list -all
yarn rmadmin
更新配置
加载队列配置:
yarn rmadmin -refreshQueues
yarn rmadmin -refreshQueues
yarn queue
查看队列
打印队列信息:
yarn queue -status <QueueName>
yarn queue -status default
Yarn 生产环境核心参数 (非常重要)1)ResourceManager相关??????? yarn.resourcemanager.scheduler.class 配置调度器,默认容量yarn.resourcemanager.scheduler.client.thread-count ResourceManager处理调度器请求的线程数量,默认50 2)NodeManager相关
yarn.nodemanager.resource.detect-hardware-capabilities
是否让
yarn
自己检测硬件进行配置,
默认
false
yarn.nodemanager.resource.count-logical-processors-as-cores
是否将虚拟核数当作
CPU
核数,默认
false
yarn.nodemanager.resource.pcores-vcores-multiplier 虚拟核数和物理核数乘数,例如:4
核
8
线程,该 参数就应设为2
,
默认
1.0
yarn.nodemanager.resource.memory-mb NodeManager
使用内存,默认
8G
yarn.nodemanager.resource.system-reserved-memory-mb NodeManager为系统保留多少内存
以上二个参数配置一个即可
yarn.nodemanager.resource.cpu-vcores NodeManager使用
CPU
核数,默认
8
个yarn.nodemanager.pmem-check-enabled 是否
开启物理内存检查限制container,
默认打开yarn.nodemanager.vmem-check-enabled 是否开启虚拟内存检查限制container,
默认打开yarn.nodemanager.vmem-pmem-ratio
虚拟内存物理内存比例,默认
2.1
3
)
Container
相关
yarn.scheduler.minimum-allocation-mb 容器最最小内存,
默认
1G
yarn.scheduler.maximum-allocation-mb 容器最最大内存,
默认
8G
yarn.scheduler.minimum-allocation-vcores 容器最小CPU
核数,
默认
1
个
yarn.scheduler.maximum-allocation-vcores 容器最大CPU
核数,
默认
4
个
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 13:00:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |