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. 若失败则发送告警邮件
高级特性[编辑 | 编辑源代码]
条件逻辑[编辑 | 编辑源代码]
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表达式规则。例如每天运行的概率可表示为:
总结[编辑 | 编辑源代码]
Oozie是Hadoop生态中强大的调度工具,通过:
- 可视化的工作流设计
- 灵活的定时/数据触发
- 完善的错误处理机制
简化了复杂数据处理管道的管理。初学者可从简单工作流入手,逐步掌握协调器和Bundle的高级用法。