При использовании Avro в качестве выходного формата преобразователя в задаче hadoop MR, как я могу установить кодек сжатия?
Старый "mapred" API предоставил этот метод:
org.apache.avro.mapred.AvroJob.setOutputCodec(JobConf job, String codec)
Однако, это отсутствует в более новом API mapreduce .Как я могу установить кодек в более новом API "mapreduce"?
Я наивно пытался использовать настройку задания для установки кодека, но безуспешно:
public int run(String[] args) throws Exception {
[..]
Job job = new Job(getConf());
job.setJarByClass(MapReduceExample.class);
job.setJobName("MRExample");
// hm .. this doesn't seem to do work, output still has "null" codec
job.getConfiguration().set(AvroJob.CONF_OUTPUT_CODEC,
CodecFactory.deflateCodec(6).toString());
job.setMapperClass(ExampleMapper.class);
[..]
AvroJob.setMapOutputKeySchema(job, Schema.create(Schema.Type.STRING));
AvroJob.setMapOutputValueSchema(job, Schema.create(Schema.Type.BYTES));
// here I was hoping to use something like
// AvroJob.setMapOutputCodec(job, "deflate")
[..]
return (job.waitForCompletion(true) ? 0 : 1);
}
Когда яоткройте получившееся авро с помощью python
>>> from avro.datafile import DataFileReader
>>> from avro.io import DatumReader
>>> av_fh = open("output/part-r-00000.avro", "rb")
>>> av_rd = DataFileReader(av_fh, DatumReader())
>>> av_rd.codec
'null'