Hadoop在Ubuntu上的任务调度策略
Hadoop在Ubuntu系统上的任务调度主要通过**YARN(Yet Another Resource Negotiator)**资源管理框架实现,支持多种调度策略以适应不同业务场景。以下是主流调度策略的详细说明及配置要点:
FIFO是Hadoop默认的调度策略,核心逻辑为按作业提交顺序分配资源。集群资源由先提交的作业独占,直至该作业完成或释放资源,后续作业依次等待。这种策略实现简单,无额外配置开销,但存在明显缺陷:大作业会阻塞小作业,资源利用率低,无法满足多用户或多任务类型的并发需求。
适用场景:单用户环境、简单批处理任务或小规模集群(如测试环境)。
容量调度器以队列为核心,将集群资源划分为多个逻辑队列(如offline、realtime、interactive),每个队列分配固定容量(如offline队列占60%资源),支持层级队列结构(如业务队列下再划分离线/实时子队列)。作业在所属队列内按FIFO调度,同时通过maximum-capacity参数限制队列最大资源占用(如offline队列最大80%),防止资源过度集中。
关键特性:
priority参数设置队列优先级(如实时队列优先级高于离线索引队列),优先分配资源。公平调度器以公平性为核心目标,动态调整资源分配,使所有作业在时间线上平均获取资源。初始时,作业可独占资源;当其他作业提交后,调度器会计算每个作业的“公平份额”(队列资源总量/活跃作业数),并通过抢占机制(如回收超额占用的资源)调整资源分配,确保各作业最终获得相近的资源量。
关键特性:
weight参数设置队列权重(如实时队列权重为3,离线索引队列为1),权重越高,分配的资源越多;VERY_HIGH、HIGH),优先级越高,越易获得资源。在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)使配置生效。
yarn.scheduler.capacity.node-locality-delay参数(默认-1,表示不等待)设置等待本地数据的最大时间,减少网络传输开销;realtime队列容量),避免资源闲置或不足;yarn.scheduler.capacity.root.queueA.acl_submit_applications参数控制队列提交权限,防止未授权用户提交作业。