La analítica sobre Hadoop leía los registros fila por fila, así que una consulta que necesita un solo salario igual arrastra el registro completo de cada empleado, y los registros heterogéneos se comprimen mal. Los propios conjuntos de datos de Twitter tenían siete niveles de anidamiento con más de 80 nodos hoja.
Twitter y Cloudera construyeron Parquet, un formato de almacenamiento columnar de código abierto para Hadoop. En lugar de filas, escribe columnas: todos los nombres, luego todas las edades, luego todos los salarios. Su gran hazaña fue dividir datos anidados en columnas usando el algoritmo de fragmentación de registros Dremel de Google y una especificación de codificación compartida.
Como una columna contiene un solo tipo, tanto la compresión genérica como la específica de tipo mejoran, y un motor de consultas se salta la carga de las columnas que no necesita. La codificación automática por diccionario, junto con el empaquetado de bits y la codificación por longitud de racha, reducen el resto. Parquet no ata a los usuarios a ninguna biblioteca de serialización, por lo que muchos motores lo adoptan.
Parquet 1.0 se lanzó en julio de 2013 con contribuyentes de Twitter, Cloudera, Criteo, Berkeley AMPLab y Stripe, y ya se estaba ejecutando en producción en Twitter.
Almacenar por columnas para que la analítica se salte lo que no necesita
Los valores homogéneos de una columna se comprimen mucho mejor que las filas mixtas, así que los archivos se vuelven mucho más pequeños.
Las consultas cargan solo las columnas que necesitan, así que la E/S y el costo caen drásticamente.
Dividir datos anidados mediante Dremel significa que un esquema complejo todavía encaja en columnas.
Ser independiente del framework permitió que cada motor lo adoptara sin reescribir.
Cuando el cuello de botella es la lectura y la compresión, cambia el diseño físico, no la lógica: almacenar valores homogéneos juntos hace que la E/S costosa se reduzca y el archivo sea más pequeño sin costo adicional.
Parquet 1.0 se publicó en julio de 2013 y rápidamente se convirtió en el formato columnar predeterminado en todo el ecosistema de Hadoop y Spark, y luego dentro de los data lakes, lakehouses y almacenes de datos en la nube. Ahora es uno de los formatos de almacenamiento abiertos con mayor soporte, usado dondequiera que la analítica necesite escaneos rápidos y baratos de tablas anchas.
CONSULTA LAS PRUEBAS
Las fuentes
- Announcing Parquet 1.0: Columnar Storage for Hadoop Twitter Blog · web.archive.org ·
- Parquet Format Specification Apache Parquet · apache.googlesource.com