如何从其他程序运行hadoop jar?

时间:2015-11-27 17:04:47

标签: java hadoop jobs

我需要实现以下功能:

public void CreateMRJob(String jobInputLocation, String jobJarLocation);

这可能看起来相当简单并且是一个重复的问题,但我想在一个单独的文件(如下所附的WPMampReduce.java)中执行作业的初始化,因为用户可以编辑它的某些部分。当我说在单独的文件中初始化作业时,这就是我的意思:

// WPMapReduce.java
public class WPMapReduce {

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();

    Job job = Job.getInstance(conf, "WPMapReduce");

    job.setSpeculativeExecution(false);
    job.setReduceSpeculativeExecution(false);
    job.setJarByClass(WPMapReduce.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(Text.class);
    job.setNumReduceTasks(1);
    job.setMapperClass(Map.class);
    job.setReducerClass(Reduce.class);
    job.setSpeculativeExecution(false);
    job.setReduceSpeculativeExecution(false);
    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    job.waitForCompletion(true);
  }
}

我不确定如何将jar文件设置为要运行的作业,然后从另一个文件中的CreateMRJob函数运行作业。

P.S。我是hadoop的新手,我可能会做很多事情。

2 个答案:

答案 0 :(得分:1)

执行此操作的一种方法是使用java中的Runtime.exec()创建子进程以访问命令行(Linux中的终端或Windows中的mac或cmd)并设置参数并运行工作。输出文件可以存储数据,同时您可以创建管道以在作业运行时流式传输数据。

答案 1 :(得分:0)

我认为您不必使用main创建单独的类,您可以拥有MRSetup类,其中您可以读取包含所需参数的config(属性)文件并准备Object。 您可以在MR-Driver-Job类中使用相同的对象。

相关问题