2

我有一个使用 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 的键值。我该如何修改它以适应动态文件命名?

4

1 回答 1

1

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

  • 使用仅 Map 作业(零减少任务)
  • 有一个命名的多输出配置
  • 在将map()您的键值用于基本输出路径的过程中AvroMultipleOutputs.write(String namedOutput, Object key, Object value, String baseOutputPath)
于 2013-06-06T21:00:40.057 回答