温馨提示×

Debian上Hadoop任务调度怎么做

小樊
54
2025-09-19 20:04:30
栏目: 智能运维

1. 前置准备:安装与配置Hadoop集群
在Debian上实现Hadoop任务调度前,需先完成Hadoop基础环境的搭建。具体步骤包括:

  • 安装JDK:Hadoop依赖Java环境,需安装与Hadoop版本兼容的JDK(如OpenJDK 11),并配置JAVA_HOME环境变量。
  • 下载与解压Hadoop:从Apache官网下载Hadoop二进制包(如3.3.1版本),解压至/usr/local/目录,配置HADOOP_HOMEPATH环境变量(将Hadoop的binsbin目录加入PATH)。
  • 配置核心文件:修改Hadoop配置目录($HADOOP_HOME/etc/hadoop)下的关键文件:
    • core-site.xml:设置HDFS URI(fs.defaultFS,如hdfs://namenode:9000);
    • hdfs-site.xml:配置HDFS副本数(dfs.replication,如3)、NameNode数据目录(dfs.namenode.name.dir)、DataNode数据目录(dfs.datanode.data.dir);
    • mapred-site.xml:指定MapReduce框架为YARN(mapreduce.framework.name,值为yarn);
    • yarn-site.xml:配置ResourceManager主机名(yarn.resourcemanager.hostname,如resourcemanager)、NodeManager辅助服务(yarn.nodemanager.aux-services,值为mapreduce_shuffle)及Shuffle服务类(yarn.nodemanager.aux-services.mapreduce.shuffle.class,值为org.apache.hadoop.mapred.ShuffleHandler)。
  • 启动Hadoop集群:在NameNode节点执行start-dfs.sh启动HDFS,在ResourceManager节点执行start-yarn.sh启动YARN,通过jps命令验证NameNode、DataNode、ResourceManager、NodeManager等进程是否正常运行。

2. 使用YARN内置调度器(基础调度)
YARN是Hadoop的资源管理器,其内置FIFO调度器(默认)、容量调度器CapacityScheduler)、公平调度器FairScheduler)三种调度策略,可通过配置mapred-site.xml选择:

  • FIFO调度器:按作业提交顺序执行,适合单用户或小规模集群(无需额外配置,默认启用)。
  • 容量调度器:为不同用户/团队分配固定容量队列(如default队列占80%资源),支持资源共享,配置capacity-scheduler.xml(示例:为default队列设置yarn.scheduler.capacity.root.default.capacity=80)。
  • 公平调度器:动态分配资源,确保所有作业公平获取资源(如空闲资源分配给等待作业),配置fair-scheduler.xml(示例:定义default池,设置yarn.scheduler.fair.default.pool)。
    配置完成后,通过yarn application -submit命令提交作业,YARN会根据选择的调度器分配资源。

3. 使用Linux Cron定时执行Hadoop任务
对于周期性任务(如每日ETL),可通过Debian的cron工具定时调用Hadoop命令:

  • 编辑当前用户的cron表:crontab -e
  • 添加定时任务(如每天00:00执行Hadoop作业):0 0 * * * /usr/local/hadoop/bin/hadoop jar /path/to/job.jar com.example.YourJobClass /input/path /output/path >> /path/to/logfile.log 2>&1>>将输出追加到日志文件,2>&1将错误输出重定向到标准输出)。
    通过crontab -l可查看当前用户的定时任务列表。

4. 使用Apache Airflow实现复杂工作流调度
对于需要任务依赖(如“数据采集→数据处理→数据入库”)、可视化监控的复杂场景,可使用Apache Airflow:

  • 安装Airflow:在Debian上通过pip安装(pip install apache-airflow),初始化数据库(airflow db init);
  • 配置Airflow:编辑airflow.cfg,设置executor(如LocalExecutor,适合单机环境)、sql_alchemy_conn(数据库连接,如SQLite或PostgreSQL);
  • 创建DAG(有向无环图):编写Python脚本定义任务逻辑(如使用BashOperator调用Hadoop命令),示例:
    from airflow import DAG
    from airflow.operators.bash import BashOperator
    from datetime import datetime, timedelta
    
    default_args = {
        'owner': 'airflow',
        'depends_on_past': False,
        'start_date': datetime(2025, 9, 1),
        'retries': 1,
        'retry_delay': timedelta(minutes=5)
    }
    
    dag = DAG(
        'hadoop_etl_workflow',
        default_args=default_args,
        description='A simple Hadoop ETL workflow',
        schedule_interval='@daily',  # 每天执行一次
        catchup=False
    )
    
    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  # 定义任务依赖(此处无前置任务,直接执行)
    
  • 启动Airflow:执行airflow webserver -p 8080启动Web服务器,访问http://localhost:8080查看DAG并手动触发或等待定时执行。

5. 使用Azkaban/Oozie实现作业流调度(可选)

  • Azkaban:由LinkedIn开源的批处理调度器,适合中小型项目,配置简单。步骤包括:下载Azkaban Web Server和Executor,配置azkaban.properties(如azkaban.webserver.port=8081),通过Web界面上传作业流(.job文件定义任务依赖),设置定时触发条件。
  • Oozie:Hadoop自带的工作流引擎,功能全面(支持Hive、Pig等组件),但配置复杂。需部署Oozie Server,编写workflow.xml(定义任务流程)和coordinator.xml(定义定时策略),通过Oozie CLI或Web界面提交作业。
    两者均需与Hadoop集群集成,通过YARN执行任务,适合需要作业流编排的场景。

0