Introducción a Apache Pig y Pig Latin
Introducción a Apache Pig y Pig Latin
1/7
Pig es una plataforma creada por Yahoo (a alto nivel) que nos ayuda a desarrollar
algoritmos MapReduce utilizando una sintaxis similar a SQL llamada Pig latin. Tiene dos
modos de funcionamiento permitiéndonos ejecutar los algoritmos en el cluster HDFS de
Hadoop o en nuestra maquina local. Utilizando un script se codificarán las sentencias que
realizan la carga, escaneo, búsqueda y filtrado de los datos de entrada y sentencias para el
formateo y almacenamiento de los datos de salida.
Podremos utilizar un schema para estructurarlos y poder acceder de manera más sencilla.
Se puede ampliar Pig Latin usando UDF (Funciones definidas por el usuario).
Inicialmente Pig se desarrolló en 2006 por los investigadores de Yahoo Research para
poder lanzar un map-reduce sobre un gran volumen de datos.
1 Siguiente
1/7
Pig.
2/7
"Filosofía" Pig
Para poder comprender mejor el por qué se creó Pig, se definieron una lista de enunciados
que resumen el proyecto.
Anterior 1 2 Siguiente
2/7
Pig.
3/7
Por supuesto, al ser el creador de dicha plataforma, Yahoo! fue el primero en utilizarla para
sus procesos de búsqueda en la web así como para incorporarlo en Hadoop.
Realmente, más del 50% de los procesos que se ejecutan en Hadoop se basan en scripts
escritos en Pig Latin.
A partir del 2009, Pig se empezó a usar para el procesamiento de datos en otras
compañias, tales como:
1
LinkedIn: Esta plataforma
3 usa Hadoop y Pig en el 2
AOL y WhitePages: Estas
componente "Gente que Twitter: Esta red social usa
sus búsquedas de
recomendar a los usuarios datos de los tweets
registros
empleos o páginas que
puedan ser de su interés.
Anterior 1 2 3 Siguiente
3/7
Pig Latin
Pig Latin es un lenguaje de programación que usa flujos de datos de forma paralela. Esto permite a los
programadores definir como deben ser tratados (Lectura, Procesamiento y Almacenamiento) los datos que
provienen de una o más entradas.
La sintaxis es muy parecida a SQL pero, al ser un lenguaje orientado a la transformación de datos también
es parecido a los optimizadores de consultas.
Habitualmente utilizando MapReduce en Java, los programas pueden ser de más de 100 líneas de código,
mientras que utilizando Pig Latin, los scripts normalmente no suelen pasar de unas 10 líneas de código.
Pig Latin
El método de funcionamiento de Pig Latin es el de ejecutar sentencias tomando los datos de entrada
("bag") que hacen referencia a un conjunto de tuplas (filas), procesando dichas sentencias con dichas tuplas
y emitiendo otro "bag" como salida.
Una "tupla" es un conjunto de campos, donde cada uno hace referencia a cualquier tipo de dato. Pig Latin
no utiliza condicionales tales como "if" ni tampoco ciclos tales como "for" ya que este lenguaje está
enfocado en el flujo de datos y no en controlar dicho flujo como otros lenguajes de programación.
Anterior 1 2 3 4 Siguiente
Pig.
5/7
Pig Latin usa operadores relacionales para poder realizar varias operaciones sobre los datos
que se analizan.
Aunque anteriormente hemos dicho que Pig Latin no utiliza ciclos "for", sí que existe el operador
"FOREACH" que tiene una naturaleza similar ya que su función es la de iterar sobre las tuplas y
transformarlas en dichas iteraciones.
En la siguiente tabla se puede observar algunos de los operadores relacionales que son utilizados
en Pig Latin:
Anterior 1 2 3 4 5 Siguiente
5/7
Pig.
6/7
Anteriormente comentamos el uso que algunas empresas (LinkedIn, Twitter, AOL,...) le daban a
Pig.
Además de estos usos, existen muchos datos que se pueden procesar y aún no se ha hecho y
esto puede permitir realizar modelos de predicción del comportamiento.
Por ejemplo, Pig se podría usar para ver todos los movimientos de un usuario en una página web
y poder dividir en varios tipos a los usuarios. Así, se podría categorizar a dichos tipos de usuarios y
para cada uno mostrar anuncios o artículos que estén más relacionados con sus tipos de búsqueda.
Pig permite el análisis de gran volumen de información (Big Data), con Apache Pig se puede
procesar y almacenar dichos datos en una base de datos y posteriormente ejecutar consultas
(queries) sobre ellos. Esto hace que Pig tenga una similitud con una herramienta ETL (Extract
Transform Load).
Pig permite la paralelización utilizando Hadoop haciendo que los scripts sean más simples.
Esto no significa que Pig sea un reemplazo de una ETL ya que no tiene funcionalidades
específicas como sí lo hace una herramienta ETL.
Anterior 1 2 3 4 5 6 Siguiente
6/7
Pig.
7/7
Este ejemplo de un archivo cogerá las palabras de un archivo de texto y nos contará las palabras.
Ejercicio
¡Correcto! ×
Pig es una plataforma creada por Yahoo (a alto nivel) que nos
ayuda a desarrollar algoritmos MapReduce utilizando una sintaxis
similar a SQL llamada Pig latin.
1/6
Apache Hive es un framework que fue originalmente creado por Facebook que sirve para trabajar
con el HDFS de Hadoop y nos facilita trabajar con los datos. A través de sentencias SQL podemos
lanzar consultas que serán traducidas a trabajos MapReduce.
Facebook fue la encargada de desarrollar Hive y actualmente es utilizada por Apache Hive y
desarrollada por empresas tales como Netflix y FINRA (Financial Industry Regulatory Authority).
Amazon incluye una derivación Apache Hive en sus servicios Amazon Web Services.
Hive no es una base de datos, aunque tengamos que crearnos un schema, crear una tabla e
introducir datos. Por esto se conoce como el componente datawarehouse de Hadoop.
1 Siguiente
1/6
Hive.
2/6
Apache Hive permite analizar conjuntos de datos grandes que utilicen almacenamiento
bajo HDFS de Hadoop y en sistemas que sean compatibles tales como Amazon S3.
Tiene un lenguaje basado en SQL que se llama HiveQL y permite leer y convertir consultas
en MapReduce y otras plataformas que pueden ejecutarse bajo YARN.
Para que las consultas sean más rápidas, Hive utiliza índices de bitmaps.
Inicialmente, Hive guarda sus metadatos en una base de datos apache Derby pero se
puede configurar para que estos metadatos puedan ser almacenados en otros bases de
datos relacionales como pueden ser: Postgres, MySQL, Oracle, o MS SQL.
Anterior 1 2 Siguiente
2/6
Hive.
2/6
Apache Hive permite analizar conjuntos de datos grandes que utilicen almacenamiento
bajo HDFS de Hadoop y en sistemas que sean compatibles tales como Amazon S3.
Tiene un lenguaje basado en SQL que se llama HiveQL y permite leer y convertir consultas en
MapReduce y otras plataformas que pueden ejecutarse bajo YARN.
Para que las consultas sean más rápidas, Hive utiliza índices de bitmaps.
Inicialmente, Hive guarda sus metadatos en una base de datos apache Derby pero se puede
configurar para que estos metadatos puedan ser almacenados en otros bases de datos relacionales
como pueden ser: Postgres, MySQL, Oracle, o MS SQL.
Anterior 1 2 Siguiente
2/6
Hive.
2/6
Apache Hive permite analizar conjuntos de datos grandes que utilicen almacenamiento
bajo HDFS de Hadoop y en sistemas que sean compatibles tales como Amazon S3.
Tiene un lenguaje basado en SQL que se llama HiveQL y permite leer y convertir consultas en
MapReduce y otras plataformas que pueden ejecutarse bajo YARN.
Para que las consultas sean más rápidas, Hive utiliza índices de bitmaps.
Inicialmente, Hive guarda sus metadatos en una base de datos apache Derby pero se puede
configurar para que estos metadatos puedan ser almacenados en otros bases de datos relacionales
como pueden ser: Postgres, MySQL, Oracle, o MS SQL.
Anterior 1 2 Siguiente
2/6
Hive.
3/6
Su principal inconveniente es que necesita procesar la consulta SQL y traducirla a Java para
crear el trabajo MapReduce.
Desde el botón upload podemos subir archivos que utilizaremos como fuentes de datos:
4/6
Crearemos la base de datos y la tabla que almacenara los datos desde aquí.
Supongamos que hemos creado una tabla como esta. Los campos de la tabla deben de ser
campos que tengamos en nuestro archivo de datos
from presupuestos
order by importe
Anterior 1 2 3 4 Siguiente
4/6
Hive.
5/6
Conclusión
Hive nos proporciona una herramienta para traducir queries del lenguaje tradicional SQL, que es
ya conocido por la industria, a los nuevos frameworks NoSQL en el ecosistema Hadoop. Hive es
una herramienta fácil y rápida de programar pero conlleva un sobrecoste en la ejecución en
comparación de la programación directa en frameworks NoSQL.
Por ejemplo:
Si tenemos muchos archivos .log en un servidor y queremos extraer información en ellos sería
difícil poder extraer información de forma fácil y rápida. Sin embargo, utilizando Hive, sería sencillo
crear una tabla extrayendo los datos de los ficheros y filtrando la información por ejemplo por líneas
que contengan fallos o errores.
Anterior 1 2 3 4 5 Siguiente
Hive.
6/6
Ejercicio
?
Apache Hive.
MapReduce.
arrastrar aquí
Anterior 1 2 3 4 5 6
6/6
Hive.
6/6
Ejercicio
?
Apache Hive.
MapReduce.
arrastrar aquí
¡Correcto! ×
MapReduce.
Anterior 1 2 3 4 5 6
6/6
Sqoop.
1/4
Sqoop es un programa que se ejecuta bajo línea de comandos y sirve para transferir datos entre
Hadoop y BD relacionales.
El nombre de esta aplicación surge de unir las palabras sql y hadoop. Pasó a ser un proyecto
Apache de nivel superior en 2012. Tiene una amplia documentación tanto para desarrolladores
como para usuarios.
Como ejemplo, Microsoft usa un conector que está basado en Sqoop para ayudar al traspaso de
información entre SQL Server y Hadoop.
La API de Sqoop permite conectar con otras BD mediante el desarrollo de conectores y así poder
adaptar y usar los lenguajes de consultas de otro proveedor de BD específico.
1 Siguiente
1/4
Sqoop.
2/4
Sqoop trabaja como una capa intermedia entre las BD relacionales y Haddop tal y como se
muestra en la siguiente imagen.
Funcionamiento Sqoop
Anterior 1 2 Siguiente
2/4
Sqoop.
3/4
Apache Sqoop es una herramienta que fue diseñada para importar información desde bases de
datos estructuradas y sistemas Hadoop en el clúster Hadoop. Podemos utilizar Sqoop también para
extraer datos Hadoop y exportarlos a bases de datos relacionales.
Una vez ejecutado tendremos nuestra tabla importada en el HDFS de hadoop listo para ser
usado.
Anterior 1 2 3 Siguiente
3/4
Sqoop.
4/4
Conclusión
Como hemos podido ver, Sqoop es una herramienta muy útil para trasladar una base de datos ya
existente al entorno Hadoop y viceversa.
Nos permite, mediante los comandos pertinentes, importar datos de nuestra BD relacional,
analizarlos y gestionarlos mediante otras herramientas como pueden ser Pig o Hive sobre Hadoop y
devolver el resultado de nuevo a nuestras BD relacionales.
Almacenamiento de datos
Anterior 1 2 3 4
4/4
Flume.
1/5
Flume es un servicio distribuido y fiable para recoger, agregar y mover grandes cantidades de
datos de log. Tiene una arquitectura simple y flexible de flujo de datos. Es robusto y tolerante a
fallos con mecanismo de confiabilidad ajustables y muchos mecanismos de conmutación por error y
recuperación. Utiliza un modelo de datos extensible que permite la aplicación analítica en línea.
Esta principalmente diseñado para copiar datos de varios servidores a HDFS.
Para usar Flume una vez lo tengamos instalado configuraremos de dónde obtendremos los datos:
Vamos a transferir los datos de twitter. Una vez listado los componentes, tendremos que
describirlos:
Ahora deberemos describir los “sink” que será donde almacenemos los datos:
1 Siguiente
1/5
Flume.
2/5
Deberemos describir el canal por donde se transferirá los datos entre la fuente de datos y los
“sink”:
Una vez configurado como hemos visto necesitaremos un accessToken que podemos crearlo
desde aps.twitter.com una vez creada nuestra aplicación rellenaremos los datos que nos faltaban y
podremos empezar a recoger datos.
Ejemplo
Ejecutaremos Flume:
Anterior 1 2 Siguiente
2/5
Spark Core.
1/9
Fue desarrollada por la Universidad de California. Posteriormente, el código base fue donado a
la Apache Software Foundation que, desde entonces, se encarga de mantener dicho código.
Permite una interfaz para programación de clusters con paralelismo de datos y tolerancia a fallos.
1 Siguiente
1/9
Spark Core.
2/9
Como veremos en el apartado del tema siguiente (Spark 2.0), actualmente se recomienda para el
desarrollo la API DataSet, aunque la API RDD no está descatalogada.
Los RDDs de Spark son un conjunto de trabajo (Working Set) para los programas distribuidos
que permiten la restricción de la memoria compartida distribuida.
Anterior 1 2 Siguiente
2/9
Spark Core.
3/9
Por otro lado, para el almacenamiento distribuido, existen varias interfaces disponibles:
Anterior 1 2 3 Siguiente
3/9
Spark Core.
4/9
Ventajas Spark
Open Source
Anterior 1 2 3 4 Siguiente
Spark Core.
5/9
Componentes Spark
Spark está basado en un núcleo o componente principal (Core) y sobre este Core hay varios
componentes que extienden su funcionalidad tales como:
1. Spark SQL: Los datos están estructurados y podemos acceder a ellos e integrar
Spark con Hive, JDBC, ODBC y herramientas de BI.
Componentes Spark
Anterior 1 2 3 4 5 Siguiente
5/9
Spark Core.
6/9
Abstracción RDD
Un RDD (Resilient Distributed Dataset) es una abstracción de Spark que hace referencia a una
colección de elementos en memoria a través del cluster en particiones. Se pueden llevar a cabo
operaciones en paralelo sobre un RDD.
Cada partición hace referencia a un subconjunto de los datos y se asigna a cada nodo para que,
paralelamente, pueda utilizar estos datos y operar con ellos.
Transmisión de datos
Anterior 1 2 3 4 5 6 Siguiente
6/9
Flume.
3/5
Conceptos (1/2)
1. Evento
Payload de bytes que Flume representa como unidad de datos y puede ser
transportado desde el origen hacia un punto de destino final.
2. Flujo
3. Cliente
4. Agente
Anterior 1 2 3 Siguiente
3/5
Flume.
3/5
Conceptos (1/2)
1. Evento
2. Flujo
3. Cliente
4. Agente
Anterior 1 2 3 Siguiente
3/5
Flume.
3/5
Conceptos (1/2)
1. Evento
2. Flujo
3. Cliente
4. Agente
Anterior 1 2 3 Siguiente
3/5
Flume.
3/5
Conceptos (1/2)
1. Evento
2. Flujo
3. Cliente
4. Agente
Proceso que tiene los componentes Flume como Fuentes (Source), Canales
(Channels) y Sumideros (Sink). Es capaz de obtener, guardar y reenviar eventos
al siguiente destino.
Anterior 1 2 3 Siguiente
3/5
Flume.
4/5
Conceptos (2/2)
1. Fuente (Source)
2. Canal (Channel)
3. Sumidero (Sink)
Anterior 1 2 3 4 Siguiente
4/5
Flume.
4/5
Conceptos (2/2)
1. Fuente (Source)
2. Canal (Channel)
3. Sumidero (Sink)
Anterior 1 2 3 4 Siguiente
4/5
Flume.
4/5
Conceptos (2/2)
1. Fuente (Source)
2. Canal (Channel)
3. Sumidero (Sink)
Anterior 1 2 3 4 Siguiente
4/5
Flume.
5/5
Anterior 1 2 3 4 5
5/5
Spark Core.
6/9
Abstracción RDD
Un RDD (Resilient Distributed Dataset) es una abstracción de Spark que hace referencia a una
colección de elementos en memoria a través del cluster en particiones. Se pueden llevar a cabo
operaciones en paralelo sobre un RDD.
Cada partición hace referencia a un subconjunto de los datos y se asigna a cada nodo para que,
paralelamente, pueda utilizar estos datos y operar con ellos.
Transmisión de datos
Anterior 1 2 3 4 5 6 Siguiente
6/9
Spark Core.
7/9
Primero tenemos que leer el archivo de entrada. El siguiente comando es utilizado para leer un
archivo de una localización dada.
Nuestro objetivo es contar las palabras de un archivo. Crearemos un mapa plano separando cada
linea en palabras flatMap(line ⇒ line.split(“”) después relleremos cada palabra como una clave
con el valor 1 usando la función map. Finalmente reduciremos esas claves añadiendo valores de
claves similares. El siguiente comando es usado para ejecutar la lógica de cuenta de palabras:
Anterior 1 2 3 4 5 6 7 Siguiente
7/9
Spark Core.
8/9
Después de ejecutar el comando no tendremos ninguna salida ya que esto no es una acción
sino una transformación.
scala> counts.saveAsTextFile("output”)
Para ver la salida nos iremos a ese directorio y veremos que nos ha creado 3 archivos.
Anterior 1 2 3 4 5 6 7 8 Siguiente
8/9
Spark Core.
9/9
Conclusion
Spark, desde sus inicios, fue diseñado y desarrollado para poner solución a muchos problemas
que Hadoop representaba. Es rápido y eficaz.
Existen bastantes proyectos reales en los que se ha utilizado y aplicado Spark con éxito y se ha
manifestado que ofrece una gran ventaja competitiva. Se ha convertido en la gran "novedad" en el
universo del Big Data.
Big data
Ejercicio
¡Correcto! ×
Anterior 1 2 3 4 5 6 7 8 9
9/9
Spark 2.0.
1/4
Apache Spark 2.0 trajo varios cambios a Apache Spark. La mayor actualización fue la usabilidad
de la API, soporte para SQL 2003, mejora de rendimientos y streaming estructurado. Esta versión
incluyo unos 2500 parches de 300 contribuidores.
Estos cambios solo modificaron el funcionamiento interno del programa y dieron soporte a más
tipos de datos, a la hora de trabajar con el programa se trabaja de la misma forma.
1 Siguiente
1/4
Spark 2.0.
2/4
Mejora de la velocidad
Una de las ventajas esenciales de Apache Spark 2.0 frente a sus versiones anteriores reside en
la velocidad, ya que, en esta nueva versión se utiliza una memoria caché integrada y se ha
avanzado en la generación de código en tiempo de ejecución.
La estimación de mejora de la velocidad de Apache Spark 2.0 frente a Apache Spark 1.0 y sus
versiones sucesivas es de entre 5 y 10 veces mayor.
En esta versión 2.0 de Spark, escuchando a los desarrolladores, está disponible una API que
permite a los programadores el desarrollo de aplicaciones que mezclen componentes en tiempo
real, interactivos y por lotes.
Para poder trabajar con esta API de Spark 2.0 es necesario que se configure un almacén de
datos con funciones ETL.
Gracias a ellos, se podrá analizar los sitios web mediante consultas interactivas de una sesión
determinada.
En esta versión, quedan unificadas en una única biblioteca las APIs DataFrame y Datasets.
Anterior 1 2 Siguiente
Spark 2.0.
3/4
Spark 2.0 es 10 veces más rápido que Spark 1.6, en gran parte porque los desarrolladores han
hecho una limpieza bastante grande de tareas que son prescindibles.
Según los análisis realizados, se estima que la mayoría de los ciclos de un motor de datos se
suele gastar en trabajos que no sirven para nada. Optimizar estos ciclos de CPU es un paso muy
importante para la mejora de la velocidad.
Spark 2.0 está basado en la segunda generación del motor de datos Tungsteno, que se acerca
mucho a un compilador. Aprovecha los registros para la escritura de datos de forma intermedia y
eliminan llamar a funciones virtuales.
Anterior 1 2 3 Siguiente
3/4
4/4
Ejercicio
?
Flume
arrastrar aquí
¡Correcto! ×
Destacar brevemente que Apache Spark 2.0 trajo varios cambios a Apache Spark. La mayor
actualización fue la usabilidad de la API, soporte para SQL 2003, mejora de rendimientos y
streaming estructurado. Esta versión incluyo unos 2500 parches de 300 contribuidores.
Anterior 1 2 3 4
4/4
Recuerda
RECUERDA
Nutch es una extensión de Lucene que permite
construir un motor de búsquedas web.
RECUERDA
Hadoop nace en el momento en que Google necesita
urgentemente una solución con la que pueda continu
procesando datos al ritmo que el mercado le demand