CentOS上Hadoop任务调度的核心机制与位置
- Hadoop在CentOS上的作业调度由**YARN(Yet Another Resource Negotiator)**负责,核心组件包括:
- ResourceManager:全局资源统筹与调度。
- NodeManager:单节点资源监控与容器(Container)管理。
- ApplicationMaster:每个应用的管理器,向RM申请资源并与NM协作运行任务。
- Container:对CPU、内存等资源的隔离单位。
- 作业调度与应用执行流程:应用向ResourceManager申请资源 → RM按调度策略分配 → NodeManager创建容器运行任务 → 任务结束回收资源。上述机制是Hadoop 2.x/3.x在CentOS环境下的通用架构。
调度器类型与选择
- FIFO Scheduler:先进先出,简单但不适合多用户/多任务并发,易出现“大作业饿死小作业”。
- Capacity Scheduler:按“队列”划分资源配额,适合多租户/多部门共享集群,强调资源隔离与保障。
- Fair Scheduler:按“池/队列”动态均衡资源,强调公平共享与最小资源保障,适合多用户交互式与批处理混合场景。
- 选择建议:
- 单团队、负载简单 → FIFO;
- 多部门共享、需配额与隔离 → Capacity;
- 多用户、强调公平与弹性 → Fair。
在CentOS上配置调度器的实操步骤
- 基础前提
- 安装JDK、配置SSH免密,部署Hadoop并配置好core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml;
- 启动HDFS与YARN:start-dfs.sh、start-yarn.sh;
- 常用验证:hdfs dfsadmin -report、yarn node -list;
- 访问ResourceManager Web UI:默认端口8088。
- 启用Capacity Scheduler(示例)
- 在yarn-site.xml指定调度器类:
yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
- 在capacity-scheduler.xml定义队列与容量:
yarn.scheduler.capacity.root.queues
default,prod,dev
yarn.scheduler.capacity.root.prod.capacity
70
yarn.scheduler.capacity.root.dev.capacity
30
- 同步配置到所有节点并重启YARN。
- 启用Fair Scheduler(示例)
- 在yarn-site.xml指定调度器类:
yarn.resourcemanager.scheduler.class
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
- 提供fair-scheduler.xml(定义池/队列、最小/最大份额、权重等);
- 同步配置并重启YARN。
- 提交作业到指定队列(示例)
- MapReduce:
hadoop jar hadoop-mapreduce-examples.jar wordcount /input /output -D mapreduce.job.queuename=dev
- Spark on YARN:
spark-submit --master yarn --queue dev --class org.apache.spark.examples.SparkPi $SPARK_HOME/examples/jars/spark-examples_2.12-3.3.0.jar 10
- 注:队列名需与调度器配置一致。
常用监控与运维命令
- 查看节点与资源:
- yarn node -list
- yarn rmadmin -getGroups (查看用户组配额)
- 查看应用与日志:
- yarn application -list -appStates ALL
- yarn logs -applicationId <app_id>
- 历史任务:配置并访问JobHistory Server(常见端口19888)以查看已完成作业详情。
- Web界面:
- ResourceManager:http://:8088
- JobHistory:http://:19888
性能与稳定性优化要点
- 数据本地化优先:尽量让计算靠近数据,减少跨节点网络传输。
- 合理设置容器资源:根据作业与节点规格配置yarn.nodemanager.resource.memory-mb、yarn.nodemanager.resource.cpu-vcores,并匹配Map/Reduce内存参数,避免OOM或资源闲置。
- 存储策略与I/O:启用HDFS存储策略(如HOT/WARM/COLD)分层存储;在CentOS上结合磁盘类型选择合适的I/O调度器(如deadline/noop/bfq)以匹配负载特性。
- 网络与系统参数:适当增大TCP缓冲区、优化网络延迟;持续通过RM/JobHistory UI与命令行监控瓶颈并迭代调优。