我想在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
我做错了什么?
仅映射作业仍然需要指定输出位置。正如错误所说,您没有指定此项。
我认为你的意思是你的工作根本没有产出。Hadoop仍然希望您指定一个输出位置,尽管不需要编写任何内容。
您想要的是org.apache.hadoop.mapreduce.lib.output.NullOutputFormat
而不是org.apache.hadoop.mapred.lib.NullOutputFormat
,这是第二个错误所指示的,尽管它很微妙。