对Mapreduce数据集进行排序



我正在尝试运行以下项目来对数据集进行排序。

但是,当我执行命令: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选项传递参数来传递此信息。

最新更新