Articles

Codificación, Compresión, Parquet y Hive

En el cluster CDH 5.14, estaba haciendo una comparación de tamaño para inserciones hechas con hive Vs impala a una tabla con formato de archivo parquet. Tenía la impresión de que, al ser ambos formatos de archivo iguales, deberían tener un comportamiento similar (con el códec de compresión por defecto) para dar como resultado aproximadamente el mismo tamaño. Sin embargo, me di cuenta de que el archivo de parquet escrito por Impala es mucho más pequeño que el escrito por Hive para los mismos datos de entrada. Es decir, la diferencia específica entre la codificación y la compresión y cómo hive opera en esto.

Lo que creo en la diferencia general entre la codificación y la compresión es –

  • Codificación: Es más a nivel de aplicación donde se cambia la representación de los datos. La codificación también puede minimizar el uso de espacio que nos puede dar un tipo de compresión.
  • Compresión : En general es la Técnica para reducir el almacenamiento de los datos dados en bytes independientemente de los datos de subrayado ya está codificado o no.
  • Lo anterior se confirma con la siguiente observación.

    • Creé una colmena con formato de archivo parquet.
    • Inserté algunos datos que habían creado aproximadamente 1GB de archivos parquet como parte de la inserción.
    • Para ver el archivo parquet, copié el archivo de hdfs a local para volcarlo (sólo para notar – hay manera de volcar desde hdfs también). Entonces validado utilizando la utilidad parquet-meta que puede volcar el archivo de parquet.
    • …/parquet-meta <nombre del archivo>

    Extracto del parquet-meta dump
    • Donde muestra, cada columna está codificada con varias técnicas de codificación (valor de ENC) como Run length, Bit packed etc (no vamos a discutir la codificación en sí). Sin embargo, el archivo de parquet escrito en hive por defecto no emplea ninguna compresión. El tamaño del archivo era de 1GB.

    A continuación

    • Tabla truncada utilizada en la prueba anterior.
    • En la línea de comandos de hive(beeline) establezca la siguiente configuración que establecerá explícitamente el códec de compresión y forzará a hive a comprimir el archivo de parquet escrito en hive.

    SET hive.exec.compress.output=true;

    SET parquet.compression=SNAPPY

    • Inserta la misma cantidad de datos. Esta vez ha creado aproximadamente 350 MB de archivos parquet.
    • De nuevo copiado el archivo de hdfs a local para volcarlo usando la utilidad parquet-meta.

    Extracto del parquet-meta dump
    • Aquí podemos ver que, muestra que el archivo está comprimido con SNAPPY junto con la codificación. Cuando habilitamos explícitamente la compresión, habrá una reducción sustancial en el tamaño del archivo de parquet para la misma cantidad de datos como resultado de la compresión.

    Así que la observación es que la codificación y la compresión es diferente y se puede utilizar por separado o juntos. He observado que en hive (a partir de CDH 5.14), cuando escribimos en la tabla parquet, por defecto sólo utiliza la codificación y no la compresión. Para activar la compresión en hive, tenemos que establecer explícitamente en hive como abajo.

    SET hive.exec.compress.output=true;

    SET parquet.compression=<Compression Codec>

    Lo cual resultaría entonces en casi el mismo tamaño que el de las inserciones de Impala (Impala por defecto hace tanto codificación como compresión).

Dejar una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *