Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从另一个程序运行hadoop jar?_Java_Hadoop_Jobs - Fatal编程技术网

Java 如何从另一个程序运行hadoop jar?

Java 如何从另一个程序运行hadoop jar?,java,hadoop,jobs,Java,Hadoop,Jobs,我需要实现以下功能: public void CreateMRJob(String jobInputLocation, String jobJarLocation); 这可能看起来很简单,而且是一个重复的问题,但我希望在单独的文件(wpmapreduce.java,如下所附)中执行作业的初始化,因为允许用户编辑其中的某些部分。以下是我在单独文件中初始化作业的意思: // WPMapReduce.java public class WPMapReduce { public static v

我需要实现以下功能:

public void CreateMRJob(String jobInputLocation, String jobJarLocation);
这可能看起来很简单,而且是一个重复的问题,但我希望在单独的文件(wpmapreduce.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运行作业


另外,我是hadoop新手,我可能会假设很多事情

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

我认为您不必使用main创建单独的类,您可以拥有一个MRSetup类,在该类中,您可以读取带有所需参数的配置(属性)文件并准备对象。 可以在MR Driver作业类中使用相同的对象