使用AvroMultipleOutputs创建多个输出文件

时间:2013-04-05 16:06:23

标签: java hadoop mapreduce hdfs avro

我有一台使用AvroKeyOutput作为输出格式的Reducer。默认情况下,MapReduce会将我的所有键都写入单个输出文件。我想为每个键值写一个单独的输出文件。 Avro提供了AvroMultipleOutputs方法,但实例很少。 Apache AvroMultipleOutputs提供的那个,显示了在定义作业时如何预配置各种输出。示例显示:

伯:
AvroMultipleOutputs.addNamedOutput(job, "avro1", AvroOutputFormat.class, schema);
AvroMultipleOutputs.addNamedOutput(job, "avro2", AvroOutputFormat.class, null);

减速机:
amos = new AvroMultipleOutputs(conf);
amos.getCollector("avro1", reporter).collect(datum);
amos.getCollector("avro2", "A", reporter).collect(datum);
amos.getCollector("avro3", "B", reporter).collect(datum);

但是我不知道我需要多少文件或者它们的名字是什么,因为它基于我的reducer中的关键值。我如何修改它以适应动态文件命名?

1 个答案:

答案 0 :(得分:1)

您可以在这种情况下使用的策略:

  • 使用仅限地图的作业(零减少任务)
  • 具有单个命名的多输出配置
  • map()期间使用AvroMultipleOutputs.write(String namedOutput, Object key, Object value, String baseOutputPath)
  • 中基本输出路径的键值