hadoopjava程序总是以独立模式运行

axr492tv  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(369)

我编写了一个使用hadoop的java程序。我使用“java-jarprog.jar”从命令行执行我的程序,我可以看到它在独立模式下运行。我可以说,因为jobtracker和tasktracker守护进程不需要运行,我的程序就可以成功执行。如果我使用“hadoopjarprog.jar”(关闭map/reduce守护进程)执行我的程序,它自然不起作用。
我想让我的java程序以伪分布式模式执行,但我感觉它找不到配置文件。我尝试将其作为“java-cp/usr/hadoop-1.1.1/conf-jarprog.jar”执行,以便将其指向配置文件所在的位置,但仍然没有骰子。
我觉得类路径有问题。我是个笨蛋,所以任何帮助都很感激。谢谢,
美赞臣
下面是我用配置对象启动作业的代码片段。

Configuration config = new Configuration();     
    Job job = new Job(config);
    job.setJobName("Test");
    job.setJarByClass(MyMapper.class);      

    job.setMapperClass(MyMapper.class);
    job.setReducerClass(MyReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    job.setMapOutputKeyClass(LongWritable.class);
    job.setMapOutputValueClass(Text.class);

    job.setInputFormatClass(MyInputFormat.class);

    FileInputFormat.addInputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName));
    FileOutputFormat.setOutputPath(job, new Path("hdfs://hadoop0.hq.net:54310/" + saFileName + "-output"));

    job.waitForCompletion(true);
liwlm1x9

liwlm1x91#

我使用“java-jarprog.jar”从命令行执行我的程序,我可以看到它在独立模式下运行。
这不是真的。这个 java -jar 命令用于运行独立的java应用程序。要运行hadoop作业,需要使用 hadoop jar 就像你说的那样。
在运行任何任务之前,需要在环境中安装hadoop。如果你还没有准备好,你可以按照这个职位或官方文件的步骤。您可以通过运行hadoop发行版提供的一些示例来验证设置:

bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'

如果上述命令成功运行,则可以尝试自己的任务。
编辑:您可以使用 Runtime.exec 调用 hadoop jar 具体如下:

Process p = Runtime.getRuntime().exec(cmd);
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = input.readLine();
while (line != null) {
  // process output of the task
  // ...
}
input.close();
// wait for the task complete
p.waitFor();
int ret = p.exitValue();
// process the task result
// ...

相关问题