Apache Hadoop (V) – HIVE Consultas “tipo SQL” sobre Hadoop

hive_logo
¿Un elefante-abeja? WTF!

 

Seguimos con los componentes de Hadoop. Hoy es uno de los más importantes y quizás más sencillos de instalar y configurar una vez tenemos nuestro clúster de hadoop bien montado.
 

Este post dará nociones básicas sobre HIVE pero no entraré en la instalación y configuración, puesto que es muy sencilla.

¿Qué es HIVE?

Hive es almacén de datos creado específicamente para Hadoop que nos facilita la tarea de sumarizar los datos pre-existentes en HDFS. La idea principal de Hive es la de funcionar como capa externa a Hadoop a modo de envoltorio, donde vamos a poder realizar consultas sobre el sistema de archivos que serán tratadas como MapReduces en modo nativo en HDFS.

Para poder realizar estas operaciones, los de Apache crearon un lenguaje de consultas a “base de datos” (recordemos que HDFS es un sistema de ficheros) muy similar a SQL, que denominaron HiveQL o HQL (dependiendo de en que libro lo leas lo verás de una manera u otra).

El corazón de esta idea se basa en el denominado MetaStore, que es un “lugar” donde se van a ir guardando toda la información relacionada con las operaciones en Hive, por lo tanto el día que queráis formatear Hive, deberéis borrar dicho directorio para tenerlo como el primer día.

Es una herramienta que utilizan en facebook y los chic@s de Hortonworks nos explican como se manejan con este componente.

Características especiales de Hive

Al ser una capa de alto nivel de un sistema de ficheros HDFS, hay algunas operaciones “tipo SQL” que son especiales en Hive. En concreto las operaciones de crear tablas que tiren de HDFS y la de carga de datos en Hive pueden ser ejemplos de ello:

Crear una tabla que “tire” de HDFS:

CREATE TABLE tablaDePrueba (campo1 string, campo2 int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘;’
LINES TERMINATED BY ‘\t’
STORED AS TEXTFILE;

Cargar datos en la tabla:

LOAD DATA INPATH ‘/datos/pruebas/test/tablaPruebas’ OVERWRITE INTO TABLE tablaDePrueba;

Consulta a tabla:

SELECT campo1,campo2 FROM tablaDePrueba LIMIT 100 ORDER BY campo2 DESC;

También podemos hacer consultas a tablas que se encuentren en HBase (con el fin de no tener que realizar bulks loads a Hive de ficheros de texto plano), pero la penalización por la latencia es tan alta, que para que realmente nos sea rentable usar la combinación Hadoop + HBase + Hive necesitaremos un clúster enorme, de cientos de nodos (cosa que debe pasar en Facebook).

Y por hoy es todo. ¿Ha sido fácil eh? 🙂

b0e3cb28debd0cc08f2bb5482c638b51

Fuentes:

 

Hadoop Apache (IV) – HBase

_hadoopelephant_rgb1
Y hoy:
hbase
Tipografía muy chunga

 

Hoy vamos a ver un componente Apache bastante interesante. Con este, podremos mantener distribuido un dataset en tablas columnares a través de múltiples Regiones (veremos que es) y múltiples Nodos de Hadoop.

 

¿Qué es HBase?

Cuando queremos almacenar cantidades ingentes de datos (Cientos de millones de tuplas), podemos optar por utilizar sistemas de bases de datos antiguos y esperar días u horas para obtener información de nuestros datos (si es que eso es posible) o por otra parte podemos optar por utilizar BigData y sus herramientas.

HBase nos permitirá manejar todos esos datos y tenerlos distribuidos a través de lo que denominan Regiones. Una región no es más que una partición tipo Nodo de Hadoop que se guarda en un servidor. La región aleatoria en la que se guardan los datos de una tabla se decide por nosotros, dándole un tamaño fijo a partir del cual la tabla debe distribuirse a través de las regiones.

HBase a su vez estará montando sobre HDFS de Hadoop, y podremos cargar programas en Java para realizar MapReduces personalizados.

El principal problema que tiene HBase es que no tiene un lenguaje de consulta intuitivo. Utiliza un lenguaje pseudo-javascript para crear tablas y realizar consultas.

Tiene muchas más peculiaridades, pero es redundar en lo redundado. Os dejo documentación sobre HBase en la que podemos encontrar instalación y configuración del mismo (ya sea standalone o distribuido).

 

Links

Up&Running de libro: http://hbase.apache.org/book/quickstart.html

Libro muy recomendado, donde encontraremos instalación, configuración y Tunning (esto es muy importante y viene bastante información): http://www.amazon.com/HBase-Administration-Cookbook-Yifeng-Jiang/dp/1849517142

No necesitaréis mucho más para trastear con esta tecnología.

 

dataisthenewoil

 

Hasta el siguiente post amig@s 🙂

Hadoop Apache (III) – Zookeeper

 

_hadoopelephant_rgb1
La tipografía me recuerda a la F1 de los 80.

 

Integrations-ApacheZookeeper-340x216
¡El tipo este es un currito de mantenimiento de un Zoo! (tiene que oler a elefante amarillo fijo)

 

Vamos a ir a definiciones, pondré direcciones donde se puede obtener documentación sobre instalación y configuración.

¿Qué es Zookeeper?

Es un servicio centralizado que nos permite mantener conexiones estables entre servidores con distintas tecnologías. Nos provee de una interface simple para mantener la consistencia de datos y además es altamente personalizable.

¿Cómo funciona?

Básicamente realizáis la instalación de Zookeeper en unos servidores con Linux. Consiste en bajar la versión estable y descomprimirla. La configuráis a vuestro gusto, eligiendo el número de “gemelos” que vais a querer tener a la escucha. Una vez establecidos los sincronizais entre servidores y listo.

Un Up&Running de libro es: https://zookeeper.apache.org/doc/r3.4.8/zookeeperProgrammers.html

¿Qué tiene que ver con Hadoop?

Nos permitirá tener conectividad entre HBase y HDFS de Hadoop, para poder ejecutar los MapReduce correspondientes, por ejemplo.

Links

Aquí tenéis su página oficial: http://zookeeper.apache.org/

Algunos ejemplillos rápidos: http://es.wikipedia.org/wiki/Apache_ZooKeeper#Ejemplos_de_uso_t.C3.ADpicos

Es un post rápido, pero con info interesante.

Nos vemos en el siguiente post amig@s 🙂

Hadoop Apache (II) – MapReduce

Mapreduce
El efecto de “saltito” del elefante es demoledor

Hoy vamos a dar un repaso a la tecnología MapReduce, uno de sus dos componentes principales (HDFS y MapReduce). Lets Go!

1. ¿Qué es MapReduce?

Nos permite automatizar la paralelización y distribución, así como una tolerancia a fallos muy baja, herramientas para monitorizar y obtener el estado. Además es una clara abstracción para los programadores, y está escrito en Java.

MapReduce abstrae y libera todas las tareas de “limpieza” a los programadores, y pueden concentrarse simplemente en escribir las funciones Map y Reduce.

2. Fases Map y Reduce

2.1 Fase Map

Hadoop intenta asegurarse que los Mappers se ejecutan en nodos que mantienen una porción de los datos locales, para evitar tráfico en la red. Se ejecutan de manera paralela los Mappers, donde cada uno procesa una porción de los datos de entrada.

El Mapper lee los Datos en forma de pares clave/valor y muestra cero o más pares clave/valor:
map(clave_entrada,valor_entrada)->lista (clave, valor)

Mapper puede usar o ignorar completamente la clave de entrada, por ejemplo, un parón estándar es leer una línea de un archivo a la vez:

• La clave es el byte offset dentro del archivo del cual comienza la línea.
• El valor es el contenido de la línea en sí misma.
• Normalmente la clave se considera irrelevante.

Si no escribe nada en absoluto fuera, el output debe ser de la forma par clave/valor.

Ejemplo – Contar el número de Palabras:

Contar el número de veces que se encuentra una palabra en un documento con una gran
cantidad de palabras como Datos de entrada:

Map(input_key, input_value)
Foreach Word w in input_value:
Emit(w,1)

1
Datos de Entrada del Mapper

 

2
Datos de Salida del Mapper

 

2.2 Fase Reduce

Después de que acabe la fase de Map, todos los valores intermedios para una clave intermedia dada, son combinados juntos en una lista.

Esta lista es dada a un Reductor:
• Puede que que haya un solo Reductor o múltiples reductores.
• Todos los valores asociados con un clave intermedia en particular son garantizados de que irán al mismo Reductor.
• Las claves intermedias, y su lista de valores, son pasados al reductor ordenados por Clave
• Este paso se conoce como Shuffle and Sort.

Finalmente, el reductor devuelve cero o más como pares Clave/valor, donde serán escrito al HDFS. En la práctica, el Reductor normalmente devolverá un solo par clave/valor para cada clave introducida.

 

3
La Fase Map quedaría así 🙂

 

Ejemplo – Reductor Suma:

1. Función de reducción que nos contará el número de veces que aparece cada palabra
Reduce(output_key,intermediate_vals)
Set count = 0
Foreach v in intermediate_vals:
Count +=v
emit(output_key, count)

4
Datos de salida del reductor

 

Quedaría tal que así:

5
Vista del proceso Reductor

 

Una vista completa de toda la fase de MapReduce:

5
El proceso completo de Map Reduce

 

Hasta aquí la lección de hoy.

hadoop_coin

 

Os espero en el siguiente post amigos 🙂

Hadoop Apache (I) – Introducción y Esquema de la Configuración

_hadoopelephant_rgb1

Su logo es ese elefante amarillo, el juguete favorito del hijo de su creador original, Doug Cutting.

Este post pertenece a la serie de Hadoop Apache.

A continuación teneís el esquema que iré siguiendo de publicación de los Post:

HADOOP APACHE (I): Introducción y Esquema de la Configuración

HADOOP APACHE (II): MapReduce

HADOOP APACHE (III): Zookeeper

HADOOP APACHE (IV): HBase

HADOOP APACHE (V): Hive

Hoy vamos a dar un repaso a la tecnología Hadoop, donde veremos como funciona HDFS, uno de sus dos componentes principales(HDFS y MapReduce), y daremos los conceptos claves de todos los puntos de unión entre ambos componentes.

1. ¿Qué es Hadoop?

1.1 Definición

Es una tecnología que se emplea para el tratamiento de grandes volúmenes de información,a través de una configuración distribuída en muchas máquinas.Esto nos permite tener acceso a los datos mucho más rapido que con otros sistemas de gestión de datos.Utiliza HDFS para guardar los archivos en las máquinas,que veremos explicado a continuación.

1.2 Hadoop Distributed File System

Es el software encargado de almacenar datos en un Clúster. Los Datos son dividos en diferentes Bloques (como si fueran trozos que contienen un conjunto de datos) y distribuidos a través de los Nodos del Cluster.

Cada Bloque se puede replicar(clonar) muchas veces:
· Por defecto cada Bloque se replica tres veces.
· Las réplicas se almacenan en diferentes nodos.
· Esto nos asegura tanto la confiabilidad como la disponibilidad.

2. Conceptos básicos de HDFS

El sistema de archivos HDFS está escrito en Java, basado en Google GFS. Permite tener como sistemas de archivos nativos a Ext3, xfs…

Permite usar almacenamiento para cantidades de datos masivos, usando computadoras baratas y de baja gama.

HDFS trabaja mejor con archivos de poco tamaño, ya que a menudo vamos a tener millones o miles de millones de archivos. Cada archivo pesa sobre los 100Mb o más.

Los archivos en HDFS están escritos solo una vez, y no se permiten la escritura aleatoria en archivos.

Por otra parte HDFS está optimizado para grandes lecturas de archivos Streaming, a menudo son lecturas aleatorias.

3. ¿Cómo son almacenados los archivos?

Los archivos se dividen en Bloques. Los Datos son distribuidos a través de muchas máquinas cuando son cargados. Un mismo archivo puede tener Bloques diferentes  almacenados en distintas computadoras y esto se debe a que nos proporciona un procesamiento más eficiente para la operación MapReduce.

Los Bloques son replicados a través del mayor número de computadoras, conocidas como DataNodes. Por defecto, se hace una réplica con factor igual a 3. Por ejemplo un mismo Bloque puede estar en tres máquinas distintas.

El Nodo maestro se llamará NameNode y mantendrá la información de qué Bloques hacen un archivo, además de donde están localizados. A esto se le conoce como Metadata.

3.1 Cómo son almacenados los archivos: Ejemplo

NameNode: almacena solamente los Metadatos de los archivos

DataNode: almacena los Bloques actuales. Cada bloque se replica 3 veces en el cluster.

imagen1
El dataname
imagen2
Los Datanodes

Cliente lee un archivo: se comunica con el NameNode para determinar cuales son los bloques hacen un archive, y en cuales de los DataNodes se almacenan.Entonces se comunica directamente con el DataNode para leer los Datos.

4. Obteniendo datos Dentro y Fuera de HDFS

El API de Hadoop:
· Hadoop fs opera con datos en HDFS:
hadoop fs –copyFromLocal local_dir /hfs_dir

hadoop fs –copyToLocal /hdfs_dir local_dir

Proyectos del Ecosistema:
· Flume: recolecta datos de la generación de logs( WebSites, syslogs, STDOUT)
· Sqoop: extrae y/o inserta datos entre HDFS y Sistemas de Bases de Datos Relacionales
Herramientas de Business Intelligence.

5. Anatomía de un Clúster Hadoop

5.1 Los cinco demonios de Hadoop

NameNode: guarda los metadatos para el HDFS

NameNode secundario:
· Realiza las funciones de limpieza para el NameNode
· No es un backup del NameNodo principal

DataNode: Almacena los Bloques de Datos HDFS actuales

JobTracker: gestiona los Jobs de MapReduce y distribuye las tareas individuales.

TaskTracker: es responsable de instanciar y monitorizar los Map individuales y las tareas Reduce.

5.2 Configuración básica de un Clúster

 

imagen3
Esquema de la Configuración

 

Hasta aquí la lección de hoy. Nos vemos en el siguiente post amigos 🙂