温馨提示×

Hadoop 任务在 Ubuntu 上如何调度

小樊
42
2025-11-09 05:57:08
栏目: 智能运维

Hadoop任务在Ubuntu上的调度方法

1. 前置准备:安装并配置Hadoop集群

在Ubuntu上调度Hadoop任务前,需先完成Hadoop的安装与基础配置。主要步骤包括:

  • 下载并解压Hadoop(推荐版本3.x),配置环境变量(如HADOOP_HOMEPATH);
  • 修改核心配置文件(core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml),设置HDFS地址、YARN资源管理器、MapReduce框架等参数;
  • 启动Hadoop集群(start-dfs.sh启动HDFS,start-yarn.sh启动YARN),并通过jps命令验证进程(NameNode、DataNode、ResourceManager、NodeManager等)是否正常运行。

2. 基础调度方式:使用Cron定时执行Shell脚本

Cron是Ubuntu自带的定时任务工具,适合周期性执行Hadoop作业(如每日数据统计、批量ETL)。

  • 步骤1:编写Hadoop作业Shell脚本
    创建.sh文件(如hadoop_job.sh),内容包含Hadoop命令(如提交MapReduce作业、运行Hive查询),并设置执行权限(chmod +x hadoop_job.sh)。示例脚本:
    #!/bin/bash
    # 设置Hadoop环境变量
    export HADOOP_HOME=/opt/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin
    # 执行MapReduce作业(替换为实际JAR路径和输入输出目录)
    $HADOOP_HOME/bin/hadoop jar /opt/hadoop/examples.jar wordcount /input/data /output/result
    # 将结果输出到日志文件
    echo "Job executed at $(date)" >> /var/log/hadoop_job.log
    
  • 步骤2:配置Cron定时任务
    使用crontab -e命令编辑当前用户的Cron表,添加定时规则(如每天凌晨2点执行):
    0 2 * * * /opt/scripts/hadoop_job.sh
    
    保存后,Cron会每分钟检查任务并自动执行。

3. 进阶调度方式:使用Oozie工作流调度

Oozie是Hadoop生态中的专业工作流调度工具,支持复杂任务依赖、条件判断和重试机制,适合企业级场景。

  • 步骤1:安装Oozie
    通过Ubuntu包管理器安装(sudo apt-get install oozie),或下载Oozie发行版并解压到指定目录。
  • 步骤2:配置Oozie
    修改oozie-site.xml文件,设置Oozie服务器地址、数据库连接(如MySQL)等参数;将Oozie的共享库复制到HDFS(oozie-setup.sh sharelib create -fs hdfs://localhost:9000/oozie)。
  • 步骤3:编写工作流定义(XML)
    创建workflow.xml文件,定义任务流程(如MapReduce作业→Hive查询)。示例:
    <workflow-app name="wordcount-workflow" xmlns="uri:oozie:workflow:0.5">
        <start to="wordcount-job"/>
        <action name="wordcount-job">
            <map-reduce>
                <job-tracker>${jobTracker}</job-tracker>
                <name-node>${nameNode}</name-node>
                <configuration>
                    <property><name>mapreduce.job.jar</name><value>/opt/hadoop/examples.jar</value></property>
                    <property><name>mapreduce.job.inputdir</name><value>/input/data</value></property>
                    <property><name>mapreduce.job.outputdir</name><value>/output/result</value></property>
                </configuration>
            </map-reduce>
            <ok to="end"/>
            <error to="fail"/>
        </action>
        <kill name="fail">
            <message>Workflow failed!</message>
        </kill>
        <end name="end"/>
    </workflow-app>
    
  • 步骤4:提交工作流
    使用Oozie命令行工具提交工作流(oozie job -config job.properties -run),其中job.properties文件包含Oozie服务器地址、工作流路径等参数。

4. 调度策略配置:优化资源分配

Hadoop的调度策略决定了任务如何分配集群资源,Ubuntu上的Hadoop集群可通过修改mapred-site.xml配置以下策略:

  • FIFO Scheduler(默认):先进先出,适合单用户或批处理作业,配置简单但无法满足多用户需求。
  • Capacity Scheduler(推荐):多队列资源分配,每个队列有最低资源保障(如mapred.capacity-scheduler.queue.default.capacity=50),支持队列内FIFO或优先级调度,适合多团队共享集群。
  • Fair Scheduler:公平共享,所有作业动态分配资源(如mapred.jobtracker.taskScheduler=org.apache.hadoop.mapred.FairScheduler),适合交互式作业和生产型作业混合场景。
    配置完成后,需重启YARN服务(stop-yarn.sh && start-yarn.sh)使策略生效。

5. 监控与调试:确保调度正常

  • 查看YARN任务状态:通过YARN ResourceManager Web界面(http://<resourcemanager-ip>:8088)监控任务进度、资源使用情况;或使用命令行工具(yarn application -list查看所有任务,yarn application -status <app_id>查看详情)。
  • 查看Cron日志:通过tail -f /var/log/syslog查看Cron执行日志,排查定时任务未执行的原因(如脚本权限问题、环境变量未设置)。
  • 查看Oozie日志:Oozie的日志位于/var/log/oozie目录,可通过oozie job -info <job_id>查看工作流执行详情。

0