hadoop - 使用 JobControl Hadoop 的复杂作业

标签 hadoop

是否有一种使用 JobControl 指定一系列依赖作业的优雅方法?

还包括一些循环,并且由于有许多顺序作业 (8),如果将所有这些都放在一个驱动程序类中,将它们全部添加到作业控制中,将会造成相当大的困惑。

怎么做?

最佳答案

Map1 -> Reduce1 -> Map2 -> Reduce2 -> Map3...

您可以通过编写多个驱动程序方法,以这种方式轻松地将作业链接在一起,每个方法一个。调用第一个驱动程序方法,它使用 JobClient.runJob() 来运行作业并等待它完成。该作业完成后,调用下一个驱动程序方法,该方法创建一个新的 JobConf 对象,引用 Mapper 和 Reducer 等的不同实例。链中的第一个作业应将其输出写入一个路径,然后用作输入第二份工作的路径。可以针对需要完成的作业重复此过程以获得完整的问题解决方案

Job 将 JobConf 对象作为其构造函数参数。作业可以通过使用 addDependingJob() 方法相互依赖。代码:

 x.addDependingJob(y)

表示作业 x 在 y 成功完成之前无法开始。已经启动的作业不能添加依赖信息。给定一组作业,这些作业可以传递给 JobControl 类的一个实例。 JobControl 可以通过 addJob() 方法接收单个作业,或通过 addJobs() 接收作业集合

例如:- 如果我们有三个工作 A、B 和 C,顺序是 A -> B -> C

ControlledJob AJob= new ControlledJob(JobConf for A);
ControlledJob BJob= new ControlledJob(JobConf for B);
BJob.addDependingJob(AJob);
ControlledJob CJob= new ControlledJob(JobConf for C);
CJob.addDependingJob(BJob);

JobControl jControl = newJobControl("Name");
jControl.addJob(AJob);
jControl.addJob(BJob);
jControl.addJob(CJob);

Thread runJControl = new Thread(jControl);
runJControl.start();
while (!jControl.allFinished()) {
code = jControl.getFailedJobList().size() == 0 ? 0 : 1;
Thread.sleep(1000);
}
System.exit(1);

我们可以有单独的 getter 来获取每个作业的 JobConf,其中包含作业的所有信息。 getter 的示例代码如下:-

public static Configuration getAJobConf(Configuration conf, Path ip, Path op)throws IOException {
        final Job AJob = new Job(conf, "name");

        AJob.setJarByClass(Driver.class);

        AJob.setInputFormatClass(InputFormat.class);
        TextInputFormat.addInputPath(AJob, ip);

        TextOutputFormat.setOutputPath(AJob, op);
        AJob.setOutputFormatClass(tOutputFormat.class);

        AJob.setMapperClass(Mapper.class);
        AJob.setReducerClass(Reducer.class);
        AJob.setNumReduceTasks(1);

        AJob.setMapOutputKeyClass(NullWritable.class);
        AJob.setMapOutputValueClass(Text.class);

        AJob.setOutputKeyClass(NullWritable.class);
        AJob.setOutputValueClass(Text.class);
        return AJob.getConfiguration();
    }

关于hadoop - 使用 JobControl Hadoop 的复杂作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220580/

相关文章:

ubuntu - hadoop重新启动后没有停止dfs无法工作

mysql - RDBMS MySQL 中的 sqoop 导出更新表记录

hadoop - 我们如何比较本地文件和 hdfs 文件的一致性

java - 在单元测试中启动一个简单的独立 hadoop 服务器

java - Hadoop : Provide directory as input to MapReduce job

java - Hadoop HDFS 中 JSON 推文的情感分析

hadoop - 以受控方式拆分 SequenceFile - Hadoop

amazon-web-services - 在 Amazon EMR 中的何处查找 Hive UDF 的控制台输出

java - 无法分配请求的地址

performance - SQOOP导出命令VS DB2 LOAD CLIENT