温馨提示×

CentOS Hadoop作业调度怎么设置

小樊
40
2025-10-22 06:02:07
栏目: 智能运维

CentOS下Hadoop作业调度的设置方法

1. 选择作业调度器

Hadoop支持多种作业调度器,需根据集群需求选择:

  • FIFO Scheduler(先进先出):默认调度器,按作业提交顺序执行,适合单用户或小集群,但无法处理多租户资源竞争。
  • Capacity Scheduler(容量调度器):为不同队列分配固定资源比例(如root.default队列占50%资源),保证多租户资源公平性,适合生产环境。
  • Fair Scheduler(公平调度器):动态调整资源分配,使所有作业公平共享集群资源(如长时间运行的作业不会占用过多资源),适合批处理混合场景。
    调度器选择通过yarn-site.xml中的yarn.resourcemanager.scheduler.class参数配置,默认使用CapacityScheduler

2. 配置YARN资源调度参数

YARN的资源调度核心配置在yarn-site.xml中,关键参数包括:

  • ResourceManager地址:指定ResourceManager的RPC和Web UI地址,如:
    <property>
      <name>yarn.resourcemanager.address</name>
      <value>centos-rm:8032</value> <!-- 替换为实际主机名/IP -->
    </property>
    <property>
      <name>yarn.resourcemanager.scheduler.address</name>
      <value>centos-rm:8030</value> <!-- 调度器通信地址 -->
    </property>
    <property>
      <name>yarn.resourcemanager.webapp.address</name>
      <value>centos-rm:8088</value> <!-- ResourceManager Web UI -->
    </property>
    
  • NodeManager资源限制:设置每个NodeManager可用的物理内存和虚拟CPU,如:
    <property>
      <name>yarn.nodemanager.resource.memory-mb</name>
      <value>8192</value> <!-- 总物理内存(MB) -->
    </property>
    <property>
      <name>yarn.nodemanager.resource.cpu-vcores</name>
      <value>4</value> <!-- 总虚拟CPU核心数 -->
    </property>
    
  • 调度器配置:若使用CapacityScheduler,需在capacity-scheduler.xml中定义队列资源比例,如:
    <property>
      <name>yarn.scheduler.capacity.root.default.capacity</name>
      <value>50</value> <!-- default队列占50%资源 -->
    </property>
    <property>
      <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>
      <value>100</value> <!-- 最大可扩展至100% -->
    </property>
    

配置完成后,重启YARN服务使更改生效:stop-yarn.sh && start-yarn.sh

3. 配置MapReduce作业参数

MapReduce作业的资源分配需在mapred-site.xml中配置,关键参数包括:

  • 内存分配:设置Map/Reduce任务的内存限制,避免资源浪费或OOM,如:
    <property>
      <name>mapreduce.map.memory.mb</name>
      <value>2048</value> <!-- Map任务内存(MB) -->
    </property>
    <property>
      <name>mapreduce.reduce.memory.mb</name>
      <value>4096</value> <!-- Reduce任务内存(MB) -->
    </property>
    
  • CPU分配:设置Map/Reduce任务的虚拟CPU核心数,如:
    <property>
      <name>mapreduce.map.cpu.vcores</name>
      <value>2</value> <!-- Map任务虚拟CPU -->
    </property>
    <property>
      <name>mapreduce.reduce.cpu.vcores</name>
      <value>4</value> <!-- Reduce任务虚拟CPU -->
    </property>
    
  • Shuffle服务:配置MapReduce Shuffle服务的实现类,确保Reduce任务能正确获取Map任务的输出,如:
    <property>
      <name>mapreduce.shuffle.class</name>
      <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
    

配置完成后,重启MapReduce服务:stop-mapred.sh && start-mapred.sh

4. 使用外部调度工具(可选)

若需要更复杂的调度逻辑(如周期性执行、依赖管理),可使用以下工具:

  • Crontab:Linux系统自带的定时任务工具,适合简单的周期性作业(如每天凌晨执行数据备份),通过crontab -e添加任务,如:
    0 2 * * * /usr/bin/hadoop jar /path/to/job.jar com.example.MyJob /input /output
    
  • Azkaban:开源的工作流调度框架,支持作业依赖、权限管理、Web界面,适合企业级复杂工作流(如ETL流程),需安装并配置Azkaban Server和Web界面。
  • Oozie:Hadoop原生工作流引擎,支持MapReduce、Hive、Pig等作业的编排,适合需要细粒度控制的场景,通过oozie命令提交作业。

注意事项

  • 调度器配置需根据集群规模和业务需求调整,如多租户环境优先选择CapacityScheduler,批处理混合场景优先选择Fair Scheduler
  • 资源分配参数(如内存、CPU)需根据节点实际硬件配置设置,避免过度分配导致集群性能下降。
  • 修改配置文件后,需重启对应服务(YARN、MapReduce)使更改生效。
  • 生产环境中建议开启YARN的Web UI监控(yarn.resourcemanager.webapp.address),实时查看作业运行状态和资源使用情况。

0