Fork and Join Example
The following workflow definition example executes 4 Map-Reduce jobs in 3 steps, 1 job, 2 jobs in parallel and 1 job.
The output of the jobs in the previous step are use as input for the next jobs.
Required workflow job parameters:
jobtracker : JobTracker HOST:PORT
namenode : NameNode HOST:PORT
input : input directory
output : output directory
<workflow-app name='example-forkjoinwf' xmlns="uri:oozie:workflow:0.1">
<start to='firstjob' />
<action name="firstjob">
<map-reduce>
<job-tracker>${jobtracker}</job-tracker>
<name-node>${namenode}</name-node>
<configuration>
<property>
<name>mapred.mapper.class</name>
<value>org.apache.hadoop.example.IdMapper</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.apache.hadoop.example.IdReducer</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>${input}</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>/usr/foo/${wf:id()}/temp1</value>
</property>
</configuration>
</map-reduce>
<ok to="fork" />
<error to="kill" />
</action>
<fork name='fork'>
<path start='secondjob' />
<path start='thirdjob' />
</fork>
<action name="secondjob">
<map-reduce>
<job-tracker>${jobtracker}</job-tracker>
<name-node>${namenode}</name-node>
<configuration>
<property>
<name>mapred.mapper.class</name>
<value>org.apache.hadoop.example.IdMapper</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.apache.hadoop.example.IdReducer</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>/usr/foo/${wf:id()}/temp1</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>/usr/foo/${wf:id()}/temp2</value>
</property>
</configuration>
</map-reduce>
<ok to="join" />
<error to="kill" />
</action>
<action name="thirdjob">
<map-reduce>
<job-tracker>${jobtracker}</job-tracker>
<name-node>${namenode}</name-node>
<configuration>
<property>
<name>mapred.mapper.class</name>
<value>org.apache.hadoop.example.IdMapper</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.apache.hadoop.example.IdReducer</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>/usr/foo/${wf:id()}/temp1</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>/usr/foo/${wf:id()}/temp3</value>
</property>
</configuration>
</map-reduce>
<ok to="join" />
<error to="kill" />
</action>
<join name='join' to='finalejob'/>
<action name="finaljob">
<map-reduce>
<job-tracker>${jobtracker}</job-tracker>
<name-node>${namenode}</name-node>
<configuration>
<property>
<name>mapred.mapper.class</name>
<value>org.apache.hadoop.example.IdMapper</value>
</property>
<property>
<name>mapred.reducer.class</name>
<value>org.apache.hadoop.example.IdReducer</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>/usr/foo/${wf:id()}/temp2,/usr/foo/${wf:id()}/temp3
</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>${output}</value>
</property>
</configuration>
</map-reduce>
<ok to="end" />
<ok to="kill" />
</action>
<kill name="kill">
<message>Map/Reduce failed, error message[${wf:errorMessage()}]</message>
</kill>
<end name='end'/>
</workflow-app>
分享到:
相关推荐
【Oozie的安装与配置】是Hadoop生态系统中的一个重要环节,Oozie是一个工作流调度系统,用于管理和协调Hadoop集群上的各种作业,如MapReduce、Pig、Hive、Spark等。以下是对Oozie安装配置过程的详细解释: 1. **所...
Oozie工作流定义文件通常使用XML编写,其中包含一系列的行动和控制结构,如决策、循环等。Oozie支持多种作业类型,你可以创建复杂的工作流逻辑来自动化处理Hadoop集群上的任务。 总结,Oozie是一个强大的工作流管理...
Apache Oozie 是一个工作流调度系统,用于管理 Hadoop 生态系统中的作业。它能够协调 Hadoop 相关的作业,如 MapReduce、Pig、Hive 和 Sqoop,以及外部系统如 Java 作业或命令行程序。Oozie 提供了一个用户友好的 ...
- 通过命令行和图形化界面操作Oozie工作流。 - 工作流定义了Hadoop作业的执行顺序,一旦启动,就会按既定顺序执行,直到完成。 - 需要修改job.properties文件,配置任务属性,如执行环境、时间安排等。 - 代理...
- **复杂的任务调度**:Hadoop领域的常见工作流调度器有Oozie、Azkaban、Cascading等。 ##### 1.4 各种调度工具特性对比 不同工作流调度工具的特点各异,选择适合自身需求的工具非常重要。以下是一些常见的Hadoop...
在压缩包中的代码文件,可能是各个章节的示例程序,涵盖了Hadoop的安装配置、数据输入输出、MapReduce编程模型、Hadoop流(Hadoop Streaming)、Hive数据仓库、Pig脚本语言、HBase分布式数据库、Oozie工作流管理、...
Azkaban是一款开源的工作流调度系统,主要用于大数据处理任务的管理和执行。在大数据环境中,由于数据处理往往涉及多个...然而,如果项目需要更复杂的工作流管理和高级特性,可能需要考虑像Oozie这样的重量级调度系统。
- Oozie:工作流管理系统,调度Hadoop作业和工作流程。 4. 示例代码实践 - 在本地模式下运行:这适用于初步测试和调试,所有Hadoop进程都在单个节点上运行。 - 在伪分布式模式下运行:模拟分布式环境,但所有...
相较于其他工作流调度系统,如Oozie,Azkaban在某些方面如事件通知和灵活性上具有优势。 Azkaban的架构由三个主要部分组成:AzkabanWebServer负责用户认证、项目管理、定时执行和进度跟踪,AzkabanExecutorServer则...
7. **Hadoop生态工具**:Hadoop生态系统还包括诸如Sqoop(用于数据导入导出)、Flume(日志收集)和Oozie(工作流管理)等工具。示例会演示如何利用这些工具提高数据处理的效率和自动化程度。 通过研究这些示例代码...
6. **其他组件**:除了上述组件,源码可能还涉及Zookeeper(协调服务)、Oozie(工作流调度器)和Sqoop(数据导入导出工具)等Hadoop生态系统的其他组件。 通过这些源码,读者可以学习到如何配置Hadoop环境,编写...
除了数据存储与处理,本书还介绍了如何利用工作流编排和调度工具(例如Apache Oozie)来自动化Hadoop生态系统中的任务调度和工作流管理。Apache Oozie是一个用于管理Hadoop作业的工作流调度系统,能够方便地组织多个...
- **Oozie**:是一个工作流调度系统,用于管理和控制Hadoop上的各种作业。 - **Avro**:是一个数据序列化系统,用于高效地处理数据的序列化和反序列化。 - **Cassandra**:是一个分布式NoSQL数据库系统,能够处理...
Azkaban是一款流行的大数据工作流管理工具,用于协调和执行复杂的作业流程。在Azkaban中,作业(Job)可以被定义为不同类型的插件(plugin),以便处理各种任务,如执行Linux命令、Java程序、Hadoop MapReduce作业、...
Hadoop之上还有许多应用组件,如Pig、Zookeeper、Hive、HBase、Oozie和Mahout,它们分别提供了数据处理的便利性、系统协调、SQL查询能力、随机实时读写、工作流管理和机器学习功能。这些工具进一步增强了Intel ...
本章通过天气数据集的例子介绍了如何使用Unix工具和Hadoop进行数据分析,同时讲解了MapReduce在Java中的实现,以及如何进行任务的伸缩性处理、数据流、合并器函数等高级话题。此外,还涉及了使用Hadoop Streaming...
Oozie是一个工作流调度系统,用于管理和调度Hadoop作业。 综上所述,Hadoop作为一个成熟的大数据处理平台,它不仅仅包含了一个分布式文件系统和一个大数据处理模型,还有着一个非常丰富的技术生态。这使得Hadoop...