2011-09-19 16 views
7

Cuando pongo un archivo en HDFS, por ejemplo¿HDFS encripta o comprime los datos mientras se almacena?

$ ./bin/hadoop/dfs -put /source/file input 
  • es el archivo comprimido mientras que el almacenamiento?
  • ¿Está el archivo cifrado mientras se almacena? ¿Hay alguna configuración que podamos especificar para cambiar si está encriptada o no?
+0

¿Sabe usted si la opción "dfs.image.compress" debe comprimir archivos mientras que el almacenamiento? – spektom

Respuesta

8

There no hay compresión implícita en HDFS. En otras palabras, si desea comprimir sus datos, debe escribirlos de esa manera. Si planea escribir trabajos de reducción de mapas para procesar los datos comprimidos, querrá usar un formato de compresión divisible.

Hadoop puede procesar archivos comprimidos y aquí hay un buen article en él. Además, la salida MR intermedia y final puede ser compressed.

Hay un JIRA en 'Compresión transparente en HDFS', pero no veo mucho progreso en él.

No creo que haya una API separada para el cifrado, aunque también puede usar un códec de compresión para el cifrado/descifrado. Here son más detalles sobre cifrado y HDFS.

-1

Recientemente configuré la compresión en un clúster. Las otras publicaciones tienen enlaces útiles, pero el código real que querrá que funcione la compresión LZO está aquí: https://github.com/kevinweil/hadoop-lzo.

Puede utilizar la compresión GZIP, la compresión BZIP2 y la compresión Unix de inmediato. Simplemente cargue un archivo en uno de esos formatos. Al usar el archivo como entrada para un trabajo, deberá especificar que el archivo esté comprimido, así como el CODEC apropiado. Aquí hay un ejemplo de compresión LZO.

-jobconf mapred.output.compress=true 
    -jobconf mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec 

¿Por qué estoy en proceso de compresión de LZO? La referencia cloudera article de Praveen entra en esto. La compresión LZO es una compresión divisible (a diferencia de GZIP, por ejemplo). Esto significa que un solo archivo se puede dividir en trozos para entregarlo a un mapeador. Sin un archivo comprimible dividible, un solo mapeador recibirá el archivo completo. Esto puede hacer que tengas demasiados mapeadores y que muevas demasiados datos alrededor de tu red.

BZIP2 también es divisible. También tiene una compresión más alta que LZO. Sin embargo, es muy lento. LZO tiene una relación de compresión peor que GZIP. Sin embargo, está optimizado para ser extremely fast. De hecho, puede incluso aumentar el rendimiento de su trabajo al minimizar la E/S del disco.

Lleva un poco de trabajo configurarlo, y es un poco difícil de usar, pero vale la pena (el cifrado transparente sería increíble). Una vez más, los pasos son:

  1. Instalar lzo y lzop (utilidad de línea de comandos)
  2. Instalar hadoop-lzo
  3. Subir un archivo comprimido con lzop.
  4. Indexe el archivo como lo describe el wiki de hadoop-lzo (el índice permite dividirlo).
  5. ejecutar su trabajo (con la mapred.output.compress parámetros adecuados y mapred.output.compression.code)
+0

La consulta original fue "dfs put" comprimirá y encriptará el archivo de forma transparente. No estaba relacionado con MR. HDFS se puede usar para otras cosas. Con la renovación de MR que viene con la versión 0.23 de Hadoop, otros marcos pueden conectarse fácilmente a Hadoop. –

Cuestiones relacionadas