Hadoop Java程序始终以独立模式运行



我编写了一个使用Hadoop的Java程序。我使用"java-jarprog.jar"从命令行执行程序,可以看到它以独立模式运行。我可以判断,因为JobTracker和TaskTracker守护进程不需要运行就可以成功执行我的程序。如果我使用"hadoop-jarprog.jar"(关闭map/reduce守护进程)执行程序,它自然不会工作。

我希望我的java程序在伪分布式模式下执行,但我感觉它找不到配置文件。我尝试将它作为"java-cp/usr/hadoop-1.1/conf-jarprog.jar"执行,以便将它指向配置文件所在的位置,但仍然没有骰子。

我有一种感觉,类路径是错误的或什么的。我是一个笨蛋,所以任何帮助都很感激。谢谢,

mj

下面是我的作业的一个片段,它使用配置对象启动代码。

    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);

我使用"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
// ...

相关内容

  • 没有找到相关文章

最新更新