我正在尝试运行以下项目来对数据集进行排序。
但是,当我执行命令:Hadoop jar xx.jar /inputdir /output dir
时,我在终端上得到以下错误:
org.apache.hadoop.mapred.InvalidJobConfException: Output directory not set.
在项目的自述文件中提到:
hadoop jar mrss-0.1.jar demo.SsJob -Dmapred.input.dir=data-stock -Dmapred.output.dir=result-stock
以下是项目链接:
https://vangjee.wordpress.com/2012/03/20/secondary-sorting-aka-sorting-values-in-hadoops-mapreduce-programming-paradigm/#comment-2342
我知道这很尴尬。。。但是你需要在-D之后提供一个空格。I.e"-Dmapred.output.dir"应指定为"-D mapred.out.dir"。
之所以会发生这种情况,是因为-D配置传递在Hadoop中无法像在普通jvm配置中那样工作。
在hadoop权威指南中有更多关于这方面的细节。
但你的问题是什么?空间就是解决方案。
您需要为从输入路径读取的Input格式和向输出路径写入的Outputformat添加参数。以下是关于如何提交作业的示例:
// Create a new Job
Job job = Job.getInstance();
job.setJarByClass(MyJob.class);
// Specify various job-specific parameters
job.setJobName("myjob");
job.setInputPath(new Path("in"));
job.setOutputPath(new Path("out"));
job.setMapperClass(MyJob.MyMapper.class);
job.setReducerClass(MyJob.MyReducer.class);
// Submit the job, then poll for progress until the job is complete
job.waitForCompletion(true);
或者,您可以在执行jar时通过在命令行中使用-D选项传递参数来传递此信息。