Java 如何在MapReduce作业开始使用JobControl之前执行操作

Java 如何在MapReduce作业开始使用JobControl之前执行操作,java,hadoop,mapreduce,Java,Hadoop,Mapreduce,我有一个控制n个作业链的作业控制 for (int i = 0; i < iterations; i++) { Job eStep = EStepJob.createJob(config); Job mStep = MStepJob.createJob(config); emChain.add(new ControlledJob(eStep, getDeps(emChain))); emChain.add(new Co

我有一个控制n个作业链的作业控制

    for (int i = 0; i < iterations; i++) {
        Job eStep = EStepJob.createJob(config);
        Job mStep = MStepJob.createJob(config);
        emChain.add(new ControlledJob(eStep, getDeps(emChain)));
        emChain.add(new ControlledJob(mStep, getDeps(emChain)));
    }
    jobControl.addJobCollection(emChain);

还有什么更合适的方法吗

初始化作业时,可以将输出存储到临时目录中。 作业完成后,可以删除临时目录

然后您可以检查输出是否需要提交?如果是,则可以使用OutputCommitter提交输出

请查看以下链接:

您可以使用相同的方法。它是在任何节点上启动任何映射任务之前执行的方法。 我相信您在代码中初始化文件系统时使用的是HDFS

无论如何,代码应该以同样的方式工作。但是它执行的次数将等于生成的映射程序任务的次数,而不是每个映射程序任务执行的次数

        public void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        FileSystem fs = FileSystem.get(context.getConfiguration());
        if (fs.exists(new Path(context.getConfiguration().get(
                AR_PROBS_OUTPUT)))) {
            fs.delete(
                    new Path(context.getConfiguration()
                            .get(AR_PROBS_OUTPUT)), true);
        }