温馨提示×

Linux上Hadoop作业如何调度

小樊
50
2025-11-09 00:16:58
栏目: 智能运维

Linux上Hadoop作业调度的实现与优化

1. 前置准备:安装与配置Hadoop集群

在Linux环境下调度Hadoop作业前,需先搭建并配置好Hadoop集群(包括HDFS和YARN)。核心配置文件集中在$HADOOP_HOME/etc/hadoop目录下,需重点调整以下文件:

  • core-site.xml:配置Hadoop基础参数(如HDFS地址fs.defaultFS、YARN资源管理器地址yarn.resourcemanager.hostname);
  • hdfs-site.xml:配置HDFS副本数、NameNode/DataNode路径等;
  • yarn-site.xml:配置YARN资源管理器(ResourceManager)和节点管理器(NodeManager)的行为(如yarn.nodemanager.resource.memory-mb设置节点可用内存);
  • mapred-site.xml:指定作业调度器类型(如mapreduce.framework.name设为yarn)。 配置完成后,启动HDFS(start-dfs.sh)和YARN(start-yarn.sh)服务,确保集群正常运行。

2. 作业提交:通过YARN执行MapReduce任务

Hadoop作业需通过hadoop jaryarn jar命令提交至YARN集群。例如,执行Hadoop自带的WordCount示例:

yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples.jar wordcount /input/path /output/path

提交后,ResourceManager会接收请求,NodeManager启动容器运行Map/Reduce任务,ApplicationMaster负责监控任务进度并与ResourceManager协调资源。

3. YARN内置调度器:选择合适的调度策略

YARN支持三种核心调度器,需根据集群场景选择:

  • FIFO(先进先出):默认调度器,按作业提交顺序执行,适合单用户或批处理场景。配置时无需额外修改yarn-site.xml(默认启用)。
  • Capacity Scheduler(容量调度器):支持多租户,将集群划分为多个队列(如defaultqueue1),每个队列分配固定资源容量(如yarn.scheduler.capacity.root.default.capacity=50%)。同一队列内采用FIFO策略,适合多团队共享集群。
  • Fair Scheduler(公平调度器):确保所有作业公平共享资源(如mapred.fairscheduler.allocation.file指定分配文件),适合多用户交互式作业。通过allocations.xml配置队列的最小资源保障(minMaps/minReduces)和权重(weight)。

4. 高级调度:使用工作流调度工具

对于复杂作业(如ETL pipeline、依赖作业),需借助工作流调度工具实现自动化管理:

  • Crontab:Linux自带定时任务工具,适合简单周期性作业(如每天凌晨执行数据备份)。通过crontab -e添加任务(如0 2 * * * /path/to/hadoop_job.sh)。
  • Oozie:支持MapReduce、Spark等作业的工作流编排,可通过Web界面或命令行提交。需配置oozie-site.xml并部署作业描述文件(workflow.xml)。
  • Airflow:Python编写的编排平台,支持复杂DAG(有向无环图)调度,适合大规模数据处理场景。通过DAG文件定义作业依赖关系。

5. 监控与管理:跟踪作业状态

  • YARN Web界面:默认通过http://resourcemanager-host:8088访问,可查看集群资源使用情况、作业列表、任务日志等。
  • 命令行工具:使用yarn application -list查看运行中的作业,yarn application -status <app_id>查看作业详情。
  • 第三方工具:如Ganglia(监控集群性能)、Ambari(集群管理)或Cloudera Manager(企业级管理),提升监控效率。

6. 优化建议

  • 资源调整:根据作业类型调整YARN容器大小(yarn.scheduler.minimum-allocation-mb/maximum-allocation-mb),避免资源浪费。
  • 作业配置:对于内存密集型作业,增加mapreduce.map.memory.mbmapreduce.reduce.memory.mb参数;对于CPU密集型作业,调整yarn.nodemanager.resource.cpu-vcores
  • 队列策略:在Capacity Scheduler中,合理分配队列容量(如queue1.capacity=30%),避免单个队列占用过多资源;在Fair Scheduler中,设置userMaxJobsDefault限制用户并发作业数,防止资源抢占。

0