Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Infraestructura
Big Data
Unidad 03
Motores de consulta
SQL. Hive e Impala
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
Se puede acceder a Hive vía Beeline (comandos de consola), JDBC, ODBC o HUE.
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).
• SHOW TABLES, lista todas las tablas que se encuentra en la base de datos.
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
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.
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
2. Crearemos las 3 base de datos una por cada tipo de capa (landing, staging y business):
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:
Por lo general, al borrar una tabla, sus metadatos y datos son borrados de HDFS.
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
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
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
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.
• Las sentencias pueden estar formadas por varias líneas y terminan por punto y
coma.
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:
• 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
• 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).
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.
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:
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
11. En HIVE - Para que se actualice los datos cargados ejecutamos el comando MSCK
REPAIR TABLE:
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
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
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)
YEAR (2016-12-
Extracción del año de una fecha 2016-12-01 12:10:55 2016
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
• 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.19. Agrupaciones
GROUP BY agrupa los datos seleccionados de una o más columnas.
3. Lista los 10 empleados de mayor antigüedad de la tabla usando las siguientes senten-
cias en la select:
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
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)
• 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:
Hive es una herramienta de alto nivel que usa sintaxis SQL para realizar consultas.
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.
• 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.
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
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.
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
• 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.
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.
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
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.
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
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
• Con Sentry habilitado hay que dar los privilegios a los roles que lo para usarlo. Con
el usuario hive usando Hive Sql:
• 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
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.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.
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
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.
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.
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:
• 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
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.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
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
• 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
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.
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
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.’);
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
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