【问题标题】:A job's output to multiple files一个作业的输出到多个文件
【发布时间】:2015-04-14 06:19:48
【问题描述】:

我有一个正在运行的 map 和 reduce 作业。我想将一些数据输出到一个文件,并在工作中将一些数据输出到另一个文件。怎么可能实现。请帮助我,因为我是 Hadoop map reduce 的新手。谁能举个例子?

【问题讨论】:

标签: hadoop mapreduce hadoop-streaming


【解决方案1】:

有一个名为MultipleOutputFormatOutputFormat 类可以用来代替默认 TextOutputFormat

documentation中所述:

这个抽象类扩展了 FileOutputFormat,允许将输出数据写入不同的输出文件。这个类有三个基本用例。案例一:这个类用于至少有一个reducer的map reduce作业。 reducer 想要根据实际的键将数据写入不同的文件。假设键(或值)对实际键(值)和实际键(值)的所需位置进行编码。案例二:此类仅用于地图作业。该作业希望使用一个输出文件名,该文件名要么是输入数据的输入文件名的一部分,要么是它的一些派生。案例三:此类仅用于地图作业。该作业希望使用取决于键和输入文件名的输出文件名。

由于这是一个抽象类,您需要使用它的一种实现,很可能是MultipleTextOutputFormat

使用不同于TextOutputFormatOutputFormat 的方式是在创建和配置作业时指定它:

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]));
...

希望对你有帮助。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2014-10-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多