Convertir fichero csv o tsv a parquet con apache Drill

Apache parquet es un formato de almacenamiento columnar para ecosistemas hadoop, independiente del framework de procesamiento de datos o del lenguaje de programación. Este es similar a otros formatos columnares como RCFile. Este formato provee una compresión eficiente y mejora el desempeño de las consultas. Parquet tiene 3 opciones para la compresión de sus ficheros y son snappy, gzip o ninguno, donde la opción seleccionada influye en el tamaño resultante de los ficheros y en el tiempo que tardará en convertir los ficheros al formato parquet.

Apache Drill tiene la capacidad de leer y escribir en formato parquet y lo demostraré en el siguiente ejemplo. Lo primero que haremos para poder realizar una comparación de uno de los beneficios de parquet (compresión) será utilizar un fichero tsv de un tamaño considerable.

Del sitio http://www.gdeltproject.org/data.html#rawdatafiles descargaremos un fichero zip que dentro de si contiene un TSV de  6,58 GB (el cual cambiaremos de extensión de TXT a tsv). Entonces basándonos en lo visto en el articulo anterior accederemos al fichero usando el plugin dfs. Si queremos darle un vistazo al fichero y sus campos podemos realizar la siguiente consulta:

Luego para comenzar con la conversión lo primero que haremos será modificar el formato de almacenamiento de apache drill, de la siguiente manera:

La sentencia anterior creará una tabla a la que accederemos utilizando la ruta especificada, será a su vez en esa ruta (en mi caso /tmp/data/parquet_example/) donde podremos observar el resultado de la conversión, un conjunto de ficheros en formato parquet que ahora en su totalidad suman unos 2,6 GB, disminuyendo el espacio ocupado en más de la mitad (el formato de compresión por defecto es snappy). En el caso de haber utilizado gzip la conversión hubiera durado un poco más pero en contraposición los ficheros resultantes ocuparían menor tamaño, en mi caso el resultado fue de 1,3 GB, es decir, apenas un 20% de lo que ocupa el tsv y lo único necesario para utilizar este formato de compresión es cambiar el formato antes de crear la tabla de la siguiente forma:

Una vez culminada la conversión ya podremos efectuar consultas sobre la tabla recién creada (en formato parquet)

drill-parquet-query

drill-parquet-query

Cómo conectar Apache Drill con MySQL

Hoy de nuevo les traigo a ustedes un post relacionado con Apache Drill. Como les comenté en el post anterior, apache drill funciona con plugins, donde en cada uno de estos se define como se establece la conexión. Por ende en este caso nosotros deberemos crear un plugin para conectarnos con MySQL. De nuevo utilizaremos el modo embebed de la herramienta por lo cual para iniciar deberemos ir a la carpeta bin dentro de la instalación de apache drill y ejecutar el archivo drill-embedded en el caso de aquellos que estén utilizando Windows deben ejecutar sqlline.bat.

Desde un navegador web nos vamos a la dirección

http://localhost:8047/storage

Ruta donde están los plugin de antemano definidos. Para crear nuestro nuevo plugin para conectarnos con MySQL nos iremos a la parte inferior y en el campo de texto le daremos el nombre del nuevo plugin a crear, en nuestro caso lo llamaremos mysql y pulsaremos el botón «Create».

create plugin

create plugin

Inmediatamente después en el campo «Configuration» introducimos el siguiente json eliminando el null que trae por defecto y pulsamos el botón «Create»

donde:

username: será el nombre de usuario que utilizamos para conectarnos a MySQL.

password: será el password que utilizamos para conectarnos a MySQL.

url: El host y el puerto al que nos conectamos en MySQL.

configuración del plugin

configuración del plugin

El siguiente paso es colocar jar driver mysql en la ruta <drill_installation_directory>/jars/3rdparty

Hay un último paso a llevar a cabo en la configuración, para que la definición del plugin se mantenga una vez hayamos reinciado el ordenador o iniciado una nueva sesión con drill.

Editaremos el fichero <drill_installation_directory>/conf/drill-override.conf y especificaremos la ruta donde se almacenarán las configuraciones (definiciones) que hagamos de los plugins por ejemplo:

Una vez hecho esto si reiniciamos drill veremos en los storage el plugin de mysql. Por último para comprobar la definición del plugin solo necesitaremos efectuar una consulta por ejemplo utilizando el UI de apache drill de la forma:

SELECT * mysql.database_name.table_name

Al igual que con el post anterior una vez definido el plugin de mysql podremos efectuar consultas del tipo join que involucren una tabla en MySQL, un fichero CSV, un fichero JSON y otros.