controlledjob 实现
ControlledJob是一个MapReduce类,可用于协调和控制多个Job之间的依赖关系。以下是使用ControlledJob实现多个MapReduce任务的示例:
// 创建Configuration对象,设置相关参数 Configuration conf = new Configuration(); // 创建Job对象,设置相关参数 Job job1 = Job.getInstance(conf, "Job1"); // 设置Job1的输入路径、Mapper、Reducer等参数 Job job2 = Job.getInstance(conf, "Job2"); // 设置Job2的输入路径、Mapper、Reducer等参数 // 创建两个ControlledJob对象,将Job1和Job2分别传入 ControlledJob cjob1 = new ControlledJob(job1.getConfiguration()); cjob1.setJob(job1); ControlledJob cjob2 = new ControlledJob(job2.getConfiguration()); cjob2.setJob(job2); // 设置Job2的输入路径依赖于Job1的输出路径 cjob2.addDependingJob(cjob1); // 创建JobControl对象,并将cjob1和cjob2传入 JobControl jobCtrl = new JobControl("MyJob"); jobCtrl.addJob(cjob1); jobCtrl.addJob(cjob2); // 启动JobControl对象,开始执行任务 Thread jobCtrlThread = new Thread(jobCtrl); jobCtrlThread.start(); while (!jobCtrl.allFinished()) { try { //监控进度。查看上一篇文章 Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } } System.exit(0);
启动了一个新的线程来执行
JobControl
对象,并在等待所有任务完成时退出程序。通过使用
ControlledJob
,我们可以更加灵活地协调和控制多个MapReduce任务的执行顺序和依赖关系。