Un poco de Apache Drill

Apache Drill (https://drill.apache.org/) es un motor de consultas SQL para ser utilizado en entornos Big Data (Hadoop-HDFS, HBase, Hive, MongoDB…) con una baja latencia, sin necesidad de tener definido un esquema de datos previo y permitiendo combinar en una única consulta, datos de distintas fuentes y Bases de datos (relacionales o no).

Las Principales características de Apache Drill

· Alto rendimiento y baja latencia en ejecución de consultas.

· No necesita metadatos centralizados. No es necesario definir y mantener las tablas, vistas o relaciones entre datos. Drill puede delegar esta tarea en el conector a la fuente de datos correspondiente, de manera que si el conector tiene definidos metadatos, utiliza estos, pudiendo combinar metadatos de distintas fuentes (Pej: distintos metastores HIVE). Aun así, Drill soporta sentencias SQL de DDL estándar para crear sus propios metadatos, que son gestionados como una BD relacional tradicional.

· Ejecución dinámica de consultas sin necesidad de que haya definido un esquema de datos. Drill procesa los datos agrupándolos en paquetes de registros, cuyo esquema analiza y “descubre” dinámicamente, pudiendo reajustarse durante el procesamiento si detecta cambios.

· Lenguaje ANSI SQL (2003)

· Soporte para realizar consultas sobre datos anidados en varios niveles.

· Acceso simultaneo a múltiples fuentes de datos, que pueden combinarse en una misma consulta. Por ejemplo, en un mismo JOIN pueden combinarse una tabla en HBase con una colección de MongoDB y una tabla de Oracle.

Mediante conectores, Drill puede consumir datos de fuentes tales como sistema de ficheros local, sistema de ficheros distribuido (HDFS, Amazon S3), HBase, Hive, MongoDB, Bases de datos relacionales (Oracle, MySQL, SQLServer, Postgres), MapR-DB.

· Integración con Apache Hive. Permite ejecutar consultas sobre tablas Hive y acceder a todos los formatos de Hive. Permite realizar operaciones JOIN entre tablas de diferentes metastores. La integración permite a Drill conocer los metadatos HIVE, pero Drill resuelve las consultas mediante su propio motor de ejecución, en ningún caso invoca a HIVE .

· Integración con herramientas BI (Tableau, MicroStrategy, QlikView, Excel…) y SQL mediante drivers JDBC/ODBD y velocidad de ejecución interactiva.

· Definición de funciones de usuario (UDFs). Proporciona un API Java para definir funciones (UDFs) que añadan lógica de negocio a Drill. Asimismo, la integración con HIVE permite reutilizar desde Drill las funciones UDFs definidas en HIVE.

· Escalabilidad, Drill puede ejecutarse desde en un PC, hasta en un cluster propio o Hadoop.

Arquitectura de alto nivel

Drill proporciona un entorno de ejecución distribuido, pudiendo soportar hasta varios cientos de nodos, para hacer consultas sobre grandes cantidades de datos (del orden de petabyes), con respuesta interactiva para entornos análiticos/BI.

Puede funcionar en cualquier tipo de cluster distribuido (No es necesario que sea Hadoop), utilizando Zookeeper para la gestión transparente del cluster de cara a las aplicaciones cliente.

En cada máquina del entorno distribuido se ejecuta un servicio denominado Drillbit, esto permite explotar la localidad de los datos, mediante el paradigma de llevar el procesamiento a la máquina donde están los datos, evitando el movimiento de datos.

Cualquier Drillbit es responsable de recibir peticiones desde un cliente, procesar las consultas comunicándose con otros y devolver los resultados.

Una cache distribuida (Hazelcast), gestiona información como metadatos, localización de la información, planes de ejecución de consultas…

Módulos Core de un Drillbit

Ejecución de una consulta en Drill

La ejecución de una consulta en Drill se descompone en los siguientes pasos:

1. Un cliente (JDBC, ODBC, shell…) lanza una consulta sobre un Drillbit del cluster.

2. El Drillbit que recibe la consulta, la parsea, la optimiza, genera un plan físico de ejecución basado en optimización y localidad.

3. El plan físico, descompuesto en fases y niveles, se envía al resto de Drillbits para ser ejecutado en paralelo sobre los datos de cada nodo.

4. Los datos procesados en cada nodo se envían al Drillbit original, que agrupa resultados y los devuelve al cliente.

Conexión a fuentes de datos

Los plugin de almacenamiento son módulos software para conectar Drill a las distintas fuentes de datos. Optimizan la ejecución de las consultas, proporcionan la localización de los datos, su estructura de almacenamiento y su formato, asimismo, informan a Drill de las capacidades nativas de la BD (JOINs, funciones SQL, ).

Como veremos, existen diferentes plugins instalados por defecto con Drill (sistema de ficheros local, HDFS, Amazon S3, HBase, Hive, MongoDB, RDMS, MapR-DB), que pueden configurarse y para que los datos de estos sistemas puedan ser explotados simultáneamente.

Exitsen diferentes formas de indicar la fuente de los datos:

· Sentencia SQL USE para indicar la el plugin a utilizar por defecto en las siguientes sentencias de consulta.

· Clausula FROM de la propia sentencia de consulta indicando para cada tabla el prefijo con el nombre del plugin al que pertenece.

· Durante el arranque de drill pasando la propiedad schema=<plugin>

· Especificándolo en la URL de conexión desde el cliente.

Por defecto, los Plugins disponibles en una instalación Drill son:

· cp: Drill apunta a ficheros .jar dentro de su classpath .

· dfs: Drill apunta a un sistema de ficheros. Por defecto es el sistema de ficheros local, pero se puede configurar para apuntar a un sistema de ficheros distribuidos (Hadoop, Amazon S3).

· hbase: Conecta Drill con una base de datos de tipo HBase.

· hive: Intregra Drill con los metadatos de Hive y proporciona funcionalidades para utilizar la información en Hive.

· mongo: Conecta Drill a una base de datos MongoDB.

· Bases de datos relacionales: A través del driver JDBC de cada una de ellas (Copiandolo en un directorio de librerías de terceros en la instalación de Drill) y definiendo la configuración específica de cada uno de ellos en la consola de administración de Drill (Podemos encontrar ejemplos de configuración para las más populares Oracle, SQL Server,MySQL, Postgres ).

Los plugins son configurables desde la consola web de administración.

Dependiendo del tipo de plugin se configurará la información necesaria para que Dril sea capaz de acceder a los datos.

Por ejempo, para el plugin dfs (Sistema de ficheros), se configuran los distintos directorios donde localizar datos, agrupándolos en workspaces, así como opcionalmente, el formato de los ficheros almacenados en ellos (Avro, Parquet, Json, CSV…).

Sin embargo, para el plugin mongo se configura la url de conexión a la fuente de datos:

Interfaces cliente de Drill

Para conectar con Apache Drill tenemos las siguientes interfaces:

· Shell:

· Consola Web:

· Driver ODBC: Utilizando el Driver ODBC de MapR.

· Driver JDBC: Utilizando el Driver JDBC distribuido con la instalación de Drill y utilizandoel siguiente formato como url de conexión:

jdbc:drill:[schema=<storage
plugin>;]zk=<zk name>[:<port>][,<zk name2>[:<port>]...]

· Api C++: Api de programación para clientes desarrollados en C++.

Integración con herramientas BI:

Los drivers JDBC y ODBC permiten que herramientas de análisis BI puedan integrarse con Drill para consultar los datos almacenados en un cluster Drill.

La interfaz estándar del driver hace transparente la comunicación entre la herramienta BI y el proceso Drillbit que atenderá la petición

En la web de Drill encontramos ejemplos de integración con Tableau, MicroStrategy, Tibco Spotfire, Qlik Sense, JReport.