温馨提示×

Debian下Hadoop作业调度方法

小樊
40
2025-10-04 17:05:15
栏目: 智能运维

Debian下Hadoop作业调度方法

1. 配置YARN自带调度器(基础调度)

YARN是Hadoop的资源管理核心,其内置三种调度器可满足不同资源分配需求,需通过修改mapred-site.xml(指定调度器类)和yarn-site.xml(调整资源参数)配置:

  • FIFO调度器(默认):按作业提交顺序执行,适合单用户或批处理场景。配置mapreduce.jobtracker.taskSchedulerorg.apache.hadoop.mapred.FifoScheduler即可启用。
  • 容量调度器(Capacity Scheduler):为不同用户/队列分配固定容量(如mapreduce.job.queues=default:80%),支持多租户共享集群,适合生产环境。需在mapred-site.xml中设置mapreduce.jobtracker.taskSchedulerorg.apache.hadoop.mapred.CapacityTaskScheduler,并在capacity-scheduler.xml中定义队列容量。
  • 公平调度器(Fair Scheduler):动态分配资源,保证每个用户公平共享集群(如yarn.scheduler.fair.user-as-default-queue=true),适合多用户交互式任务。需在mapred-site.xml中设置mapreduce.jobtracker.taskSchedulerorg.apache.hadoop.mapred.FairScheduler,并在fair-scheduler.xml中配置队列权重。

2. 使用Linux Cron定时调度

对于周期性Hadoop作业(如每日ETL),可通过Debian的cron工具实现定时触发。编辑当前用户的cron表(crontab -e),添加定时任务(如每天午夜执行MapReduce作业):

0 0 * * * /usr/local/hadoop/bin/hadoop jar /path/to/job.jar com.example.YourJobClass /input/path /output/path >> /var/log/hadoop_job.log 2>&1

该配置会每天00:00执行指定作业,并将输出和错误日志重定向到/var/log/hadoop_job.log

3. 第三方工作流调度工具

Apache Oozie

Oozie是Hadoop生态的开源工作流调度系统,支持定义复杂作业依赖(如MapReduce→Hive→Spark)。步骤如下:

  • 安装与配置:下载Oozie并解压至/usr/local,编辑oozie-site.xml配置Hadoop路径(oozie.service.HadoopAccessorService.hadoop.configurations指向$HADOOP_HOME/conf),启动Oozie(oozie start)。
  • 定义工作流:创建XML文件(如workflow.xml)定义作业流程,例如:
    <workflow-app xmlns="uri:oozie:workflow:1.0" name="etl-workflow">
        <start to="map-reduce-node"/>
        <action name="map-reduce-node">
            <map-reduce>
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <configuration>
                    <property><name>mapred.job.queue.name</name><value>default</value></property>
                </configuration>
            </map-reduce>
            <ok to="end"/>
            <error to="fail"/>
        </action>
        <kill name="fail">
            <message>MapReduce job failed: ${wf:errorMessage(wf:lastErrorNode())}</message>
        </kill>
        <end name="end"/>
    </workflow-app>
    
  • 提交作业:创建job.properties文件(指定Oozie URL、工作流路径),执行oozie job -config job.properties -run提交作业。

Azkaban

Azkaban是LinkedIn开源的轻量级调度器,配置简单,适合中小型项目。步骤如下:

  • 安装与配置:下载Azkaban并解压,编辑azkaban.properties配置数据库(如MySQL)和邮件通知。
  • 上传作业:将作业脚本(如job1.sh,包含hadoop jar命令)打包为zip文件,上传至Azkaban Web界面。
  • 定义依赖:在Web界面中创建项目,添加作业并设置依赖关系(如job1完成后执行job2),设置定时调度(如每小时执行)。

4. 结合Cron与YARN

对于需要定时触发YARN作业的场景,可将yarn jar命令与Cron结合(如上述Cron示例),实现定时提交作业。这种方式适合简单的周期性任务,无需复杂依赖管理。

0