Hadoop在Ubuntu上的任务调度策略
Hadoop在Ubuntu上的任务调度策略
Hadoop在Ubuntu系统上的任务调度主要通过**YARN(Yet Another Resource Negotiator)**资源管理框架实现,支持多种调度策略以适应不同业务场景。以下是主流调度策略的详细说明及配置要点:
1. FIFO调度器(先进先出)
FIFO是Hadoop默认的调度策略,核心逻辑为按作业提交顺序分配资源。集群资源由先提交的作业独占,直至该作业完成或释放资源,后续作业依次等待。这种策略实现简单,无额外配置开销,但存在明显缺陷:大作业会阻塞小作业,资源利用率低,无法满足多用户或多任务类型的并发需求。
适用场景:单用户环境、简单批处理任务或小规模集群(如测试环境)。
2. 容量调度器(Capacity Scheduler)
容量调度器以队列为核心,将集群资源划分为多个逻辑队列(如offline
、realtime
、interactive
),每个队列分配固定容量(如offline
队列占60%资源),支持层级队列结构(如业务队列下再划分离线/实时子队列)。作业在所属队列内按FIFO调度,同时通过maximum-capacity
参数限制队列最大资源占用(如offline
队列最大80%),防止资源过度集中。
关键特性:
- 资源隔离:不同队列资源互不干扰,保障核心业务(如实时推荐)的资源底线;
- 弹性共享:闲置资源可被其他队列临时使用,提升集群整体利用率;
- 队列优先级:通过
priority
参数设置队列优先级(如实时队列优先级高于离线索引队列),优先分配资源。
适用场景:多部门共享集群、需要资源隔离和容量保障的企业环境(如电商平台、金融机构)。
3. 公平调度器(Fair Scheduler)
公平调度器以公平性为核心目标,动态调整资源分配,使所有作业在时间线上平均获取资源。初始时,作业可独占资源;当其他作业提交后,调度器会计算每个作业的“公平份额”(队列资源总量/活跃作业数),并通过抢占机制(如回收超额占用的资源)调整资源分配,确保各作业最终获得相近的资源量。
关键特性:
- 基于权重的公平性:可通过
weight
参数设置队列权重(如实时队列权重为3,离线索引队列为1),权重越高,分配的资源越多; - 资源抢占:当作业资源缺口持续超过阈值(如5秒)时,强制回收超额资源(优先抢占低优先级或同队列内的作业),保障SLA敏感作业(如实时风控)的资源需求;
- 作业优先级:支持设置作业优先级(如
VERY_HIGH
、HIGH
),优先级越高,越易获得资源。
适用场景:混合负载环境(批处理+交互式查询)、多租户共享集群、追求高资源利用率的业务场景(如互联网公司的大数据平台)。
4. 调度策略配置步骤(以容量调度器为例)
在Ubuntu系统中,调度策略的配置主要通过修改YARN的配置文件capacity-scheduler.xml
(位于$HADOOP_HOME/etc/hadoop/
目录下)实现,以下是容量调度器的典型配置示例:
<
!-- 配置根队列及子队列 -->
<
property>
<
name>
yarn.scheduler.capacity.root.queues<
/name>
<
value>
offline,realtime,interactive<
/value>
<
/property>
<
!-- 离线索列配置 -->
<
property>
<
name>
yarn.scheduler.capacity.root.offline.capacity<
/name>
<
value>
60<
/value>
<
!-- 占集群60%资源 -->
<
/property>
<
property>
<
name>
yarn.scheduler.capacity.root.offline.maximum-capacity<
/name>
<
value>
80<
/value>
<
!-- 最大可使用80%资源 -->
<
/property>
<
!-- 实时列配置 -->
<
property>
<
name>
yarn.scheduler.capacity.root.realtime.capacity<
/name>
<
value>
25<
/value>
<
!-- 占集群25%资源 -->
<
/property>
<
property>
<
name>
yarn.scheduler.capacity.root.realtime.priority<
/name>
<
value>
1<
/value>
<
!-- 优先级高于其他队列 -->
<
/property>
<
!-- 交互式列配置 -->
<
property>
<
name>
yarn.scheduler.capacity.root.interactive.capacity<
/name>
<
value>
15<
/value>
<
!-- 占集群15%资源 -->
<
/property>
<
property>
<
name>
yarn.scheduler.capacity.root.interactive.user-limit-factor<
/name>
<
value>
3<
/value>
<
!-- 单用户最多可使用队列300%资源 -->
<
/property>
配置完成后,需重启YARN服务(stop-yarn.sh &
&
start-yarn.sh
)使配置生效。
5. 调度策略优化建议
- 数据本地化优化:通过
yarn.scheduler.capacity.node-locality-delay
参数(默认-1,表示不等待)设置等待本地数据的最大时间,减少网络传输开销; - 小作业合并:将多个小作业合并为大作业,减少调度次数,提升集群吞吐量;
- 资源弹性调整:根据业务峰谷期动态调整队列容量(如实时推荐业务高峰时增加
realtime
队列容量),避免资源闲置或不足; - 权限控制:通过
yarn.scheduler.capacity.root.queueA.acl_submit_applications
参数控制队列提交权限,防止未授权用户提交作业。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop在Ubuntu上的任务调度策略
本文地址: https://pptw.com/jishu/733090.html