Ubuntu Hadoop作业如何调度
导读:Ubuntu上Hadoop作业调度实践指南 一 核心概念与调度器选型 在Hadoop 2.x/3.x中,作业调度由YARN负责:由ResourceManager全局管理资源、由NodeManager管理单节点资源与容器生命周期,应用以Ap...
Ubuntu上Hadoop作业调度实践指南
一 核心概念与调度器选型
- 在Hadoop 2.x/3.x中,作业调度由YARN负责:由ResourceManager全局管理资源、由NodeManager管理单节点资源与容器生命周期,应用以ApplicationMaster驱动任务执行。YARN提供多种调度策略,常用有:
- FIFO Scheduler:先进先出,简单但不适合共享集群。
- Capacity Scheduler:多队列、容量配额与层级队列,适合多租户与资源隔离。
- Fair Scheduler:按应用公平共享资源,支持抢占与细粒度队列/用户配额。
- 选择建议:
- 单团队/简单场景用FIFO;
- 多部门共享、需配额与隔离用Capacity Scheduler;
- 强调公平与弹性、需要抢占与用户级配额用Fair Scheduler。
二 在Ubuntu上启用与配置调度器
- 前置:安装并配置好Hadoop,配置文件位于**$HADOOP_HOME/etc/hadoop**,至少包含core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml,并以start-dfs.sh与start-yarn.sh启动HDFS与YARN。
- 选择调度器(三选一):
- Capacity Scheduler(推荐用于多租户)
- 在yarn-site.xml设置:
yarn.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=40
yarn.scheduler.capacity.root.dev.capacity=60
yarn.scheduler.capacity.root.dev.maximum-capacity=75 - 重启YARN使配置生效。
- 在yarn-site.xml设置:
- Fair Scheduler(强调公平与抢占)
- 在yarn-site.xml设置:
yarn.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
yarn.scheduler.fair.allocation.file=/path/to/fair-scheduler.xml - 在fair-scheduler.xml中定义队列、权重、抢占等,例如:
2.0
10
- 重启YARN。
- 在yarn-site.xml设置:
- FIFO Scheduler(默认,无需额外配置)。
- Capacity Scheduler(推荐用于多租户)
- 提交作业时指定队列(以MapReduce为例):
hadoop jar your-job.jar com.example.YourJob input output -Dmapred.job.queue.name=prod
或使用yarn提交:
yarn jar your-job.jar com.example.YourJob input output -Dmapred.job.queue.name=prod。
三 提交与监控作业
- 提交方式:
- MapReduce:hadoop jar your-job.jar … 或 yarn jar your-job.jar …
- 其他框架(如Spark on YARN)同样通过yarn提交,由YARN统一调度。
- 常用运维命令:
- 查看运行中应用:yarn application -list
- 查看应用详情:yarn application -status < application_id>
- 监控界面:ResourceManager Web UI 默认地址为http://:8088。
- 队列与优先级:
- 队列放置可通过mapred.job.queue.name指定;
- 提交时可通过优先级影响调度顺序(具体支持取决于调度器与配置)。
四 进阶 定时与跨作业编排
- 对于定时/依赖场景,建议使用工作流调度器:
- Apache Oozie:Hadoop生态原生工作流与协调服务,适合MapReduce/Spark/Hive等作业的编排与定时。
- Apache Airflow:通用工作流编排平台,可通过Hadoop/Spark插件提交与监控任务。
- Linux Cron:简单周期性任务,可脚本化调用hadoop/yarn命令。
- 选型建议:复杂依赖与可视化选Oozie/Airflow;简单周期任务用Cron。
五 性能与稳定性调优要点
- 数据本地化:尽量让任务在数据所在节点执行,减少网络开销。
- 容器与内存:合理设置mapreduce.map.memory.mb、mapreduce.reduce.memory.mb与容器资源,避免OOM与资源浪费。
- Shuffle与压缩:合理设置Shuffle内存与中间数据压缩(如Snappy/LZO),降低I/O与网络。
- 推测执行:开启Speculative Execution缓解慢节点影响。
- 监控与持续优化:结合Ganglia、Ambari等工具持续观测并迭代参数。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Hadoop作业如何调度
本文地址: https://pptw.com/jishu/760190.html
