Linux环境下Hadoop任务调度实现指南
YARN(Yet Another Resource Negotiator)是Hadoop 2.x及以上版本的核心资源管理框架,负责集群资源的统一分配与任务调度。其架构包含三个关键角色:
YARN提供三种主流调度策略,适配不同场景需求:
yarn.resourcemanager.scheduler.class
默认值为org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler
)。queue1
占30%、queue2
占20%),队列内任务按FIFO排序。允许设置队列最大容量(如queue1
最大可使用50%资源),应对突发任务需求。capacity-scheduler.xml
):<property> <name>yarn.scheduler.capacity.root.queues</name> <value>default,team1,team2</value> </property> <property> <name>yarn.scheduler.capacity.root.team1.capacity</name> <value>30</value> </property> <property> <name>yarn.scheduler.capacity.root.team2.capacity</name> <value>20</value> </property> <property> <name>yarn.scheduler.capacity.root.team1.maximum-capacity</name> <value>50</value> </property>
fair-scheduler.xml
):<property> <name>yarn.scheduler.fair.preemption</name> <value>true</value> </property> <property> <name>yarn.scheduler.fair.allocation.file</name> <value>/path/to/fair-scheduler.xml</value> </property> <property> <name>queue1.weight</name> <value>1</value> </property> <property> <name>queue2.weight</name> <value>2</value> </property>
my-job.jar
)。hadoop fs -put
命令将作业文件上传至HDFS,确保存储路径可访问(如hadoop fs -put my-job.jar /user/hadoop/jobs/
)。hadoop jar
命令提交作业至YARN,指定队列(可选):hadoop jar my-job.jar com.example.MyJobClass input_path output_path -Dmapreduce.job.queuename=team1
其中,-Dmapreduce.job.queuename
用于指定作业所属队列(需提前在调度器配置中定义)。http://<resourcemanager-host>:8088
)查看作业状态,或使用命令行工具:yarn application -list # 列出所有运行中的作业 yarn application -status <app_id> # 查看指定作业的详细状态
mapreduce.job.locality.wait
参数调整等待时间(默认10秒)。mapreduce.map.memory.mb
、mapreduce.reduce.memory.mb
),避免资源浪费或不足。mapreduce.speculative.execution
),对运行慢的任务启动备份任务,加快整体作业进度(适用于易出现数据倾斜的场景)。map
输出)进行压缩(如使用Snappy算法),减少磁盘I/O与网络传输(配置mapreduce.map.output.compress
为true
)。对于周期性或复杂工作流任务,可结合以下工具实现自动化调度:
crontab -e
编辑定时任务,例如每5分钟执行一次Shell脚本:*/5 * * * * /path/to/submit_job.sh >> /var/log/hadoop_job.log 2>&1