为仅地图作业运行Hadoop Map Reduce时出错

时间:2013-07-17 21:29:22

标签: hadoop mapreduce

我想在Hadoop MapReduce中运行仅限地图的作业,这是我的代码:

    Configuration conf = new Configuration();
    Job job = new Job(conf);
    job.setJobName("import");

    job.setMapperClass(Map.class);//Custom Mapper
    job.setInputFormatClass(TextInputFormat.class);
    job.setNumReduceTasks(0);

    TextInputFormat.setInputPaths(job, new Path("/home/jonathan/input"));

但我收到错误:

13/07/17 18:22:48 ERROR security.UserGroupInformation: PriviledgedActionException
as: jonathan cause:org.apache.hadoop.mapred.InvalidJobConfException: 
Output directory not set. 
Exception in thread "main" org.apache.hadoop.mapred.InvalidJobConfException: 
 Output directory not set.

然后我试着用这个:

job.setOutputFormatClass(org.apache.hadoop.mapred.lib.NullOutputFormat.class);

但是它给了我一个编译错误:

java: method setOutputFormatClass in class org.apache.hadoop.mapreduce.Job 
  cannot be applied to given types;
  required: java.lang.Class<? extends org.apache.hadoop.mapreduce.OutputFormat>
  found: java.lang.Class<org.apache.hadoop.mapred.lib.NullOutputFormat>
  reason: actual argument java.lang.Class
  <org.apache.hadoop.mapred.lib.NullOutputFormat> cannot be converted to 
  java.lang.Class<? extends org.apache.hadoop.mapreduce.OutputFormat> 
  by method invocation conversion

我做错了什么?

1 个答案:

答案 0 :(得分:6)

仅限地图的作业仍需要指定输出位置。正如错误所说,你没有指明这一点。

我认为你的意思是你的工作完全没有输出。 Hadoop仍然希望您指定输出位置,但无需编写任何内容。

你希望org.apache.hadoop.mapreduce.lib.output.NullOutputFormat不是org.apache.hadoop.mapred.lib.NullOutputFormat,这是第二个错误所表明的,虽然它很微妙。