使用AvroMultipleOutputs创建多个输出文件



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

JOB:
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中得到的键值。如何修改它以适应动态文件命名?

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

  • 使用Map-only作业(零reduce任务)
  • 有一个单一命名的多输出配置
  • map()期间使用您的键值作为AvroMultipleOutputs.write(String namedOutput, Object key, Object value, String baseOutputPath)
  • 中的基本输出路径

相关内容

  • 没有找到相关文章

最新更新