【发布时间】:2015-04-14 06:19:48
【问题描述】:
我有一个正在运行的 map 和 reduce 作业。我想将一些数据输出到一个文件,并在工作中将一些数据输出到另一个文件。怎么可能实现。请帮助我,因为我是 Hadoop map reduce 的新手。谁能举个例子?
【问题讨论】:
标签: hadoop mapreduce hadoop-streaming
我有一个正在运行的 map 和 reduce 作业。我想将一些数据输出到一个文件,并在工作中将一些数据输出到另一个文件。怎么可能实现。请帮助我,因为我是 Hadoop map reduce 的新手。谁能举个例子?
【问题讨论】:
标签: hadoop mapreduce hadoop-streaming
有一个名为MultipleOutputFormat 的OutputFormat 类可以用来代替默认 TextOutputFormat。
如documentation中所述:
这个抽象类扩展了 FileOutputFormat,允许将输出数据写入不同的输出文件。这个类有三个基本用例。案例一:这个类用于至少有一个reducer的map reduce作业。 reducer 想要根据实际的键将数据写入不同的文件。假设键(或值)对实际键(值)和实际键(值)的所需位置进行编码。案例二:此类仅用于地图作业。该作业希望使用一个输出文件名,该文件名要么是输入数据的输入文件名的一部分,要么是它的一些派生。案例三:此类仅用于地图作业。该作业希望使用取决于键和输入文件名的输出文件名。
由于这是一个抽象类,您需要使用它的一种实现,很可能是MultipleTextOutputFormat。
使用不同于TextOutputFormat 的OutputFormat 的方式是在创建和配置作业时指定它:
Configuration conf = this.getConf();
Job job = Job.getInstance(conf, "job-name");
job.setJarByClass(this.class);
job.setMapperClass(mapper.class);
job.setCombinerClass(combiner.class);
job.setReducerClass(reducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
job.setOutputFormatClass(MultipleTextOutputFormat.class);
MultipleTextOutputFotmat.setOutputPath(job, new Path(args[1]));
...
希望对你有帮助。
【讨论】: