【问题标题】:How do I run a hadoop jar from another program?如何从另一个程序运行 hadoop jar?
【发布时间】:2016-03-01 22:16:58
【问题描述】:

我有以下需要实现的功能:

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 运行作业。

附:我是hadoop的新手,我可能会假设很多事情。

【问题讨论】:

    标签: java hadoop jobs


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-12-10
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-17
        • 2017-08-18
        • 1970-01-01
        相关资源
        最近更新 更多