hadoop - formato orc
Hadoop: ¿Cómo dar salida a diferentes tipos de formato en el mismo trabajo? (1)
Así que tal vez como solución alternativa, intente configurar el outputCompressorClass correcto directamente en la configuración
context.getConfiguration().setOutputCompressorClass(GzipCodec.class);
justo antes de su llamada de escritura a cada uno de los resultados. Parece que cualquier parámetro de configuración de formato de salida distinto de la clase de clave, la clase de valor y la ruta de salida no son manejados bien por MultipleOutputs y es posible que tengamos que escribir un poco de código para compensar esa supervisión.
Quiero lzo
formatos gzip
y lzo
al mismo tiempo en un trabajo.
Usé MultipleOutputs
, y agregué dos salidas nombradas como esta:
MultipleOutputs.addNamedOutput(job, "LzoOutput", GBKTextOutputFormat.class, Text.class, Text.class);
GBKTextOutputFormat.setOutputCompressorClass(job, LzoCodec.class);
MultipleOutputs.addNamedOutput(job, "GzOutput", TextOutputFormat.class, Text.class, Text.class);
TextOutputFormat.setOutputCompressorClass(job, GzipCodec.class);
( GBKTextOutputFormat
aquí está escrito por mí mismo que se extiende FileOutputFormat
)
Se usan en un reductor como:
multipleOutputs.write("LzoOutput", NullWritable.get(), value, "/user/hadoop/lzo/"+key.toString());
multipleOutputs.write("GzOutput", NullWritable.get(), value, "/user/hadoop/gzip/"+key.toString());
El resultado es:
Puedo obtener resultados en los dos caminos, pero ambos están en formato gzip
.
¿Puede ayudarme alguien? ¡Gracias!
=============================================== ========================
Más:
Acabo de ver el código fuente de setOutputCompressorClass
en FileOutputFormat
, en el que conf.setClass("mapred.output.compression.codec", codecClass, CompressionCodec.class);
Parece que mapred.output.compression.codec en la configuración se restablecerá cuando se llame a setOutputCompressorClass.
Entonces, ¿el formato de compresión real es el que configuramos al fin, y no podemos establecer dos formatos de compresión diferentes en el mismo trabajo? O hay algo más ignorado?