当我们在处理mr问题的时候,有时候需求过于复杂,通过一个简单的mr无法达到目的,我们该怎么办呢?
答案是采取JobControl,直接上代码。
/** * job2 依赖于 job1 * @param job1 * @param job2 * @param chainName * @return * @throws IOException */ public static int handleJobChain(Job job1 ,Job job2, String chainName) throws IOException{ ControlledJob controlledJob1 = new ControlledJob(job1.getConfiguration()); controlledJob1.setJob(job1); ControlledJob controlledJob2 = new ControlledJob(job2.getConfiguration()); controlledJob2.setJob(job2); controlledJob2.addDependingJob(controlledJob1); JobControl jc = new JobControl(chainName); jc.addJob(controlledJob1); jc.addJob(controlledJob2); Thread jcThread = new Thread(jc); jcThread.start(); while(true){ if(jc.allFinished()){ System.out.println(jc.getSuccessfulJobList()); jc.stop(); return 0; } if(jc.getFailedJobList().size() > 0){ System.out.println(jc.getFailedJobList()); jc.stop(); return 1; } } }
要注意的地方就是hadoop的JobControl类实现了线程Runnable接口。我们需要实例化一个线程来让它启动。直接调用JobControl的run()方法,线程将无法结束。
相关推荐
总结来说,MapReduce工作流是Hadoop中处理多阶段数据处理任务的重要工具,通过`JobControl` 和`ControlledJob` ,可以管理和协调一系列相互依赖的MapReduce作业,确保它们按照正确的顺序和条件执行。这对于实现复杂...
- **JobControl**:JobControl 提供了一组用于管理多个作业的工具。 - **数据压缩**:为了节省存储空间和网络带宽,Hadoop 支持多种压缩算法,可以在作业的不同阶段启用压缩功能。 #### 例子:WordCount v1.0 - **...
1.org.apache.hadoop.mapred(旧版MapReduceAPI):( 1).jobcontrol(job作业直接控制类)(2 ).join :(作业作业中用于模仿数据连接处理工具)(3).lib(MapReduce所依赖的工具方法)| ----(1).aggregate...
- **Action Node**:执行实际任务,如MapReduce Job Node、Pig Action Node、Hive Action Node等。 - **Control Node**:控制流程的走向,如Start Node、End Node、Decision Node、Fork Node和Join Node。 理解...
1. **控制流节点(Control Flow Nodes)**:这些节点主要在工作流的开始和结束处使用,如`start`、`end`和`kill`节点。`decision`节点根据条件控制流程走向,`fork`和`join`节点则用于任务的分支和合并。 2. **动作...
- **编译与构建**:使用Maven进行项目管理和构建,开发者可以通过修改pom.xml文件配置依赖和构建参数。 - **核心类库**:如`org.apache.hadoop.fs.FileSystem`、`org.apache.hadoop.mapreduce.Job`等,提供了与...
2. Bean定义:Spring Hadoop将Hadoop的类,如FileSystem、Configuration、Job等,作为Spring的Bean进行管理,使得开发者可以方便地注入和使用。 3. MapReduce支持:Spring Hadoop提供了MapReduce作业的抽象,包括...