2011-04-06 13 views
23

Tengo un programa Java map-reduce en el que intento comprimir solo la salida del asignador pero no la salida del reductor. Pensé que esto sería posible estableciendo las siguientes propiedades en la instancia de Configuración como se detalla a continuación. Sin embargo, cuando ejecuto mi trabajo, la salida generada por el reductor todavía está comprimida ya que el archivo generado es: part-r-00000.gz. ¿Alguien ha comprimido con éxito los datos del asignador pero no el reductor? ¿Es eso posible?Hadoop, cómo comprimir la salida del asignador pero no la salida del reductor

// Comprimir salida asignador

conf.setBoolean("mapred.output.compress", true); 
conf.set("mapred.output.compression.type", CompressionType.BLOCK.toString()); 
conf.setClass("mapred.output.compression.codec", GzipCodec.class, CompressionCodec.class); 

Respuesta

21

Con MR2, ahora debemos fijar

conf.set("mapreduce.map.output.compress", true) 
conf.set("mapreduce.output.fileoutputformat.compress", false) 

Para más detalles, consulte: http://hadoop.apache.org/docs/stable/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml

+0

En caso de que alguien esté interesado en cómo funciona esto para avro, dado que avro solo admite snappy y deflate, esta configuración es la mejor. Los nombres finales de los archivos reducidos no cambiarán, sin embargo, observará que los tamaños de los archivos cambian debido a la compresión en el nivel de bloque interno. Más detalles aquí: http://www.quora.com/Can-avro-data-files-be-lzop-compressed-in-Hadoop –

+0

¿Está estableciendo estas configuraciones al agregar pasos a EMR? –

11

"compresión de salida" comprimirá su salida final. Para comprimir solo mapa-salidas, usar algo como esto:

conf.set("mapred.compress.map.output", "true") 
    conf.set("mapred.output.compression.type", "BLOCK"); 
    conf.set("mapred.map.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec"); 
+0

utilizando gzip como compresor no es una buena idea. El principal problema es que no es divisible. –

+6

¿Por qué? Pensé que la salida del mapeador no se divide, solo si se usa el reductor o el reductor de identidad, la salida puede dividirse. – Marcin

+0

Según tengo entendido, usar GZIP para comprimir los datos de entrada no es una buena idea. y la razón es que no es divisible. No hay problema para usar gzip para la salida del mapa. – root1982

2
  1. Es necesario establecer "mapred.compress.map.output" true.
  2. Opcionalmente puede elegir su códec de compresión estableciendo "mapred.map.output.compression.codec". NOTA1: la compresión de salida mapred nunca debe ser BLOQUE. Consulte la siguiente JIRA para obtener más información: https://issues.apache.org/jira/browse/HADOOP-1194 NOTA 2: GZIP y BZ2 consumen mucha CPU. Si tiene una red lenta y GZIP o BZ2 proporciona una mejor relación de compresión, puede justificar el gasto de ciclos de CPU. De lo contrario, considere el códec LZO o Snappy.
    NOTA 3: si desea utilizar la compresión de salida del mapa, considere instalar el códec nativo que se invoca a través de JNI y le ofrece un mejor rendimiento.
+0

Además de eso, ¿podemos simplemente comprimir los valores del asignador y no las claves? –

+0

Esa no es una opción. – root1982

52

mapred.compress.map.output: ¿Es la compresión de datos entre el asignador y el reductor. Si usa un códec rápido, lo más probable es que aumente la velocidad de lectura y reduzca la sobrecarga de la red. No te preocupes por escupir aquí. Estos archivos no están almacenados en hdfs. Son archivos temporales que existen solo para el trabajo de reducción de mapa.

mapred.map.output.compression.codec: Me gustaría utilizar ágil

mapred.output.compress: Este indicador booleano definirá es todo el mapa/reducir el trabajo entrega la información comprimida. Yo siempre pondría esto en verdad también. Velocidades de lectura/escritura más rápidas y menos espacio de disco utilizado.

mapred.output.compression.type: Yo uso el bloque. Esto hará que la compresión se pueda dividir incluso para todos los formatos de compresión (gzip, snappy y bzip2) simplemente asegúrate de estar usando un formato de archivo splitable como secuencia, RCFile o Avro.

mapred.output.compression.codec: este es el códec de compresión para el trabajo de mapa/reducir. Uso principalmente uno de los tres: Snappy (compresión más rápida r/w 2x-3x), gzip (compresión r normal w 5x-8x), bzip2 (compresión lenta r ​​/ w 8x-12x)

Recuerda también cuándo salida comprimida, que debido a la división de la compresión diferirá en base a su orden de clasificación. Cuanto más cerca estén los datos, mejor será la compresión.

+5

¿Cómo puedo saber si la salida del mapa realmente se comprimió? Al comparar los "bytes de salida del mapa" sin compresión y con compresión? Veo que los bytes de salida de mi mapa rondan los 91 GB. ¿Es un buen candidato para la compresión de salida del mapa? En general, ¿cómo encontraría buenos candidatos para la compresión de salida del mapa? ¿Son los "bytes de salida del mapa" un buen indicador? –

+1

hadoop 2. * versión ahora usa mapreduce. *. *, Lea mi respuesta debajo de – fengyun

+0

¿Puede por favor elaborar "hará la compresión divisible incluso para todos los formatos de compresión"? En mi experiencia, gz no es realmente divisible. Obtiene archivos almacenados en varios bloques, pero cuando los mapeadores los leen, solo se genera un mapeador por archivo. Esto significa que todos los bloques, excepto el primero, se captan a través de la red. – markob

1

Si utiliza la distribución de MapR para Hadoop, puede obtener los beneficios de la compresión sin todo el folderol con los códecs.

MapR se comprime de forma nativa en el nivel del sistema de archivos para que la aplicación no necesite saber ni preocuparse.La compresión se puede activar o desactivar en el nivel del directorio para que pueda comprimir las entradas, pero no las salidas o lo que quiera. En general, la compresión es tan rápida (utiliza un algoritmo similar al snappy de forma predeterminada) que la mayoría de las aplicaciones ven un aumento de rendimiento cuando se utiliza la compresión nativa. Si sus archivos ya están comprimidos, eso se detecta muy rápidamente y la compresión se desactiva automáticamente para que no vea una penalización allí.

Cuestiones relacionadas