Está en la página 1de 35

Módulo

Infraestructura
Big Data
Unidad 03
Motores de consulta
SQL. Hive e Impala

Autor: Fernando Agudo


Módulo
Infraestructura
Big Data
Unidad 03
Motores de consulta
SQL. Hive e Impala

3. MOTORES DE CONSULTA SQL. HIVE E IMPALA ................................................. 05


3.1. ¿QUÉ ES APACHE HIVE?.................................................................................. 05
3.2. ACCEDIENDO A HIVE...................................................................................... 06
3.2.1. ACCEDIENDO DESE LÍNEA DE COMANDOS............................................. 07
3.2.2. EXPLORANDO TABLAS............................................................................. 08
3.2.3. CONFIGURACIONES EN UNA TABLA HIVE................................................ 11
3.2.4. EJERCICIO: CREACIÓN DE BASE DE DATOS Y TABLAS EN HIVE................ 12
3.2.5. CREACIÓN DE TABLA USANDO EL SERDE CSV......................................... 13
3.2.6. CREACIÓN DE TABLA USANDO EL SERDE JSON....................................... 14
3.2.7. CREACIÓN DE TABLA USANDO AVRO FILE............................................... 15
3.2.8. ELIMINANDO UNA TABLA........................................................................ 15
3.2.9. CONFIGURAR LA LOCALIZACIÓN DE LOS DATOS..................................... 15
3.2.10. TABLAS EXTERNAS................................................................................. 16
3.2.11. INSERCIÓN DE DATOS EN TABLAS DE HIVE............................................ 16
3.2.12. VISTAS HIVE........................................................................................... 18
3.2.13. HIVEQL SINTAXIS BÁSICA....................................................................... 19
3.2.14. TIPO DE JOINS........................................................................................ 21
3.2.15. EJERCICIO: BASE DE DATOS Y TABLAS BALANCE RESULTADOS.............. 22
3.2.16. USO DE FUNCIONES EN HIVE................................................................. 27
3.2.17. TIPOS DE FUNCIONES BÁSICAS EN HIVE................................................ 28
3.2.18. CONDITIONAL FUNCTIONS.................................................................... 30
3.2.19. AGRUPACIONES.................................................................................... 30
3.2.20. EJERCICIO. TRABAJANDO CON FUNCIONES, ORDENACIÓN, LIMITS Y
SELECTS ANIDADOS.......................................................................................... 31
3.2.21. SELECT ANIDADOS................................................................................ 32
3.3. INTRODUCCIÓN A APACHE AVRO................................................................... 34
3.3.1. ESQUEMAS AVRO.................................................................................... 35
3.3.2. MODIFICACIONES EN EL ESQUEMA AVRO............................................... 38
3.3.3. FORMATOS DE FICHEROS........................................................................ 41
3.3.4. FORMATO DE FICHEROS PARQUET.......................................................... 42
3.3.5. CONSIDERACIONES DE RENDIMIENTO..................................................... 43
3.3.6. PARTICIONAMIENTO DE DATOS............................................................... 43
3.3.7. FUNCIONES ............................................................................................ 44
3.3.8. MACROS................................................................................................. 46
3.3.9. DESPLIEGUE............................................................................................. 46
CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3. Motores de consulta SQL. Hive e


3.4. HIVE CON ACID.............................................................................................. 48
3.4.1. ACTUALIZACIÓN Y BORRADO DE TABLAS............................................... 48
3.4.2. INSERCIÓN DE VALORES EN TABLAS........................................................ 49
3.4.3. MERGE.................................................................................................... 49
3.4.4. PARTICIONES DE TABLAS......................................................................... 50
3.4.5. EJEMPLO DE PARTICIONADO:.................................................................. 53
Impala
3.5. HIVE - BUCKETS.............................................................................................. 54
3.5.1. ¿QUÉ ES LA BUCKETIZACIÓN?................................................................. 54
3.5.2. BENEFICIOS DE LOS BUCKETS.................................................................. 55
3.5.3. ¿QUÉ SON LOS SKEWED?........................................................................ 55 “Hive es una abstracción de alto nivel de MapReduce, utiliza Len-
3.5.4. RECOMENDACIONES DE USO:................................................................. 56 guaje de Consulta Estructurado HiveQL o HQL para procesar datos
3.5.5. QUE ES DISTRIBUTEBY............................................................................. 56 estructurados. Genera código MapReduce que es ejecutado en un
3.6. ¿QUÉ ES MAPJOIN?......................................................................................... 58
3.6.1. ¿CÓMO SE USA UN MAPJOIN?................................................................ 58
clúster Hadoop.”
3.6.2. PARAMETRIZAR VARIABLES EN HIVE........................................................ 59
3.6.3. DESNORMALIZACIÓN DE DATOS............................................................. 59
3.7. ¿QUÉ ES IMPALA?........................................................................................... 60
3.7.1. ARQUITECTURA....................................................................................... 60
3.7.2. APLICACIONES DE DESARROLLO IMPALA................................................ 61 3.1. ¿Qué es Apache Hive?
3.7.3. DIFERENCIAS DE SQL ENTRE IMPALA Y HIVE............................................ 66
3.7.4. EJERCICIO: USO DE PARTICIONADO EN IMPALA...................................... 67 Hive es una abstracción de alto nivel de MapReduce, utiliza Lenguaje de Consulta Estruc-
turado HiveQL o HQL para procesar datos estructurados. Genera código MapReduce que
es ejecutado en un clúster Hadoop. HiveQL es más sencillo y rápido que escribir un job
MapReduce.

Las consultas de Hive operan con tablas, como en una base de datos relacional. Las tablas
de Hive se corresponden con un directorio de datos en HDFS. En cuanto la localización y
la estructura son específicos en la creación de la tabla:

05
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

En su arquitectura básica dispone de un sistema llamado HiveServer2 que es un contene-


dor del motor de ejecución de HIVE, disponible desde HIVE 0.11. Proporciona escalabili-
dad y seguridad.

Se puede acceder a Hive vía Beeline (comandos de consola), JDBC, ODBC o HUE.

3.2.1. Accediendo dese línea de comandos


Se puede ejecutar un archivo que contiene sentencias HiveQL usando la opción -f

3.2. Accediendo a Hive

Se puede usar sentencias HiveQL directamente desde la línea de comandos usando la


opción –e

Se pueden extraer los datos guardados en una tabla Hive

Se puede ejecutar HiveQL con Beeline, que reemplaza a la antigua consola de Hive. Para
iniciar, se debe especificar las credenciales de registro y la ruta de la conexión JDBC. Los
detalles de la conexión dependen de la configuración del clúster.

06 07
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Una vez registrado correctamente, se pueden realizar consultas (siempre terminando por
punto y coma).

Para salir de la sesión se utiliza el comando: !quit o Ctrl+d

3.2.2. Explorando tablas


En Hive se crean repositorios de tablas que son base de datos.

Los comandos de creación y uso de bbdd y tablas son los siguientes:

• CREATE DATABASE [nombre de base de datos], creación de base de datos.

• SHOW DATABASES, lista todas las bases de datos.

• USE DATABASE, ‘entrar’ en una bbdd para explorar sus tablas.

• SHOW TABLES, lista todas las tablas que se encuentra en la base de datos.

• DESCRIBE TABLE, lista los campos de na tabla especifica.

08 09
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.3. Configuraciones en una tabla HIVE

Cada columna de la tabla tiene asignado un determinado tipo que se especifica cuando
se crea la tabla. Hive devuelve NULL cuando los datos en HDFS no están conforme lo
definido.

Name Descripción Ejemplo

STRING Cadena de caracteres Alicia

BOOLEAN True or False TRUE

TIMESTAMP Fecha 2014-03-14 17:01:29

INT Int de Java 5647451445

BIGINT Long de Java 56474514545656

FLOAT Float de Java 3.14159

DOUBLE Double de Java 3.14159265484

10 11
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

►Vídeo: Introducción Hive1 3.2.5. Creación de tabla usando el Serde csv


3.2.4. Ejercicio: creación de base de datos y tablas en HIVE Para crear una tabla a partir de un fichero CSV utilizaremos OpenCSV Serde que dese-
rializará convirtiendo todos los valores de tipo columna a STRING. Utiliza comillas (“)
En este ejercicio crearemos las bases de datos y sus tablas que hemos utilizado en la teoría como carácter de comillas predeterminado y permite especificar caracteres separadores,
líneas arriba. de comillas y de escape como:
1. Acceder vía línea de comandos a Hive por beeline:

2. Crearemos las 3 base de datos una por cada tipo de capa (landing, staging y business):

3. Comprobemos que se han creado las bases de datos:

4. Crearemos en la capa de business la tabla blce_resultados_agg. Primero tenemos


que ubicarnos en la base de datos dm_business_mx usando el comando USE y luego
crear la tabla. Si no usamos el comando USE tenemos que especificar en la creación
de la tabla la base de datos seguido de la tabla [nombre base de datos].tabla:

Consultamos la tabla por medio de la sentencia HQL para verificar que se pueden visua-
lizar los datos del fichero CSV correctamente. Como se puede observar se ha eliminado la
cabecera que corresponde a la primera línea del fichero:

5. Comprobamos que se ha creado la tabla:

1 Ver vídeo en la sección Material de Estudio de tu Área de Contenido


12 13
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.7. Creación de tabla usando Avro File

3.2.8. Eliminando una tabla


3.2.6. Creación de tabla usando el Serde JSON
El comando DROP TABLE [IF EXISTS] elimina una tabla de Hive.

Por lo general, al borrar una tabla, sus metadatos y datos son borrados de HDFS.

Por otro lado, Hive no dispone de rollback.

3.2.9. Configurar la localización de los datos


Por defecto, los datos son almacenados en el “warehouse” de Hive.

Para modificar la ruta por defecto de las bases de datos se usa la cláusula LOCATION.

14 15
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.10. Tablas externas


Al borrar las tablas externas los datos se mantienen en el directorio HDFS. Para crear este
tipo de tabla siempre se usa la sentencia LOCATION.

3.2.11. Inserción de datos en tablas de Hive


Para cargar datos a la tabla, es añadir ficheros directamente al directorio HDFS de la tabla
Hive por medio líneas de comandos (-mv, -put) o vía la interface HUE.

Otra opción que disponemos es la creación y carga de una tabla con una sola sentencia:

Create Table As Selec, donde el nombre y tipo de las columnas son derivados de la tabla
origen.

Otra opción es usando la instrucción desde la línea de comando de Hive LOAD DATA
INPATH
Después de ser creada una tabla puede ser modificada

Otra manera de añadir registros es mediante la consulta Hive:

• Usar INSERT INTO añade los resultados a una tabla existente.

• A partir de la versión 0.14 de Hive, se permite realizar inserciones de registros


individuales.

• INSERT OVERWRITE sobre-escribe todos los datos de una tabla existente.

16 17
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.12. Vistas Hive


Las vistas son conceptualmente como una tabla, pero son solo una sentencia Hive y no
contienen datos. Se ejecuta cada vez que es consultada.

Como ejemplo creamos una vista que lee de la tabla movie_csv. Este dataset se en en-
cuentra en el nodo frontera de la VM /home/cloudera/dataset y hay subirla a HDFS.

Luego de crearla la consultamos:


3.2.13. HiveQL sintaxis básica
Hive no es case-sensitive, pero es frecuente la capitalización por convenio.

• Las sentencias pueden estar formadas por varias líneas y terminan por punto y
coma.

• Los comentarios empiezan por -- (doble guión).

• Está soportado en los scripts de Hive pero no es Beeline.

18 19
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

La sentencia SELECT recupera los datos de una tabla Hive: La unión de tablas es muy común en Hive:

• Se puede seleccionar una lista de columnas. • La sintaxis en Hive es JOIN..ON.

• Recuperar todas las columnas. • Para un mejor rendimiento, la primera tabla en listar debería ser la que contenga el
mayor número de registros.
• Aplicar alias a las columnas.
• En este ejemplo se muestra el uso de la sentencia JOIN ON

La cláusula LIMIT establece el número máximo de registros recuperados.

• Para ordenar los resultados de una consulta se utiliza la cláusula ORDER BY cam-
po y el si es descendente (DESC) o ascendente (ASC).

3.2.14. Tipo de Joins


La cláusula WHERE filtra los resultados teniendo en cuenta los criterios establecidos:
En este gráfico se resumen los JOINS con los que podemos trabajar:
• Se pueden combinar expresiones usando AND o OR.

• Se puede usar LIKE (%) para cadenas incompletas.

20 21
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.15. Ejercicio: base de datos y tablas Balance Resultados 3. En HIVE Crearemos la tabla blce_resultados_2 de la capa landing:

En este ejercicio crearemos las bases de datos y sus tablas que hemos utilizado en la teoría
líneas arriba.

1. Acceder vía línea de coamndos a Hive por beeline:

2. En HIVE Crearemos la tabla blce_resultados_1 de la capa landing

22 23
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

4. En HIVE Crearemos la tabla blce_resultados de la capa staging: 6. En HIVE Comprobamos la creación de cada tabla en cada capa:

7. En linea de comando - Creamos con mkdir las siguientes rutas de particiones en


HDFS (sub-carpetas) donde copiaremos los ficheros de datos que se encuentran en el
nodo frontera en la ruta /home/cloudera/datasets:

5. En HIVE Recrearemos la tabla blce_resultados_agg en la capa business: 8. En línea de comando - Copiamos los ficheros del nodo frontera a HDFS en las parti-
ciones creadas:

24 25
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

9. En HIVE - Cargar datos en la capa staging: 3.2.16. Uso de funciones en Hive


Hive proporciona un conjunto de funciones que se pueden usar en las consultas:

• Muchas de ellas son idénticas a las encontradas en SQL.

• Las funciones no son case-sensitive.

• Para listar todas las funciones disponibles, se utiliza SHOW FUNCTIONS;

• Para obtener información sobre ellas, se utiliza el comando DESCRIBE FUNCTION


[EXTENDED] nombre de la función;

10. En HIVE - Cargamos datos de la capa business:

11. En HIVE - Para que se actualice los datos cargados ejecutamos el comando MSCK
REPAIR TABLE:

NOTA: Su equivalente a MSCK REPAIR TABLE en impala es: INVALIDATE METADATA

12. Verificamos la existencia de datos den cada tabla cargada por cada capa:

26 27
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

String Functions

Descripción Ejemplo Invocación 2 Entradas Salida

CONCAT (nom-
Concatenar dos o más strings ´Ana´ / ´Pérez´ ´Ana Pérez´
bre, ´´,apellido)

A
n
a
SUBSTR(nombre, 1) A
Extraer una parte de un string
SUBSTR(nombre, 1, 2) An
A
n
a

Devuelve la longitud de
LENGTH(nombre) Ana 3
un campo string

Devuelve parte de un string en función REGEXP_EXTRACT


Anaperezdiaz=065178140D 065178140D
de la expresión regular indicada (Campox,´\\=(.*)´)

Type Conversion Function

Descripción Ejemplo Invocación Entrada Salida

CAST(´01´AS int)
´01´ 1
Cambiar el tipo de un campo CAST(´2016-12-11
´2016-12-11 00:00:00´ 2016-12-11 00:00:00
3.2.17. Tipos de funciones básicas en Hive 00:00:00´AS times tamp)

Lass siguientes tablas resumen las funciones a manera de ejemplo:


Date Functions
Mathematical Functions
Descripción Ejemplo Invocación Entrada Salida
Descripción Ejemplo Invocación Entrada Salida
Pasar de una fecha al número
UNIX_TIMESTAMP
Truncar un determinado número ROUND(PRECIO,2) 23.492 23.49 de segundos desde 1970-01-01 2016-12-01 12:10:55 236544125
(2016-12-01 12:10:55)
00:00:00 UTC hasta dicha fecha
Redondear hacia arriba CEIL(precio) 23.492 24
FROM_UNIXTIME
Función contraria a la anterior 236544125 2016-12-01 12:10:55
Redondear hacia abajo FLOOR(precio) 23.492 23 (236544125)

YEAR (2016-12-
Extracción del año de una fecha 2016-12-01 12:10:55 2016
01 12:10:55)

Extracción de la hora HOUR (2016-12-


2016-12-01 12:10:55 12
de una fecha 01 12:10:55)

28 29
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.18. Conditional Functions Hive tiene definidas una serie de funciones de agregación

IF (Condición, valor si se cumple, valor si no se cumple/vale null)


Descripción Ejemplo

Contar todos los registros COUNT (*) / COUNT (1)

Contar el número de valores no-nulos de un determinado


COUNT (nombre)
campo

Contar el número de valores únicos no-nulos por campo COUNT (DISTINCT(nombre))

Devuelve el valor más alto MAX (salario)


• ISNULL( a )
Devuelve el valor más bajo MIN (salario)
• ISNOTNULL( a ) Devuelve el total de los valores seleccionados SUM (precio)

• CASE WHEN Condición1 THEN Valor1 WHEN Condicion2 THEN Valor2 ELSE Devuelve la media de todos los valores AVG (salario)
valor3 END AS nom_campo. A continuación un ejemplo de su uso :

3.2.20. Ejercicio. Trabajando con funciones, ordenación, limits y selects


anidados
1. Crear una base de datos dm_rrhh que contenga una tabla nombre_anyos_data_dep
con los siguientes campos y formatos de dato:

3.2.19. Agrupaciones
GROUP BY agrupa los datos seleccionados de una o más columnas.

Las columnas que no forman parte de la agrupación no pueden ser agregadas.


2. Cargar con datos la tabla nombre_anyos_data_dep.

3. Lista los 10 empleados de mayor antigüedad de la tabla usando las siguientes senten-
cias en la select:

Nota: Formato de la fecha para poder ordenar correctamente aaaa-mm-dd

30 31
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.2.21. Select anidados SELECT profesion, salario FROM empleado;

Los select anidados como se puede observar van dentro de los FROM. Los select anidados • CREATE TABLE empleado
contienen select que hacen tablas
• (id INT, nombre STRING, profesion STRING, salario INT)

• ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’

• LOCATION ‘/formacion/empleados’

La tabla de metadatos es manejada mediante Hive Metastore. Metastore usa una base de
datos relacional donde almacena los metadatos (MySQL, PostgreSQL, Derby).

Estos metadatos son accesibles desde servicios externos, como puede ser Hcatalog. Hca-
talog es un sub-proyecto de Hive que permite el acceso al metastore:

• Accesible mediante comandos y API REST.

• Permite definir abstracciones de tabla usando la sintaxis de Hive.


Datos: hacen referencia a la información almacenada y procesada.
• Acceso a las tablas de Hive, Pig, MapReduce y otras herramientas.
• Logs de servidores son ejemplos de datos.
Hcatalog usa la sintaxis de Hive.
• Metadatos: describe aspectos importantes de los datos.
• Se puede especificar un comando usando la opción –e.
• El nombre u ordenación de los campos son ejemplos de metadatos.
• Con la opción -f, se permite incluir un fichero con las sentencias a ejecutar

• El mapper muestra cómo procesar los datos de entrada.

• El input Path e InputFormat son ejemplos de metadatos.

Hive es una herramienta de alto nivel que usa sintaxis SQL para realizar consultas.

• Dichas consultas ejecutarán tareas MapReduce en el clúster.

• La siguiente sentencia produce el mismo resultado que el anterior mapper.

• Los metadatos relativos al formato y a la localización de los datos, se definen en la


creación de la tabla.

32 33
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

• El comando SHOW TABLE muestra todas las tablas creadas en Hive. Está apoyada sobre Hadoop y su ecosistema. Ofrece compatibilidad sin perder en rendi-
miento. Los datos serializados usan una codificación binaria optimizada. Incluye metada-
• El comando DESCRIBE lista los campos de una tabla específica. tos que permiten adaptar el esquema al paso del tiempo. Avro también soporta llamadas
RPC (Remote Procedure Calls) y puede ser usado para desarrollar tus propios protocolos
• Para más detalle sobre la tabla, se puede usar DESCRIBE FORMATTED de red. Flume lo usa para su comunicación interna.

3.3.1. Esquemas Avro


El esquema Avro define la estructura de los datos. Estos esquemas se representan me-
diante ficheros JSON. Se dispone de tres posibilidades para mapear un objeto Java a un
esquema:

• Generic: Escribir el código que mapea cada campo del esquema a tu objeto. Flexi-
ble, pero perjudica el tiempo de compilación.

• Reflect: Generar un esquema a partir de una clase existente. Fácil pero lento en
ejecución y limita la compatibilidad.
• El comando DROP TABLE tiene el mismo comportamiento que en Hive. Este co-
mando borra tanto los datos como los metadatos de la tabla. • Specific: Generar una clase java para tu esquema. Recomendado, ofrece el mejor
rendimiento y compatibilidad. Mediante Maven se puede realizar en el proceso de
compilación.

Un tipo básico sólo puede tener un valor:

Nombre Descripción Java Tipo

null Ausencia de valor null

boolean Valor binario boolean


3.3. Introducción a Apache Avro
int Entero de 32-bit int
Para comprender Avro primero definiremos lo que es Serialización, que es el mecanismo long Número de coma flotante y simple precisión float
de representación de los datos en memoria es mediante una secuencia de bytes y permi-
double Número de coma flotante y doble precisión double
te guardar los datos en disco o enviarlos a través de la red. La Deserialización permite
leer los datos que se encuentran en memoria. Por ejemplo, para representar el número bytes Secuencia de 8-bit sin signo java.nio.ByteBuffer
105641251, 4 bytes cuando se almacena como un int, 9 bytes cuando se almacena como string Secuencia de caracteres unicode java.lang.CharSequence
un string.

Muchos lenguajes y librerías de programación soportan la serialización. Por ejemplo, Se-


rializable en Java o Writables en Hadoop. Avro es un framework que permite la serializa-
ción de datos de manera eficiente. Los datos son serializados según un esquema definido
y permite leer y escribir datos en diferentes lenguajes, como Java, C/C++, Python, C#,
PHP, entre otros.

34 35
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

El tipo record es el más importante. El principal uso de los otros tipos es la definición de
campos de este tipo.

Nombre Descripción

record Un tipo compuesto por uno o más campos con nombre

enum Un conjunto de valores específicos

array Cero o más valores del mismo tipo

Conjunto de pares clave-valor; la clave es String mientras que el valor es el


map
especificado

union Exactamente un valor coincidente de un conjunto de tipos

fixed Un número fijo de 8-bit sin signo

Apache Avro –Ejemplo

Para evitar ambigüedades, es una buena práctica utilizar el atributo doc para incluir in-
formación a los campos de un record.

36 37
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Avro define un formato de fichero que almacena los registros. Es similar al formato Se- En este ejemplo se dispone de un millón de registros escritos con este esquema.
quenceFile de Hadoop y permite usar diferentes lenguajes para leer y escribir datos.

Soporta compresión por bloques de registros, lo cual permite un proceso eficiente con
MapReduce. El formato es auto-descriptivo y cada fichero contiene una copia del esque-
ma en el proceso de escritura. Todos los registros de un fichero usan el mismo esquema.

Los ficheros de datos de Avro son una manera eficiente de almacenar datos, ya que se tra-
ta de ficheros binarios y esto dificulta su visualización. Para ello se dispone de Avro Tools,
herramienta que permite leer el esquema y los datos de un fichero Avro. El nombre del
jar contiene la versión avro-tools-1.7.7.jar. y está disponible para descargar desde la web de
Avro o el repositorio de Maven.

Veamos cómo se van a realizar cambios en el esquema anterior:

• Renombrar el campo ida customerId y cambiar el tipo de int a long.

• Eliminar el campo faxNumber.

• Añadir el campo email.

3.3.2. Modificaciones en el esquema Avro


La estructura de los datos puede ser modificada con el tiempo. Los campos que pueden
ser añadidos, eliminados, cambiados o renombrados. En SQL, son manejados mediante
las sentencias ALTER TABLE.

Estos cambios pueden romper la compatibilidad de muchos formatos y en el caso de


SequenceFiles, con objetos Writable no serían legibles. Los datos escritos en los ficheros
Avro siempre son legibles y el esquema usado se incluye con los datos, en los propios
ficheros. Sin embargo, los datos leídos por una aplicación pueden esperar una nueva es-
tructura. Avro es el único enfocado a mantener la compatibilidad hacia atrás. En la lectura
se puede usar un esquema diferente que el utilizado al escribir. Con el nuevo esquema escribimos nuevos datos. Las aplicaciones que utilicen el nuevo
esquema permiten leer los nuevos datos. Por otro lado, los datos anteriores no podrán ser
leídos por las aplicaciones adaptadas al nuevo esquema, ya que se dispone de cambios
incompatibles. En el caso del renombrado, se debe definir un alias para el campo custome-
rId.

38 39
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Algunos cambios que perjudicarían la compatibilidad son:

• Cambiar los atributos name y namespace de un registro.

• Añadir un nuevo field sin un valor por defecto.

• Eliminar un valor de un tipo enum.

• Eliminar un tipo de dato de un tipo union.

• Modificación del tipo de un campo que implica truncamiento del formato.

• Estos cambios requieren realizar los siguientes pasos:


Para los nuevos campos, se tiene que:
• Leer los datos antiguos (usando el esquema original).
• Definir obligatoriamente un valor por defecto.
• Modificar los datos en la aplicación, si es necesario.
• En ese caso, se debe definir el field con el tipo null.
• Escribir los nuevos datos (usando el nuevo esquema).

• Actualizar los lectores/escritores al nuevo esquema.

3.3.3. Formatos de ficheros


Hadoop y su ecosistema soportan una gran variedad de formatos de ficheros. Se puede
ingestar en un formato y convertirlo a otro diferente.

Al seleccionar el formato de tus datos se debe tener en cuenta:

• Patrón de la ingesta.

• Herramientas de compatibilidad.
Los cambios que no afectan a los lectores existentes:
• Tiempo de vida esperado.
• Añadir, cambiar, o eliminar un atributo doc.
• Necesidades de almacenamiento y rendimiento.
• Cambiar el valor por defecto de un field.
Los formatos de fichero de Hadoop son los siguientes:
• Añadir un nuevo campo con un valor por defecto.
• Text: Formato de fichero básico. Buena interoperabilidad entre aplicaciones, pero
• Eliminar un campo que disponga de un valor por defecto. una gran pérdida de rendimiento.

• Cambio de tipos siempre que estos tipos sean superiores en rango (por ejemplo, • SequenceFiles: Almacena pares clave-valor en formato binario. Buen rendimiento,
int a long). pero no permite una buena operatividad con los datos.

• Añadir un alias a un campo.

40 41
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

• Avro: Ficheros con una codificación binaria optimizada. Buen rendimiento e inte- 3.3.5. Consideraciones de rendimiento
roperatividad.
Cada formato de ficheros puede soportar una compresión de datos. En el proceso de com-
• Columnar: Datos almacenados organizados por columnas. Algunos ejemplos son: presión se tiene que encontrar un equilibrio entre el tiempo de CPU y el espacio de alma-
RCFILE, ORCFILE o Parquet. Proporcionan eficiencia cuando se selecciona un cenamiento.
subconjunto de las columnas de la tabla.
Se disponen de un conjunto de códecs de compresión: Snappy, LZ4, LZO, GZip y BZip2.
3.3.4. Formato de ficheros Parquet
Formato de almacenamiento columnar para ecosistemas Hadoop. Eficiente a la hora de
realizar consultas por columnas. Utiliza la etiqueta de los campos para acceder a los datos.
Por defecto, Hive se accede a los datos por etiqueta del campo y en Impala se debe indicar
la opción PARQUET_FALLBACK_SCHEMA_RESOLUTION = 1(añadido en CDH 5.8.0
(Impala 2.6.0)).

Parquet accede rápidamente a los datos ya que no necesita hacer un full scan de la tabla.
Provee varias opciones de compresión: SNAPPY (por defecto en Hive e Impala), GZIP
(por defecto en Spark) o ninguno. Para visualizar el contenido de un fichero Parquet, tene-
mos la utilidad parquet-tools, normalmente instalada en cualquier Cluster.

Cuando escribimos datos en Parquet, en el directorio de escritura aparece un fichero No


Parquet, llamado Metadata File. Este archivo descriptor, no es más que una relación de
metadatos, describiendo los archivos Parquet que tenemos en el directorio. El Metadata 3.3.6. Particionamiento de datos
File, no es obligatorio ni necesario (podríamos borrarlo a mano), pero tiene un gran coste
computacional su construcción. Para ello, los distintos Framework del ecosistema, incor- Particionamiento se refiere a la organización de los datos según un patrón. Mejora el
poran una propiedad para desactivar su creación. rendimiento al limitar los datos de entrada de un job. Hive e Impala soportan particio-
namiento. Un ejemplo de particionamiento sería la organización de logs por fecha de
Desactivación en Spark: generación.

Desactivación en Hive:

Los ficheros Parquet almacenan los metadatos de las columnas junto con los datos. Esto
es muy importante tenerlo en cuenta. Si tenemos una tabla Hive cuyo formato de alma-
cenamiento es Parquet, en los metadatos de los archivos, queda registrado el tipo de dato
de cada columna. Si una vez que hemos guardado datos sobre una tabla, realizamos un
ALTER de una columna (por ejemplo de String a Decimal), la ejecución de cualquier con-
sulta en Impala que lea esa columna devolverá un error en el parseo de tipos. En Hive
es un tanto más delicado, ya que esa situación la resuelve sin devolver error, dejando esa
columna a Null, lo cual enmascara el problema.

42 43
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.3.7. Funciones UDAF

Actualmente Hive tiene funciones que cualquiera puede usar. Tienes unas 219, para com- Usualmente este tipo de funciones son para realizar operaciones matemáticas, sacar pro-
probarlo usamos la sentencia: show functions; medios, sumatorias, máximos, mínimos, prácticamente el concepto viene heredado de las
RDBMS. Es decir funciona sobre múltiples filas o a una, devolviendo un único valor como
Pero algunas veces no dan lo que se requiere, pero tiene la opción para poder extender esa resultado, usualmente funciona con GROUP BY.
funcionalidad, en tres grupos:
Será la función que realice un agrupamiento por alguna característica y que realice la
• UDF (User Defined Function) acción sobre las filas que cumplan esas condiciones, dando un único resultado.

• UDAF (User Defined Agregation Function)

• UDTF (User Defined Table(Tabular) Function)

UDF

Usualmente este tipo de funciones son para manipular la información en nuestras tablas
de manera que podamos hacer “transformaciones sobre la información” por decirlo de al-
guna manera, este concepto viene heredado de las RDBMS, este tipo de funciones trabaja
sobre una columna y regresa una columna como salida.

UDTF

Aunque trabaje con una columna, también podría ser un espacio de columnas de N di- Usualmente este tipo de funciones son funciones que trabajan con una columna de entra-
mensiones a una columna de una dimensión. da y de salida generan n columnas. UDTF funciona sobre una fila como entrada y devuel-
ve múltiples filas como salidas, por tanto se deberán nombrar como alias, la cláusulas AS
es obligatoria.

44 45
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.3.8. Macros • Redesplegar la configuración:

Proporcionan la habilidad de definir funciones en HiveQL que llaman a otras funciones y • En Cloudera Manager Admin, ir a Hive service.
operadores. Lo que nos proporciona una alternativa a la construcción de UDF porque no
requieren código externo. • Desde el menú de acciones seleccionar Desplegar Configuracion de Cliente

• Reiniciar el servicio Hive

• Con Sentry habilitado hay que dar los privilegios a los roles que lo para usarlo. Con
el usuario hive usando Hive Sql:

• GRANT ALL ON URI ‘file:///opt/local/hive/lib/my.jar’ TO ROLE EXAMPLE_


ROLE
3.3.9. Despliegue
• También al jar en HDFS
Vamos a abordar tres tipos de desligues:
• GRANT ALL ON URI ‘hdfs:///path/to/jar’ TO ROLE EXAMPLE_ROLE
• Despliegue Cluster o permanente
• Ya nos queda solo crear la función del UDF desde el JAR y apuntando la localiza-
• Despliegue por sesión
ción en HDFS. Por ejemplo
• Despliegue por código
• CREATE FUNCTION addfunc AS ‘com.example.hiveserver2.udf.add’ USING
Despliegue permanente JAR ‘hdfs:///path/to/jar’

• Esto debe realizarlo un administrador del sistema: • También se puede crear la función temporal del UDF desde el JAR apuntando a
la localización en HDFS. Por ejemplo
• Copiar el JAR generado a HDFS y asegurarse que el usuario Hive tiene acceso.
• CREATE TEMPORARY FUNCTION addfunc AS ‘com.example.hiveserver2.
• Copiar el JAR en el servidor donde esta HiveServer2 este ejecutándose a cualquier udf.add’ USING JAR ‘hdfs:///path/to/jar’
directorio.
Despliegue por sesión
• Otorgar permisos de lectura a HIVE
Esto debe realizarlo un entorno poco segurizado o garantizar accesos al usuario HIVE:
• Tomar nota del directorio, por ejemplo: /opt/local/hive/lib
Desde Hive ejecutar:
• Si el servidor es distinto del metastore, y también tendrás que replicar ese directo-
rio, en ese servidor, sino no arrancara el Hive Metastore. • add jar myjar;

• Desde el cloudera manager en el servicio Hive, en la pestaña configuración. Con- • Sobre una base de datos que exista por ejemplo fligths:
figurar la propiedad: hive.aux.jars.path con el path del directorio del host del Hi-
• drop function if exists addfunc;
veServer2.
• CREATE FUNCTION fligths.addfunc AS ‘com.example.hiveserver2.udf.add’
USING JAR ‘hdfs:///path/to/jar’

46 47
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Despliegue por código Actualización de tablas

Bueno definimos una UDF en el código: El valor asignado debe ser una expresión que este soportada en la sentencia SELECT.
Operaciones aritméticas, casts, literales, etc. Las subqueries no están permitidas. Sólo se
actualizarán las filas que coincidan con la cláusula WHERE. Las columnas particionadas
o bucketizadas no se pueden actualizar.

Borrado de tablas

Y se invoca de la siguiente forma: Sólo se borrarán las filas que coincidan con la cláusula WHERE.

3.4. Hive con ACID 3.4.2. Inserción de valores en tablas

3.4.1. Actualización y borrado de tablas Cada fila enumerada en la cláusula VALUES se inserta en una fila de la tabla. Se deben
proporcionar valores para cada columna de la tabla. La sintaxis SQL estándar que permite
A partir de la versión 0.14 de Hive ya se permiten operaciones de actualización, borrado al usuario insertar valores en sólo algunas columnas todavía no es compatible.
e inserción de valores en las tablas de Hive. Soportado por las propiedades ACID garan-
tizan que las transacciones realizadas por el gestor de base de datos para modificar la Para imitar el SQL estándar, pueden proporcionarse valores nulos para las columnas a
información se resuelvan de manera predecible y segura. las que el usuario no desea asignar un valor. Las operaciones de inserción, actualización
y eliminación no se admiten en las tablas que se ordenan (tablas creadas con la cláusula
Las 4 propiedades ACID son las siguientes: SORTED BY). El usuario no puede insertar datos en una columna de datos compleja utili-
zando la cláusula INSERT INTO ... VALUES.
• Atomicity(atomicidad): Las operaciones que se lleven a cabo en una transacción
deben realizarse en todo su conjunto o no realizarse, no pudiendo ejecutarse unas
y otras no.
3.4.3. Merge
• Consistency(consistencia).
Solo soportada a partir de la versión 2.2 de Hive
• Isolation(aislamiento): una operación incompleta por un usuario no causa efectos
secundarios inesperados paraotrosusuarios.

• Durability(Permanencia): garantiza que, si el servicio se suspende en mitad de


una transacción y ésta queda incompleta, no se pierdan las acciones realizadas tras
la reanudación del sistema. Para que una tabla seguarde en formato ACID hay que
añadir al final de la sentencia del CREATE TABLE:

48 49
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.4.4. Particiones de tablas Tabla no particionada

¿Qués son las particiones?

Las particiones dividen los conjuntos de datos en función de una o varias columnas, en di-
ferentes directorios de HDFS. Esto mejora en gran medida el rendimiento de las consultas
ya que los datos están separados en ficheros según la columna particionada. Esto reduce
el número de mappers y disminuye en gran medida la cantidad de shuffle de los datos en
el trabajo MapReduce lanzado para consultar la tabla.

Cuándo y dónde utilizar particiones

Utiliza las particiones sobre columnas que sea muy común utilizar las como clausulas
where en consultas de tipo filtro. Hive divide las particiones en distintos directorios del
Tabla particionada
HDFS, para que la búsqueda sea más precisa.
Los datos son divididos en subdirectorios a la hora de almacenar los datos
Deberíamos utilizar clausulas para particionar que no sean demasiado pequeñas, ni de-
masiado grandes, ni tampoco muy dispares ya que la ventaja que obtendremos no será
muy amplia.

Si queremos crear o borrar particiones de una tabla particionada deberemos realizar los
siguientes comandos “ALTER TABLE ADD / DROP PARTITION ...”. También se pueden
añadir o borrar las particiones manualmente desde del directorio de HDFS.

Si añadimos particiones al directorio al que apunta la tabla particionada es necesario el


siguiente comando dentro de Hive para que la tabla muestre estos nuevos datos:

La columna que indica el particionado aparece en la descripción de la tabla (es una co-
Inconvenientes del particionado: lumna “virtual”). En este caso se debe de observar que la columna state solo debe figurara
en PARTITIONED BY en caso contrario dará error al intentar crearla.
Los datos puede que no se distribuyan homogéneamente. Por lo que habrá consultas que
tardaran más que otras dependiendo de la partición que se consulte.

La solución sería establece buckets, skeweds o nuevas particiones por otras columnas. La
solución a elegir dependerá del caso de uso concreto.

50 51
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Confirmamos como se ha creado con el comando: describe customers_by_state; Añadir y borrar particiones estáticas:

Carga de datos en una partición:

Sobrescribir una partición:

Es posible crear tantas particiones como necesitemos:

3.4.5. Ejemplo de particionado:


Tenemos la siguiente tabla con un volumen de datos muy grande, e intentaremos parti-
cionar la para mejorar el rendimiento de sus búsquedas.

Para ello lo haremos por los campos más comunes:

• Ciudad

• Genero

• Fecha de nacimiento
Ver particiones:

52 53
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Si particionamos la tabla por género, solo encontraríamos dos particiones: 3.5.2. Beneficios de los Buckets
Masculino y Femenino. El resultado sería que la mejora de rendimiento no sería muy • Consultas más eficientes: Especialmente cuando se realizan joins por las columnas
grande, ya que cada consulta seguiría buscando en un volumen muy grande de datos. bucketizadas, ya que cuando vayamos a realizar estos los datos estarán en la mis-
ma máquina, lo que reducirá considerablemente el shuffle de datos y mejorará el
Si particionamos la tabla por ciudad, nos encontraríamos un volumen mayor de parti- rendimiento.
ciones, pero muchas de ellas serían mucho más grandes (ciudades grandes) que otras
(pueblos pequeños). El resultado sería que tendríamos una mejora de rendimiento muy • Muestreo más eficiente: Debido a que los datos ya están divididos en partes más
significativa en los pueblos, pero en las ciudades grandes seguiría tardando mucho en pequeñas
realizar la búsqueda, ya que el volumen de datos seguiría siendo muy grande.
• ¿Cómo determina Hive en qué bucket debe poner cada registro? Hive calcula el
Si particionamos la tabla por la fecha de nacimiento, tendríamos un numero suficiente- módulo de cada valor de la columna hasheada y envía los datos con el mismo mó-
mente grande de particiones, y además utilizaríamos un sesgo más correcto que si eli- dulo a su fichero correspondiente.
giésemos ciudad, ya que los datos estarían más proporcionados. El resultado sería que
nuestra mejora de rendimiento a la hora de consultar sería muy considerable Ejemplo de creación de tablas con buckets

3.5. Hive - Buckets

3.5.1. ¿qué es la bucketización?


Divide las tablas en archivos de HDFS según el hash de la columna que hayamos elegido. Inconveniente: Al dividirse los datos ‘automáticamente’ los datos no tienen porque que-
dar distribuidos homogéneamente

3.5.3. ¿Qué son los skewed?


En Hive, el skew hace referencia a una o más columnas de una tabla que tienen valores
que aparecen con mucha frecuencia. Si se sabe que una columna va a tener un sesgo muy
alto, se puede especificar en la creación del esquema de la tabla:

54 55
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Al especificar los valores con un gran sesgo, Hive los dividirá automáticamente en archi- Registros con la misma edad irán al mismo reducer. Pero el distribute by no implica nin-
vos independientes y tendrá en cuenta este hecho durante las consultas para poder omitir gún tipo de ordenación de los registros.
archivos no necesarios.
Por ejemplo, la consulta anterior quedaría:
En la tabla Clientes del ejemplo, los registros con un zip de 57701 o 57702 se almacenarán
en archivos separados porque se supone que habrá un gran número de clientes en esos
dos códigos postales.

3.5.4. Recomendaciones de uso:


Debemos tener en cuenta que tanto al particionar los datos como al bucketizarlos, tene-
mos que elegir prácticas que no nos proporcionen archivos demasiado pequeños. Es re-
comendable que el tamaño de fichero sea entre 200 y 500mb. Un gran número de ficheros Los dos registros con edad=66 se envían al mismo reducer, pero no que darán continuos
pequeños ocasionaría que nuestras consultas necesitas en más proceso de shuffle. u ordenados en la tabla.

3.5.5. Que es DistributeBy Se puede utilizar un sort by por la misma columna que el distribute by, para que los regis-
tros seguidos en la tabla:
Se usa en querys, no se define al crear una tabla. Hive utiliza las columnas en distribute
by para distribuir las filas entre todos los reducers. En otras palabras, todas las filas con el
mismo distribute by por columna irán al mismo reducer.

Por ejemplo, suponga que tiene la siguiente tabla denominada salarios con el esquema
(sexo, edad, salario, códigopostal):

Sexo Edad

M 40
Los registros con la misma edad aparecerán juntos en la salida:
F 58

F 68

M 85

F 66

Tenga en cuenta que el distribute by se utiliza normalmente junto con la instrucción in-
sert. El siguiente ejemplo aplica un distribute by a la columna edad:

56 57
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.6. ¿Qué es MapJoin? 3.6.2. Parametrizar variables en Hive


Un MAPJOIN es un tipo de Join que nos proporciona la posibilidad de que Hive utilice Por ejemplo, si tenemos la siguiente query y queremos parametrizarla variable edad:
la memoria para cachear una tabla cuyo volumen sea muy pequeño.

3.6.1. ¿cómo se usa un MapJoin?


Para utilizar estos MapJoin utilizaremos el comentario /*+ MAPJOIN() */ indicando en- La guardamos en un archivo hql y por terminal lanzamos lo siguiente:
tre paréntesis el nombre de la tabla que queremos subir a memoria.

Si realizásemos un Join entre las tablas por id de producto, podríamos utilizar MAPJOIN
para utilizar la tabla productos en memoria. 3.6.3. Desnormalización de datos
Se refiere a la creación de un modelo de datos óptimo para la consulta de información.
Normalmente se estructura con tablas originales, tablas intermedias y tablas finales con
los cálculos agregados.

Ventajas:
Optimizaríamos el rendimiento de nuestra consulta utilizando la tabla pequeña desde
memoria. Podemos utilizar la siguiente variable de configuración, para dejar que Hive • Disminuye el tiempo de lectura
convierta de forma automática los join en mapjoin, siempre que se encuentre con una
tabla pequeña: • No hay que realizar consultas con joins

Desventajas

• Aumenta el tiempo de procesamiento


El tamaño que Hive considera como tabla pequeña también se determina mediante una • Replicación de datos
propiedad:
Recomendación

• Es aconsejable a la hora de mostrar resultados de consultas que se hacen cada mu-


cho tiempo (días/semanas/meses)

• Consultas BI agregados

58 59
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.7. ¿Qué es Impala? 3.7.2. Aplicaciones de desarrollo Impala


Con Impala, puede consultar datos, ya sean almacenados en HDFS o El dialecto SQL de Impala es altamente compatible con la sintaxis SQL utilizada en el
Apache HBase, incluidas las funciones SELECT, JOIN y agregadas, en componente Apache Hive (HiveQL) siendo familiar para los usuarios con la ejecución de
tiempo real. Además, Impala utiliza los mismos metadatos, la sintaxis consultas SQL en la infraestructura de Hadoop. Actualmente, Impala SQL admite un sub-
SQL (Hive SQL), el controlador ODBC y la interfaz de usuario (Hue conjunto de instrucciones HiveQL, tipos de datos y funciones integradas. Impala también
Beeswax) que Apache Hive, lo que proporciona una plataforma familiar incluye funciones incorporadas adicionales para características comunes de la industria,
y unificada para consultas orientadas a lotes o en tiempo real. para simplificar la migración de SQL desde sistemas que no son de Hadoop.

Para evitar la latencia, Impala evita que MapReduce acceda directamente a los datos a Impala SQL se centra en las consultas e incluye relativamente poco DML. No hay nin-
través de un motor de consulta distribuido especializado que es muy similar a los que se guna instrucción UPDATE o DELETE. Los datos obsoletos generalmente se descartan
encuentran en los RDBMS paralelos comerciales. El resultado es un rendimiento de orden (mediante las instrucciones DROP TABLE o ALTER TABLE ... DROP PARTITION) o se
de magnitud más rápido que el de Hive, según el tipo de consulta y configuración. reemplazan (por las instrucciones INSERT OVERWRITE).

Toda la creación de datos se realiza mediante sentencias INSERT, que normalmente in-
sertan datos de forma masiva mediante consultas desde otras tablas. Hay dos variaciones,
INSERT INTO que se anexa a los datos existentes, e INSERT OVERWRITE que reem-
plaza todo el contenido de una tabla o partición (similar a TRUNCATE TABLE seguido
de un nuevo INSERT). Aunque hay una sintaxis de INSERTAR ... VALUES para crear un
pequeño número de valores en una sola declaración, es mucho más eficiente usar el IN-
SERTAR ... SELECT para copiar y transformar grandes cantidades de datos de una tabla
a otra en una sola operación

A menudo construye las definiciones de tabla y los archivos de datos de Impala en algún
3.7.1. Arquitectura
otro entorno, y luego adjunta Impala para que pueda ejecutar consultas en tiempo real. En
El componente central de Impala es el demonio Impala, representado físicamente por el particular, Impala puede acceder a tablas creadas por Hive o datos insertados por Hive, y
proceso impalad. Algunas de las funciones clave que realiza un demonio Impala son: Hive puede acceder a tablas y datos producidos por Impala. Muchos otros componentes
de Hadoop pueden escribir archivos en formatos como Parquet y Avro, que luego pueden
• Lee y escribe archivos de datos. ser consultados por Impala.

• Acepta consultas transmitidas desde el comando impala-shell, Hue, JDBC u Impala puede crear una tabla que lea archivos de texto separados por comas o separados
ODBC. por tabuladores, especificando el separador en la sentencia CREATE TABLE. Puede crear
tablas externas que lean los archivos de datos existentes, pero no los muevan ni los trans-
• En paralelo paraliza las consultas y distribuye el trabajo en todo el cluster. formen.

• Transmite los resultados de la consulta intermedia al coordinador central. Debido a que Impala lee grandes cantidades de datos que pueden no ser perfectamente
ordenados y predecibles, no requiere restricciones de longitud en los tipos de datos de
Los demonios de Impala se pueden implementar de una de las siguientes maneras: cadena. Por ejemplo, puede definir una columna de base de datos como STRING, CHAR
y VARCHAR con longitud ilimitada.
• HDFS e Impala se ubican conjuntamente, y cada demonio Impala se ejecuta en el
mismo host que un DataNode.

• Impala se implementa por separado en un clúster de cómputo y se lee de forma


remota desde HDFS, S3, ADLS, etc.

60 61
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Puedes conectarte y enviar solicitudes de Impala a través de: El siguiente ejemplo muestra cómo ver las bases de datos disponibles y las tablas en cada
una. Si la lista de bases de datos o tablas es larga, puede usar la notación de comodines
• Impala-shell para ubicar bases de datos o tablas específicas en función de sus nombres.
• HUE

• JDBC

• OBDC

Impala utiliza el sistema de archivos distribuido HDFS como su principal medio de al-
macenamiento de datos. Impala confía en la redundancia proporcionada por HDFS para
protegerse contra las interrupciones del hardware o de la red en nodos individuales. Los
datos de la tabla de Impala se representan físicamente como archivos de datos en HDFS,
utilizando formatos de archivo HDFS conocidos y códecs de compresión. Cuando los ar-
chivos de datos están presentes en el directorio de una nueva tabla, Impala los lee todos,
independientemente del nombre del archivo. Se agregan nuevos datos en archivos con
nombres controlados por Impala.

HBase es una alternativa a HDFS como medio de almacenamiento para datos de Impala.
Al definir tablas en Impala y asignarlas a tablas equivalentes en HBase, puede consultar
el contenido de las tablas HBase a través de Impala, e incluso realizar consultas de unión,
incluidas las tablas Impala y HBase.

Cuando se conecta a una instancia de Impala por primera vez, utiliza las instrucciones
SHOW DATABASES y SHOW TABLESpara ver los tipos de objetos más comunes. Ade-
más, llame a la función version () para confirmar qué versión de Impala está ejecutando;
el número de versión es importante al consultar la documentación y tratar problemas de
soporte.

Una instancia de Impala completamente vacía no contiene tablas, pero tiene dos bases
de datos:

• default, donde se crean nuevas tablas cuando no especifica ninguna otra base de
datos.

• impala_builtins, una base de datos del sistema utilizada para contener todas las
funciones integradas.

62 63
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

Pasando un conjunto de comandos contenidos en un archivo:

Pasando un solo comando al comando impala -shell:

Variable de substitution en impala-shell.

Como podemos observar podemos hacer uso de variales para luego utilizarlas en las sen-
tencias sql:

64 65
CEUPE Módulo. Infraestructura Big Data CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3.7.3. Diferencias de SQL entre Impala y Hive 3.7.4. Ejercicio: uso de particionado en Impala
https://impala.apache.org/docs/build/html/topics/impala_langref_unsupported. En este ejercicio adjuntaremos una tabla particionada externa a una estructura de direc-
html#langref_hiveql_delta torio HDFS.

Existen diferencias entre Impala y HIVE en el uso de unas funciones como es por ejemplo Utilizaremos una tabla con datos de registro web, con subdirectorios separados para el
con la función CONCAT. año, mes, día y host. Para simplificar, usamos una pequeña cantidad de datos CSV, cargan-
do los mismos datos en cada partición.
Si en impala ejecutamos la siguiente sentencia nos dará un error:
1. Creamos una tabla con particiones de Impala para datos CSV:
SELECT CONCAT(‘Here are the first ‘,10,’ results.’);
Las columnas IP, producto_id y fecha corresponden al contenido de los archivos de
datos CSV.

Las columnas de año, mes, día y host se representan como subdirectorios dentro de
la estructura de la tabla y no forman parte de los archivos CSV. Usamos STRING para
Pero en HIVE será correcto usar la siguiente sentencia: cada una de estas columnas para poder producir nombres de subdirectorios consis-
tentes, con ceros iniciales para una longitud consistente.
SELECT CONCAT(‘Here are the first ‘,10,’ results.’);

2. Verificamos la correcta creación de la tabla logs:


En impala tendrá que remplazarse por la siguiente sentencia donde usa el CAST:

SELECT CONCAT(‘Here are the first ‘,CAST(10 AS STRING),’ results.’);

Este link referencia las diferencias de DATA Types entre impala y HIVE:

https://impala.apache.org/docs/build/html/topics/impala_datatypes.html#datatypes

66 67
CEUPE Módulo. Infraestructura Big Data
Centro Europeo de Postgrado Unidad 03. Motores de consulta SQL. Hive e Impala

3. En impala [localhost:21000] - Insertamos los registros, simulando que llega informa-


ción de los IPs con datos de productos que se están consumiendo por el cliente:

4. Verificamos la ruta donde se ha creado nuestra tabla logs. Como resultado se puede
confirmar que la ruta es:

LOCATION ‘hdfs://quickstart.cloudera:8020/user/hive/warehouse/external_parti-
tions.db/logs’

CEUPE
5. Verificamos lo que contiene la ruta: Centro Europeo de Postgrado

Web
www.ceupe.com

E-mail
6. Verificamos en una de las rutas que queremos ver la información y damos cat al fi- info@ceupe.com
chero creado en la partición elegida. Como resultado debemos tener el contenido del
fichero csv :

109.54.10.12,001,20190625134012

68

También podría gustarte