debian

Debian Hadoop任务调度

小樊
51
2025-10-23 16:40:05
栏目: 智能运维

Debian系统下Hadoop任务调度的实现方法

在Debian系统中,Hadoop任务调度可通过内置调度器(适用于基础资源分配)、系统级定时工具(适用于周期性任务)或高级工作流引擎(适用于复杂依赖场景)实现,以下是具体方案:

一、内置YARN调度器配置

YARN(Yet Another Resource Negotiator)是Hadoop的资源管理层,负责任务调度与资源分配,支持三种核心调度器:

以上配置需重启YARN服务生效:stop-yarn.sh && start-yarn.sh

二、Linux Cron定时任务

对于需要周期性执行的Hadoop任务(如每日ETL),可使用Debian自带的cron工具:

  1. 编辑当前用户的cron表:crontab -e
  2. 添加定时任务(例如每天00:00执行Hadoop作业):
    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
    
    • 0 0 * * *:时间表达式(每天00:00);
    • /usr/local/hadoop/bin/hadoop jar:Hadoop作业执行命令;
    • >> /var/log/hadoop-job.log 2>&1:将标准输出与错误输出重定向到日志文件。

通过crontab -l可查看当前用户的定时任务列表。

三、Apache Oozie工作流调度

对于复杂依赖关系(如MapReduce→Hive→Spark的流水线任务),推荐使用Apache Oozie:

  1. 安装Oozie
    wget https://archive.apache.org/dist/oozie/5.2.0/apache-oozie-5.2.0.tar.gz
    tar -xzvf apache-oozie-5.2.0.tar.gz -C /usr/local/
    echo "export OOZIE_HOME=/usr/local/apache-oozie-5.2.0" >> ~/.bashrc
    echo "export PATH=\$PATH:\$OOZIE_HOME/bin" >> ~/.bashrc
    source ~/.bashrc
    
  2. 配置Oozie: 编辑$OOZIE_HOME/conf/oozie-site.xml,指定Hadoop配置路径:
    <property>
      <name>oozie.service.HadoopAccessorService.hadoop.configurations</name>
      <value>*=/usr/local/hadoop/etc/hadoop</value>
    </property>
    
  3. 启动Oozie
    oozie-setup.sh prepare-war
    oozie-start.sh
    
  4. 创建工作流: 编写workflow.xml定义任务流程(例如MapReduce任务):
    <workflow-app xmlns="uri:oozie:workflow:1.0" name="mapreduce-workflow">
      <start to="mr-node"/>
      <action name="mr-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>
    
  5. 提交工作流: 创建job.properties配置文件:
    nameNode=hdfs://localhost:9000
    jobTracker=localhost:8032
    queueName=default
    workflowAppPath=${nameNode}/user/${user.name}/oozie-workflows/mapreduce-workflow
    
    提交任务:oozie job -config job.properties -run

四、Apache Airflow高级调度

对于企业级复杂调度(如跨任务依赖、动态触发、可视化),推荐使用Apache Airflow:

  1. 安装Airflow
    pip install apache-airflow
    
  2. 初始化数据库
    airflow db init
    
  3. 配置Airflow: 编辑$AIRFLOW_HOME/airflow.cfg,设置SQLite数据库(开发环境):
    [core]
    sql_alchemy_conn = sqlite:////usr/local/airflow/airflow.db
    executor = SequentialExecutor
    
  4. 创建DAG(有向无环图): 在$AIRFLOW_HOME/dags目录下创建hadoop_job_dag.py
    from datetime import datetime, timedelta
    from airflow import DAG
    from airflow.operators.bash_operator import BashOperator
    
    default_args = {
        'owner': 'airflow',
        'depends_on_past': False,
        'start_date': datetime(2025, 10, 1),
        'retries': 1,
        'retry_delay': timedelta(minutes=5),
    }
    
    dag = DAG(
        'hadoop_mapreduce_job',
        default_args=default_args,
        description='A Hadoop MapReduce job scheduled by Airflow',
        schedule_interval='@daily',  # 每天执行
    )
    
    run_hadoop_job = BashOperator(
        task_id='run_hadoop_job',
        bash_command='/usr/local/hadoop/bin/hadoop jar /path/to/job.jar com.example.YourJobClass /input/path /output/path',
        dag=dag,
    )
    
    run_hadoop_job
    
  5. 启动Airflow
    airflow webserver -p 8080  # Web界面:http://localhost:8080
    airflow scheduler  # 后台调度进程
    

通过Airflow Web界面可直观管理任务依赖、触发任务及查看执行日志。

以上方案覆盖了Debian系统下Hadoop任务调度的常见需求,可根据任务复杂度选择合适的工具:基础场景用YARN内置调度器,周期性任务用Cron,复杂工作流用Oozie/Airflow。

0
看了该问题的人还看了