Upload
federico-leven
View
102
Download
1
Embed Size (px)
Citation preview
Introducción a Apache Hive
1
Agenda
2
• Introducción a Hadoop• Introducción a Hive• DDL• DML• Ejemplos
whoami
3
Introducción a Hadoop
4
¿ Qué es Hadoop ?
5
• Framework de procesamiento distribuido• Sistema de archivos distribuido• Provee un modelo sencillo de programación• Arquitectura share-nothing• Escalable• Tolerante a fallos• Corre sobre hardware no especializado
• Componentes :• HDFS (Sistema de archivos)• YARN (Framework de asignación de recursos de procesamiento)
• MapReduce : Framework de procesamiento distribuido
HDFS
6
Características
7
• Data organizada en bloques– Se distribuyen en varios nodos– El tamaño es configurable, usualmente entre 64 y 256 MB
• Los datos están replicados– Generalmente se usan 3 replicas por bloque
• Usa lecturas secuenciales– Generalmente sobre archivos N bloques en tamaño
• Optimizado para lecturas– No es buen filesystem para acceso aleatorio
• Es un sistema de archivos “Append only”
Arquitectura (con HA)NameNode (Active)
NameSpace
Block ManagementBlock Map
DataNode DataNode DataNode
NameSpace MetaData Image (Checkpoint) And Edit Journal Log
…8
BL1 BL6 BL1 BL3 BL1 BL7
BL2 BL7 BL6 BL2 BL8 BL9
NameNode (StandBy)
NameSpace
Block ManagementBlock Map
YARN
9
Resource Manager
10
• Un cluster tiene un solo Resource Manager o dos en modo de HA.
• Provee administración de recursos (CPU y Memoria)– Controla los NodeManagers de cada nodo– Envia tareas a nodos con recursos disponibles
• Controla el ciclo de un trabajo– Solicitud de ejecución de un trabajo– Ejecución de las tareas– Recuperación de errores de las tareas– Controlar la ejecución hasta su finalización
NodeManager
11
• Se ejecutan en los nodos junto con el Datanode
• Manejan las tareas en el nodo• Se comunican con el ResourceManager– Recibir nuevas tareas– Enviar actualizaciones de su estado
• Reciben los programas a ejecutar• Sus recursos se agrupan en contenedores, que son una RAM y CPU disponibles para los procesos.
El ciclo de un job
Client
NodeManager
NodeManager
NodeManager
NodeManager
1. Client gets metadata
3. Resourcemanager informNodeManagers
4. NodeManagers update
2. Client submits job
job status
Resourcemanager
NameNode
12
Resource Manager
Node Manager
Task
Task
Task
Node Manager
DataNodeDataNode
Task
Task
Task
Procesamiento y almacenamiento en Hadoop
NameNode
Client Job
Node Manager
Task
Task
Task
DataNode
El procesamiento tiene lugar donde están los datos
Server Server
13
HiveQuery
• Interfaz SQL para acceder a datos en HDFS
• Convierte sentencias SQL a MapReduce.
• Se puede ejecutar desde distintos clientes
• Desarrollado por Facebook– Sus BD relacionales no podían manejar los volúmenes de datos
14
Query(Hive)
Scripting(Pig)
Metadata Management(HCatalog)
Distributed Processing(MapReduce, TEZ, Spark)
YARN
HDFS Storage
Algunos conceptos iniciales• Componente para datawarehousing sobre Hadoop• NO es una base de datos para OLTP• Permite consultar y manejar datos estructurados y semiestructurados– Usa alguno de los motores de ejecución sobre YARN– Usa HDFS (o HBase) como almacenamiento
• Consiste en :– Metastore
• Almacenar información de metadatos• Provee la información de estructura de tabla a los datos almacenados
– Hive engine• Procesamiento, compilación, optimización y ejecución de queries
MapReduce/TEZ/Spark
HDFS
MetastoreHive
Engine
15
HiveQL• Lenguaje SQL de Hive– Utiliza los conceptos de bases de datos relacionales como tablas, columnas, vistas, etc.
• Diseño para manejar datos estructurados– Tiene algunas variaciones respecto al SQL de una base relacional
• Traduce las sentencias SQL en programas ejecutables en YARN.
• Soporta casos de uso como:– Querys Ad-hoc– Agregaciones, sumarizaciones, UDF, etc.– Es la herramienta más usada para Data Analysis en Hadoop
16
Arquitectura
MapReduce/TEZ/Spark
HDFS
MetastoreHive
Engine
Hive
Interacciones a través de clientes
17
HCATALOG
18
Servicio que permite guardar metadatos para que distintas aplicaciones de Hadoop puedan usarla.
Es un proyecto que nació en forma independiente, luego se hizo merge con HIVE.
En Hive se utiliza el término Metastore.
Jerarquía de entidades
19
• Base de datos : Espacio de nombre para evitar conflictos de nombre de tablas y permite también asignar permisos a nivel usuario.
• Tablas : Unidades de datos homogéneas formadas por filas y columnas con la misma metadata.
• Particiones : Unidad de almacenamiento dentro de una tabla que permite agrupar registros que comparten algún criterio.
• Buckets : Agrupación de registros de acuerdo al valor de un campo dentro de una partición.
¿ Qué es una tabla en Hive ?
20
• Consiste de :– Datos – Usualmente uno o más archivos en HDFS
– Schema – en la forma de metadatos guardados en algún repositorio donde Hive tiene acceso.
• Esto implica :– Schema y datos están separados
• Se puede definir un schema para datos existentes
• Los datos pueden agregar o procesarse independientemente
• Hive puede “apuntar” a datos que ya existían en cualquier lugar en HDFS (tablas externas)
– Se debe definir la metadata para acceder a datos que se encuentran en HDFS o para datos que serán insertados usando Hive.
Operaciones con tablas
21
• Crear una tabla:– CREATE TABLE mytable (name chararray, age int)
ROW FORMAT DELIMITEDFIELDS TERMINATED BY ',' STORED AS TEXTFILE;
• ROW FORMAT son comandos de HIVE que indican que los datos de una tabla están delimitados
• Junto a CREATE TABLE se puede especificar particiones y buckets– CREATE TABLE mytable– PARTITIONED BY (name STRING, age INT)– CLUSTERED BY (name) INTO N BUCKETS
• Otras operaciones :– SHOW TABLE– CREATE TABLE– ALTER TABLE– DROP TABLE
Particiones
22
HIVE hace full scans sobre una tabla cada vez que se ejecuta un query sobre ella
Las particiones en Hive permiten que solo se procesen las particiones afectadas en un query
La partición es un concepto lógico pero tiene una consecuencia en el almacenamiento físico de los datos.
Las particiones pueden estar dentro del directorio donde está definida la tabla (internas) o en cualquier ubicación (externas).
Las columnas de partición no son parte de los datos almacenados
Buckets
23
Otro método de segregar los datos de una tabla además de particiones
La idea es generar un archivo que contiene todos los registros que comparten el mismo valor de una columna
CREATE TABLE weblog (user_id INT, url STRING, source_ip STRING) PARTITIONED BY (dt STRING) CLUSTERED BY (user_id) INTO 96 BUCKETS
Es responsabilidad del programador insertar los datos correctamente (en la partición y la cantidad de buckets definidos)
SET hive.enforce.bucketing = trueoSET mapreduce.job.reduces = 96
Optimización
24
1) Usar EXPLAIN para analizar tu query2) Para probar tu SQL usar TABLESAMPLE3) GROUP BY mejor a DISTINCT4) Utilizar formatos optimizados como ORC o
Parquet5) Reordenar los JOINS poniendo las tablas más
grandes al final.6) Cambiar JOINS por subquerys.7) Evitar excesiva cantidad de particiones o
anidación profunda de particiones8) Usar Hive con Tez o Spark si están
disponibles.9) Usar vectorización
Ejecuciones periódicas de MapReduce o Spark
HDFS
input data no estructurada desde orígenes externos
Metastore (Schema
Information)
SQLQuerys
Caso de uso clásico de Hive
Output data optimizada para Hive
Hive
25
Hive con HBase• Hive tiene integrado nativamente con HDFS
• Hive incluye “storage handlers” para HBase
• A través de estos, Hive puede leer y escribir en HBaseStorage
Handler Interface
HBase Handler
HBase Tables
Hive HBaseHBase
26
API
HDFS
Metastore
Comparación
Map Reduce / Spark Pig Hive
Tipos de datos Estructurado/Semi/No Estructurado
Estructurado/Semi Estructurado/Semi
Casos de uso Procesos muy customizados / Procesamiento complejo (Data mining, etc)
ETL Acceso simple via SQL
Tiempo de desarrollo Largo Corto/Medio Corto
Performance comparada Alta Media/Baja Baja
Apache Zeppelin
28
Interfaz web para análisis de datos
Permite hacer ingestión de datos, análisis exploratorio, analítica y visualización
Los “notebooks” se pueden compartir y hacer un desarrollo colaborativo
Intérpretes de Zeppelin
29
Algo para leer
30
http://hive.apache.orghttp://hortonworks.com/apache/hive/http://maprdocs.mapr.com/home/Hive/Hive.htmlhttps://github.com/Prokopp/the-free-hive-book