首页主机资讯Linux上Hadoop作业如何调度管理

Linux上Hadoop作业如何调度管理

时间2025-10-23 13:34:03发布访客分类主机资讯浏览388
导读:Linux上Hadoop作业调度管理指南 一、前置准备:配置Hadoop集群环境 在Linux上调度Hadoop作业前,需完成集群基础配置,确保HDFS(分布式存储)和YARN(资源管理与调度)正常运行。核心步骤包括: 安装Hadoop:...

Linux上Hadoop作业调度管理指南

一、前置准备:配置Hadoop集群环境

在Linux上调度Hadoop作业前,需完成集群基础配置,确保HDFS(分布式存储)和YARN(资源管理与调度)正常运行。核心步骤包括:

  • 安装Hadoop:从Apache官网下载稳定版本,解压至指定目录;
  • 配置核心文件:编辑etc/hadoop目录下的core-site.xml(集群通用配置,如HDFS地址)、hdfs-site.xml(HDFS参数,如NameNode端口、数据块大小)、yarn-site.xml(YARN参数,如ResourceManager地址、调度器类型)、mapred-site.xml(MapReduce参数,如作业运行模式);
  • 设置环境变量:在~/.bashrc~/.bash_profile中添加HADOOP_HOME(Hadoop安装路径)和PATH(包含$HADOOP_HOME/bin),使hadoopyarn等命令全局可用;
  • 启动集群:执行start-dfs.sh启动HDFS,start-yarn.sh启动YARN,通过jps命令验证NameNode、DataNode、ResourceManager、NodeManager等进程是否正常运行。

二、提交Hadoop作业

使用yarn jar命令将打包好的作业(如MapReduce的JAR文件)提交至YARN集群。基本语法如下:

yarn jar /path/to/job.jar MainClass input_path output_path [additional_args]
  • 参数说明
    • /path/to/job.jar:作业JAR文件的HDFS或本地路径(建议上传至HDFS,如hdfs://namenode:8020/user/username/job.jar);
    • MainClass:作业主类的全限定名(如com.example.WordCount);
    • input_path:输入数据的HDFS路径(如hdfs://namenode:8020/input);
    • output_path:输出数据的HDFS路径(需不存在,如hdfs://namenode:8020/output);
    • additional_args:可选参数(如-D mapreduce.map.memory.mb=2048设置Map任务内存为2GB)。
      示例:提交Hadoop自带的WordCount示例作业:
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples.jar wordcount /input /output

三、选择与配置调度策略

YARN支持三种主要调度器,需根据集群规模和业务需求选择:

1. FIFO调度器(默认)

  • 特点:先进先出,作业按提交顺序排队执行,先提交的作业优先占用资源。
  • 适用场景:简单测试或小规模集群(作业量少、无优先级需求)。
  • 配置:无需额外配置(YARN默认使用FIFO),若需调整优先级,可通过mapreduce.job.priority参数设置(值为VERY_HIGHHIGHNORMALLOWVERY_LOW)。

2. 容量调度器(Capacity Scheduler)

  • 特点:支持多队列(如defaultteam1team2),每个队列分配固定资源配额(如root.team1.capacity=30%),队列内采用FIFO策略。可限制同一用户的资源使用量(如yarn.scheduler.capacity.root.team1.user-limit-factor=1,表示用户最多使用队列的100%资源)。
  • 适用场景:多团队/项目共享集群,需隔离资源、保证各团队资源配额。
  • 配置步骤
    • yarn-site.xml中启用容量调度器:
      <
          property>
          
        <
          name>
          yarn.resourcemanager.scheduler.class<
          /name>
          
        <
          value>
          org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler<
          /value>
          
      <
          /property>
          
      
    • 创建capacity-scheduler.xml,配置队列和资源:
      <
          configuration>
          
        <
          property>
          
          <
          name>
          yarn.scheduler.capacity.root.queues<
          /name>
          
          <
          value>
          default,team1,team2<
          /value>
          
        <
          /property>
          
        <
          property>
          
          <
          name>
          yarn.scheduler.capacity.root.default.capacity<
          /name>
          
          <
          value>
          40<
          /value>
          
        <
          /property>
          
        <
          property>
          
          <
          name>
          yarn.scheduler.capacity.root.team1.capacity<
          /name>
          
          <
          value>
          30<
          /value>
          
        <
          /property>
          
        <
          property>
          
          <
          name>
          yarn.scheduler.capacity.root.team2.capacity<
          /name>
          
          <
          value>
          30<
          /value>
          
        <
          /property>
          
        <
          property>
          
          <
          name>
          yarn.scheduler.capacity.root.team1.user-limit-factor<
          /name>
          
          <
          value>
          1<
          /value>
          
        <
          /property>
          
      <
          /configuration>
          
      
    • 重启ResourceManager使配置生效。

3. 公平调度器(Fair Scheduler)

  • 特点:以“公平”为核心,动态调整资源分配,使所有作业随时间推移获得相近的资源份额(如作业A和作业B各占50%资源)。支持资源池(Pool),可为不同用户或团队配置资源权重(如pool.name.weight=2.0,表示该池资源权重为2倍)。
  • 适用场景:多用户共享集群,需动态平衡资源、避免作业饥饿。
  • 配置步骤
    • mapred-site.xml中启用公平调度器:
      <
          property>
          
        <
          name>
          mapreduce.jobtracker.taskScheduler<
          /name>
          
        <
          value>
          org.apache.hadoop.mapred.FairScheduler<
          /value>
          
      <
          /property>
          
      <
          property>
          
        <
          name>
          mapred.fairscheduler.allocation.file<
          /name>
          
        <
          value>
          /path/to/fair-scheduler.xml<
          /value>
          
      <
          /property>
          
      
    • 创建fair-scheduler.xml,配置资源池:
      <
          allocations>
          
        <
          pool name="high_priority">
          
          <
          weight>
          2.0<
          /weight>
          
          <
          minMaps>
          5<
          /minMaps>
          
          <
          minReduces>
          5<
          /minReduces>
          
        <
          /pool>
          
        <
          user name="admin">
          
          <
          maxRunningJobs>
          10<
          /maxRunningJobs>
          
        <
          /user>
          
        <
          userMaxJobsDefault>
          3<
          /userMaxJobsDefault>
          
      <
          /allocations>
          
      
    • 重启ResourceManager使配置生效。

四、监控与管理作业

1. 命令行工具

YARN提供一系列命令行工具,用于管理作业生命周期:

  • 查看所有作业yarn application -list(显示作业ID、用户、队列、状态、进度);
  • 查看作业详情yarn application -status < application_id> (如yarn application -status application_1234567890000_0001,显示作业日志链接、计数器等信息);
  • 杀死作业yarn application -kill < application_id> (终止指定作业)。

2. Web界面

  • ResourceManager Web UI:默认地址为http://< resourcemanager_host> :8088,可查看集群概览、队列资源使用情况、作业列表及详情(如Map/Reduce任务进度、资源占用);
  • NodeManager Web UI:默认地址为http://< nodemanager_host> :8042,可查看节点资源使用情况、运行的容器信息。

五、自动化调度(可选)

对于周期性或复杂的作业流程,可使用自动化调度工具:

  • Cron:Linux系统自带的定时任务工具,适合简单的周期性作业(如每天凌晨执行数据备份)。示例:编辑crontab -e,添加0 2 * * * /bin/bash /path/to/submit_job.sh(每天凌晨2点执行submit_job.sh脚本);
  • Apache Oozie:工作流调度系统,支持定义作业依赖关系(如MapReduce→Hive→Spark),可编排复杂的工作流。需部署Oozie Server,通过oozie命令或Web界面提交工作流;
  • Apache Airflow:Python编写的编排平台,支持DAG(有向无环图)定义,提供丰富的Operator(如HadoopMROperatorBashOperator),适合大规模、跨系统的作业调度。

六、优化与注意事项

  • 资源分配:根据作业需求调整Map/Reduce任务的内存(mapreduce.map.memory.mbmapreduce.reduce.memory.mb)和CPU核心数(mapreduce.map.cpu.vcoresmapreduce.reduce.cpu.vcores),避免资源浪费或不足;
  • 日志分析:通过YARN Web界面的“Logs”链接查看作业日志,定位性能瓶颈(如数据倾斜、资源不足);
  • 故障恢复:YARN支持作业自动重试(通过yarn.resourcemanager.am.max-attempts配置重试次数),确保作业幂等性(如避免重复写入数据);
  • 安全性:启用Kerberos认证,配置用户权限(如yarn.scheduler.capacity.root.team1.acl_submit_applications设置队列提交权限),防止未授权访问。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux上Hadoop作业如何调度管理
本文地址: https://pptw.com/jishu/733375.html
Hadoop在Linux上的资源如何分配 Hadoop在Linux上的安全性怎样保障

游客 回复需填写必要信息