Datos de compresión en hadoop

Los grandes volúmenes de datos que son realidades en un típico Hadoop compresión maquillaje despliegue una necesidad. La compresión de datos sin duda le ahorra una gran cantidad de espacio de almacenamiento y es seguro para acelerar el movimiento de los datos en todo el clúster. No es sorprendente que una serie de esquemas de compresión disponibles, llamados codecs, están ahí para que usted considere.

En una implementación de Hadoop, que está tratando (potencialmente) con un gran número bastante de nodos esclavos individuales, cada uno de los cuales tiene una serie de unidades de disco de gran tamaño. No es raro que un nodo esclavo individuo a tener más de 45 TB de espacio de almacenamiento en bruto para HDFS.

A pesar de que los nodos esclavos Hadoop están diseñados para ser de bajo costo, no son gratis, y con grandes volúmenes de datos que tienen una tendencia a crecer a un ritmo creciente, la compresión es una herramienta obvia para controlar los volúmenes de datos extremos.

En primer lugar, algunos términos básicos: A codec, que es una forma abreviada de compressor /diciembreompressor, es la tecnología (software o hardware, o ambos) para comprimir y descomprimir de datos es la implementación de un algoritmo de compresión / descompresión.

Usted necesita saber que algunos codecs apoyar algo que se llama compresión divisible y que codecs difieren tanto en la velocidad con la que pueden comprimir y descomprimir los datos y el grado en el que pueden comprimirlo.

Compresión divisible es un concepto importante en un contexto de Hadoop. La forma Hadoop funciona es que los archivos se dividen si son más grandes que ajuste de tamaño de bloque del archivo, y escisiones de archivos individuales se pueden procesar en paralelo por diferentes creadores de mapas.

Con la mayoría de los codecs, escisiones archivo de texto no pueden ser descomprimidos independientemente de otras divisiones del mismo archivo, por lo que los códecs se dice que son no-divisible, por lo que el procesamiento MapReduce se limita a un único asignador.

Debido a que el archivo puede ser descomprimido sólo como un todo y no como partes individuales basa en divisiones, no puede haber un procesamiento paralelo de un archivo de este tipo, y el rendimiento puede tener un gran éxito como una tarea espera un único asignador de procesar múltiples datos bloques que no se puede descomprimir de forma independiente.

Compresión divisible es sólo un factor para archivos de texto. Para los archivos binarios, códecs de compresión Hadoop comprimir los datos dentro de un contenedor binaria codificada, dependiendo del tipo de archivo (por ejemplo, un SequenceFile, Avro, o ProtocolBuffer).


Hablando de rendimiento, hay un costo (en términos de recursos de procesamiento y el tiempo) asociados a la compresión de los datos que se están escribiendo en el clúster Hadoop.

Con las computadoras, como en la vida, nada es gratis. Cuando la compresión de datos, que está intercambiando ciclos de procesamiento de espacio en disco. Y cuando se está leyendo esos datos, hay un costo asociado a la descompresión de los datos también. Asegúrese de sopesar las ventajas de ahorro de almacenamiento contra la sobrecarga de rendimiento adicional.

Si el archivo de entrada a un trabajo MapReduce contiene datos comprimidos, el tiempo que se necesita para leer los datos de HDFS se reduce y se mejora el rendimiento laboral. Los datos de entrada se descomprime automáticamente cuando está siendo leído por MapReduce.

La extensión de nombre de archivo de entrada determina que apoyó codec se utiliza para descomprimir automáticamente los datos. Por ejemplo, una extensión .gz identifica el archivo como un archivo comprimido con gzip.

También puede ser útil para comprimir la salida intermedia de la fase de mapa en el flujo de procesamiento MapReduce. Dado que la salida función de mapa se escribe en disco y se envía a través de la red para las tareas de reducir, comprimir la salida puede dar lugar a importantes mejoras de rendimiento.

Y si desea almacenar la salida MapReduce como archivos de la historia para un uso futuro, la compresión de estos datos puede reducir significativamente la cantidad de espacio necesario en HDFS.

Hay muchos diferentes algoritmos y herramientas de compresión, y sus características y fortalezas varían. La compensación es más común entre los ratios de compresión (el grado en que se comprime un archivo) y comprimir / descomprimir velocidades. El marco Hadoop es compatible con varios codecs. El marco transparente comprime y descomprime la mayoría de los formatos de archivos de entrada y de salida.

La siguiente lista identifica algunos codecs comunes que son compatibles con el marco Hadoop. Asegúrese de elegir el códec que más se acerque a las demandas de su caso de uso particular (por ejemplo, con las cargas de trabajo, donde la velocidad de procesamiento es importante elegir un códec con altas velocidades de descompresión):


  • Gzip: Una utilidad de compresión que fue adoptado por el proyecto GNU, Gzip (abreviatura de GNU zip) genera archivos comprimidos que tienen una extensión .gz. Usted puede utilizar el comando gunzip para descomprimir archivos creados por una serie de utilidades de compresión, incluyendo Gzip.

  • Bzip2: Desde el punto de vista de usabilidad, Bzip2 y Gzip son similares. Bzip2 genera una mejor relación de compresión que hace Gzip, pero es mucho más lento. De hecho, de todos los codecs de compresión disponibles en Hadoop, Bzip2 es, con mucho, el más lento.

    Si está configurando un archivo que usted raramente necesita consultar y el espacio es una prima alta, entonces tal vez sería Bzip2 ser digno de consideración.

  • Snappy: El códec Snappy de Google ofrece proporciones modestas de compresión, pero la compresión rápida y velocidades de descompresión. (De hecho, tiene las velocidades más rápidas de descompresión, lo que lo hace muy conveniente para los conjuntos de datos que pueden ser consultados a menudo.)

    El códec Snappy se integra en Hadoop común, un conjunto de utilidades comunes que soporta otros subproyectos Hadoop. Puede utilizar Snappy como un add-on para las versiones más recientes de Hadoop que aún no proporcionan apoyo Snappy códec.

  • LZO: Similar a Snappy, LZO (abreviatura de Lempel-Ziv-Oberhumer, el trío de científicos de la computación que subió con el algoritmo) proporciona proporciones modestas de compresión, pero la compresión rápida y velocidades de descompresión. LZO está licenciado bajo la Licencia Pública GNU (GPL).

    LZO compatible con la compresión divisible, que permite el procesamiento paralelo de las divisiones de archivos de texto comprimidos por sus trabajos de MapReduce. LZO necesita crear un índice cuando se comprime un archivo, ya que con los bloques de compresión de longitud variable, se requiere un índice de decirle al asignador donde con seguridad se puede dividir el archivo comprimido. LZO sólo es realmente conveniente si usted necesita para comprimir archivos de texto.

Hadoop Codecs
CodecExtensión de archivoDivisible?Grado de CompresiónVelocidad de Compresión
Gzip.gzSinMedioMedio
Bzip2.bz2AltoLento
Rápido.rápidoSinMedioRápido
LZO.lzoNo, a menos indexadosMedioRápido

Todos los algoritmos de compresión deben hacer concesiones entre el grado de compresión y la velocidad de compresión que pueden lograr. Los códecs que se muestran le proporcionan un cierto control sobre lo que el equilibrio entre la relación de compresión y la velocidad debe ser en tiempo de compresión.

Por ejemplo, Gzip le permite regular la velocidad de compresión mediante la especificación de un entero negativo (o palabra clave), donde -1 indica el nivel de compresión más rápida, y -9 indica el nivel de compresión más lento. El nivel de compresión predeterminado es -6.




» » » » Datos de compresión en hadoop