跳转到内容

Oozie工作流调度

来自代码酷

Oozie工作流调度[编辑 | 编辑源代码]

Oozie是Apache Hadoop生态系统中的一个工作流调度系统,用于管理和协调Hadoop作业的执行。它允许用户将多个Hadoop作业(如MapReduce、Pig、Hive等)组合成一个逻辑工作流,并按计划或触发条件自动运行。Oozie特别适合处理复杂的依赖关系和定时任务。

核心概念[编辑 | 编辑源代码]

Oozie的核心组件包括:

  • 工作流(Workflow):定义一系列动作(Actions)及其依赖关系的有向无环图(DAG)。
  • 协调器(Coordinator):基于时间或数据可用性触发工作流。
  • Bundle:管理多个协调器作业的集合。

工作流定义[编辑 | 编辑源代码]

Oozie工作流使用XML文件(通常命名为`workflow.xml`)描述。以下是一个简单的工作流示例,包含一个MapReduce作业和一个Hive作业:

<workflow-app name="sample-workflow" xmlns="uri:oozie:workflow:0.5">
    <start to="mr-node"/>
    <action name="mr-node">
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>org.myorg.SampleMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>org.myorg.SampleReducer</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to="hive-node"/>
        <error to="fail"/>
    </action>
    <action name="hive-node">
        <hive xmlns="uri:oozie:hive-action:0.2">
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>sample_script.hql</script>
        </hive>
        <ok to="end"/>
        <error to="fail"/>
    </action>
    <kill name="fail">
        <message>Workflow failed</message>
    </kill>
    <end name="end"/>
</workflow-app>

协调器示例[编辑 | 编辑源代码]

协调器通过`coordinator.xml`定义定时或数据触发规则:

<coordinator-app name="sample-coord" frequency="1440" start="2023-01-01T00:00Z" end="2023-12-31T00:00Z" timezone="UTC" xmlns="uri:oozie:coordinator:0.4">
    <action>
        <workflow>
            <app-path>hdfs://path/to/workflow.xml</app-path>
        </workflow>
    </action>
</coordinator-app>

实际案例[编辑 | 编辑源代码]

电商日志分析流水线[编辑 | 编辑源代码]

某电商平台使用Oozie调度每日日志处理流程: 1. 每日凌晨1点触发(协调器) 2. 运行MapReduce作业清洗日志 3. 启动Hive作业生成用户行为报表 4. 若失败则发送告警邮件

graph LR A[协调器: 定时触发] --> B[MapReduce日志清洗] B --> C{Hive报表生成} C -->|成功| D[结束] C -->|失败| E[邮件告警]

高级特性[编辑 | 编辑源代码]

条件逻辑[编辑 | 编辑源代码]

Oozie支持基于EL(Expression Language)的条件分支:

<decision name="check-size">
    <switch>
        <case to="process-large">${fs:fileSize('/data/input') gt 1000000}</case>
        <default to="process-small"/>
    </switch>
</decision>

错误处理[编辑 | 编辑源代码]

可配置重试策略:

<action name="retry-example" retry-max="3" retry-interval="10">
    <shell xmlns="uri:oozie:shell-action:0.3">
        <exec>retry_script.sh</exec>
    </shell>
</action>

数学表达[编辑 | 编辑源代码]

Oozie的调度频率遵循CRON表达式规则。例如每天运行的概率可表示为: P(run daily)=1tmod86400=0

总结[编辑 | 编辑源代码]

Oozie是Hadoop生态中强大的调度工具,通过:

  • 可视化的工作流设计
  • 灵活的定时/数据触发
  • 完善的错误处理机制

简化了复杂数据处理管道的管理。初学者可从简单工作流入手,逐步掌握协调器和Bundle的高级用法。