我编写了一个使用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
// ...