gpt4 book ai didi

hadoop - 使用 JobControl Hadoop 的复杂作业

转载 作者:可可西里 更新时间:2023-11-01 16:11:19 26 4
gpt4 key购买 nike

是否有一种使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com