0

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

我希望我的 java 程序以伪分布式模式执行,但我感觉它找不到配置文件。我尝试将它作为“java -cp /usr/hadoop-1.1.1/conf -jar prog.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);
4

1 回答 1

2

我使用“java -jar prog.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
// ...
于 2013-02-15T15:29:48.663 回答