Hadoop在Linux环境中的任务调度主要由**YARN(Yet Another Resource Negotiator)**负责,它是Hadoop 2.0及以上版本的核心资源管理框架,旨在实现集群资源的统一分配与任务的高效调度。YARN通过组件分工完成调度全流程:
YARN支持多种调度策略,适配不同场景的资源分配需求:
yarn-site.xml设置调度器类,再通过capacity-scheduler.xml配置队列参数(如队列名称、容量、最大容量)。示例配置:<!-- yarn-site.xml -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
yarn-site.xml设置调度器类,再通过fair-scheduler.xml配置队列参数(如队列权重、资源分配策略)。示例配置:<!-- yarn-site.xml -->
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
Hadoop任务在Linux中的调度流程可分为以下步骤:
使用hadoop jar命令将MapReduce作业提交至YARN集群,指定输入/输出路径及主类。示例:
hadoop jar my-job.jar com.example.MyJob /input/data /output/result
提交后,作业会进入YARN的作业队列,等待调度。
RM接收到作业请求后,根据当前集群资源状态(如剩余内存、CPU)及调度策略(如Capacity Scheduler的队列容量),选择一个合适的NodeManager节点,为其分配Container(资源容器)。
NodeManager在分配的Container中启动ApplicationMaster(如MapReduce作业的MRAppMaster)。AM启动后,向RM注册自身,并汇报作业的基本信息(如Map/Reduce任务数量)。
AM根据作业的需求(如Map任务需要的内存、CPU),向RM发送资源请求(如申请2个Container,每个Container分配2GB内存、1个CPU核心)。RM根据集群资源状态,分配符合条件的Container。
NodeManager在分配的Container中启动任务进程(如MapTask、ReduceTask),执行具体的数据处理逻辑。任务运行过程中,AM会持续监控其进度(如通过心跳机制)。
mapreduce.map.maxattempts配置);通过ResourceManager的Web界面(默认地址:http://<resourcemanager-host>:8088),可查看:
YARN提供了一系列命令行工具,用于管理作业:
yarn application -list:列出所有正在运行或已完成的作业;yarn application -status <application_id>:查看指定作业的详细状态(如Map/Reduce任务进度);yarn application -kill <application_id>:杀死指定的作业。YARN会将作业的日志存储在HDFS中(默认路径:/tmp/logs/<user>/logs),可通过yarn logs -applicationId <application_id>命令查看日志,用于诊断任务失败原因(如内存不足、数据倾斜)。
mapreduce.map.memory.mb)、CPU核心数(如mapreduce.map.cpu.vcores),避免资源浪费或不足;mapreduce.job.locality.wait参数调整数据本地化等待时间(如设置为10秒),减少网络传输开销;yarn.scheduler.capacity.<queue-name>.capacity),避免队列过载。