Вы находитесь на странице: 1из 156

Solving

Analytics Needs

Formación Cloudera
Febrero 2018
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Formación Cloudera

1. Introducción
2. Cloudera
3. Ecosistema Hadoop
4. Apache Hadoop File Storage (HDFS)
5. Sqoop
6. Kafka
7. Flume
8. Hive e Impala
9. Yarn
10. Spark

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Introducción
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Business Intelligence

Business Intelligence es la parte de la gestión


empresarial encargada de la recogida, procesamiento y
presentación de información relevante que facilite la toma
de decisiones.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Business Intelligence

Datos
El Business Intelligence tiene como objetivo principal la
búsqueda de una foto exacta y real de la Empresa.
Resultado Información
Busca cambiar: islas de información, recopilación manual,
inconsistencias, reportes planos, fragmentación, retrasos.

Busca alcanzar: visibilidad de negocio, mejora de


resultados, automatización, identificación de problemas,
Acción Conocimiento analizar información, disponibilidad, orientación a
soluciones, personalización.

Toma de
decisiones

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data

Big Data es una nueva generación de tecnologías y


arquitecturas diseñadas para extraer valor económico de
grandes volúmenes de datos heterogéneos que debido a
su volumen, variedad y/o velocidad no pueden ser
tratados de manera convencional, ya que superan los
límites y capacidades de las herramientas de software
habitualmente utilizadas para su captura, gestión y
procesamiento.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

En la pretemporada de 2002, el gerente deportivo Billy


Beane, revolucionó la historia del Oakland Athletics de las
Grandes Ligas de Béisbol de los Estados Unidos y
posiblemente del deporte en general tras fichar a un joven
economista, Peter Brand, que traía nuevas ideas.

Juntos contrataron jugadores infravalorados, pero


económicamente rentables, con un criterio de selección
muy diferente. La intuición y sapiencia de los ojeadores es
sustituida por las conclusiones de los análisis de
estadísticas y números acumulados a la hora de establecer
las necesidades del equipo y los jugadores que mejor se
adaptan a éstas.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

En la actualidad, los equipos de la NBA ya tienen


implantado el uso de datos a la hora de preparar la
estrategia de partido, mientras que la NFL tiene una
plataforma que ayuda con sus aplicaciones a los 32
equipos a tomar las mejores decisiones en base a la
analítica de datos: desde el estado de la superficie del
césped a las condiciones climatológicas, pasando por
datos de la etapa universitaria de cada jugador… todo está
registrado y todo puede servir para sacar conclusiones
diversas, como la de prevenir lesiones en jugadores.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

En Barcelona, en 2012, BBVA realizó la medición del


impacto económico del Mobile World Congress. Para ello,
se extrajeron datos de las transacciones realizadas con
tarjetas de crédito, tanto la semana antes como la semana
en que tuvo lugar el evento. Los resultados sirven para
concluir los lugares, días y horarios donde más movimiento
se originó, algo que, por ejemplo, puede servir a los
comercios para reforzar sus acciones de marketing y venta
de cara a eventos similares o a las propias ciudades para
hacer lo propio con sus promociones turísticas.

http://mwcimpact.com/

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

BBVA, conjuntamente con el Ayuntamiento de Madrid, bajo


el título Dinámicas del Turismo en la Ciudad de Madrid,
analizó el comportamiento de los turistas en cuanto a su
actividad comercial durante 2012. Entre los muchos
resultados, el estudio sirvió para cuantificar el impacto
económico del Orgullo Gay en diversas zonas de la ciudad.
El gasto comercial aumentó un 24% respecto a la misma
semana del mes anterior. Además, se conocen otros datos
interesantes como los turistas que más gastan, en qué
gastan, por dónde se mueven, etc.

http://www.centrodeinnovacionbbva.com/noticias/bbva-y-el-
ayuntamiento-de-madrid-presentan-un-innovador-estudio-
basado-en-big-data

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

Otro ejemplo sería el análisis del uso de las tarjetas de


crédito en España durante la Semana Santa de 2011 en
cuatro sectores: mercados y alimentos, bares y
restaurantes, moda y gasolineras.

https://www.youtube.com/watch?v=Zel6wych9p0#action=sh
are

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

Aunque el centro de datos del CERN cuenta con 65.000


procesadores para analizar los más de 100 petabytes de
datos (20 Pb de datos útiles al año), no es suficiente. Por
ello distribuyen la capacidad de computación entre miles de
ordenadores repartidos entre otros 150 centros de datos
por todo el mundo para analizar los datos. Esta capacidad
de computación distribuida que de otra manera sería
imposible de procesar también se emplea en muchas otras
áreas de la ciencia.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

El análisis de Big Data se está empleando de forma


intensiva en la mejora de la seguridad. Wikileaks filtró que
la NSA ha estado espiando en todas las comunicaciones
de todos los ciudadanos. El objetivo es la protección de
ataques terroristas.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

Otros usos de tecnología Big Data lo encontramos a la


hora de detectar y prevenir ciberataques. El sistema de IA
creado en el MIT predice el 85% de los ciberataques.

http://gizmodo.com/mit-s-ai-can-predict-85-percent-of-
cyber-attacks-1771549072

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Big Data. Casos de uso

El análisis y cruce de datos de la actividad delictiva en


Londres se utiliza para orientar la actuación de la policía
antes de que éstos se cometan, analizando las tendencias
clave y poniendo mayor énfasis en vigilar aquellas zonas
de mayor riesgo. Gracias a una aplicación con la que
manejan los datos son capaces de predecir con un 68% de
probabilidad si en una zona concreta se van a producir más
de 5 crímenes al mes.

http://blogthinkbig.com/big-data-bien-ciudadanos/

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Cloudera
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Cloudera

Cloudera es la empresa líder en software y servicios


basados en Apache Hadoop.

Fundada por expertos líderes en Hadoop de Facebook,


Yahoo, Google y Oracle.

Proporciona soporte, formación y certificación para


usuarios de Hadoop.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
CDH

CDH (Cloudera’s Distribution including Apache Hadoop) es


la distribución más completa, probada y popular de
Apache Hadoop.

CDH es un software de código abierto con licencia de


Apache.

Integra todos los proyectos clave del ecosistema Hadoop.

Disponible como RPMs, paquetes de Ubuntu, Debian o


SuSE o como tarball.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Cloudera Express

Disponible en la web de Cloudera para su descarga y uso.

Incluye CDH.

Incluye una versión de Cloudera Manager sin


características de negocio como actualizaciones
periódicas, recuperación de fallos y copias de seguridad.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Cloudera Enterprise

Subscripción al producto que incluye CDH, Cloudera


Manager y soporte.

Proporciona funciones avanzadas, como:


 Informes operaciones y de utilización
 Historial de configuración y rollbacks
 Actualizaciones periódicas
 Autenticación externa (LDAP / SAML)
 Copias de seguridad automáticas y recuperación de
fallos
 Governance y Data Management
 Optimización de datos activa
 Encriptación
 Gestión de claves

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hadoop
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hadoop

“In pioneer days they used oxen for heavy pulling, and
when one ox couldn’t budge a log, we didn’t try to grow a
larger ox. We shouldn’t be trying for bigger computers, but
for more systems of computers.”.
- Grace Murray Hopper

Problemática de los sistemas distribuidos:


 Complejidad de la programación: Mantener datos y
procesos sincronizados.
 Ancho de banda finito.
 Fallos parciales.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hadoop

Hadoop proporciona un sistema de almacenamiento,


procesamiento y análisis de datos escalable y económico.

Distribuido y tolerante a fallos.

Usado principalmente para ETL, minería de datos,


construcción de índices, creación y análisis de gráficos,
reconocimiento de patrones, filtración colaborativa,
modelos predictivos, evaluación del riesgo, …

¿Qué tienen en común estas tareas? La naturaleza de los


datos: Volumen, Velocidad, Variedad..

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hadoop

Tradicionalmente, los datos son almacenados en una


localización. Cuando los datos son necesarios, son
copiados a los procesadores en tiempo de ejecución.

Hadoop proporciona un nuevo enfoque: Llevar los


programas a los datos en lugar de los datos a los
programas.

Los datos se distribuyen cuando son almacenados y los


programas se ejecutan allí donde residen los datos.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hadoop Core

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Storage

HDFS HBase Kudu

• HDFS (Hadoop Distributed File • Apache HBase es una base de • Apache Kudu proporciona
System) es la capa de datos distribuida NoSQL basada almacenamiento columnar
almacenamiento para Hadoop. en HDFS. distribuido (par clave/valor) para
datos estructurados.
• Proporciona almacenamiento • Soporta cantidades muy
fiable y económico para grandes de datos. • Permite acceso aleatorio y
cantidades masivas de datos. actualización de datos.
• Alto rendimiento.
• Los datos se distribuyen cuando • Trabaja directamente en el
se almacenan.. • Una tabla puede tener miles de sistema de archivos nativo; no
columnas. está construido en HDFS.

• Se integra con Spark,


MapReduce y Apache Impala.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Data ingest

HDFS Sqoop Flume

• Transferencia directa de • Permite importar a HDFS de • Servicio distribuido para la


archivos. bases de datos relacionales y ingesta de datos en streaming.
viceversa. • Ideal para archivos de log.

Kafka

• Sistema de mensajería
escalable y de alto rendimiento.
• Se integra con Flume y Spark
Streaming.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Data processing

Spark Map Reduce Pig

• Motor de procesamiento de • Framework original de Hadoop, • Ofrece procesamiento de datos


datos a gran escala de propósito basado en el modelo de de alto nivel (script).
general. programación MapReduce.
• Especialmente útil para unir y
• Se ejecuta en clústeres Hadoop. • Todavía es la tecnología transformar datos.
dominante, pero pierde terreno
rápidamente en favor de Spark.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Data analysis and exploration

Impala Hive Cloudera Search

• Motor SQL de alto rendimiento. • Capa de abstracción sobre • Búsqueda interactiva textual de
Hadoop. datos en un clúster Hadoop.
• Los datos se encuentran
almacenados en archivos • Utiliza un lenguaje similar al • Permite a usuarios no técnicos
HDFS, modelados como tablas SQL llamado HiveQL. acceder a los datos.
de bases de datos. Ideal para el
análisis interactivo. • Útil para procesamiento de • Cloudera Search mejora Apache
datos y ETL. Solr, integrándolo con HDFS,
• Soporta un dialecto de SQL MapReduce, HBase y Flume.
(Impala SQL).
• 100% de código abierto.
• Desarrollado por Cloudera.
100% de código abierto.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Otras herramientas

Hue Oozie Sentry

• Proporciona un front-end web • Motor workflow para Hadoop. • Proporciona control de acceso a
para Hadoop. Define las dependencias entre varios componentes del
los Jobs. ecosistema de Hadoop (Impala,
• Desarrollado por Cloudera. Hive, Cloudera Serach, HDFS).
100% de código abierto.
• Conjuntamente con Kerberos,
proporciona una solución
completa de seguridad.

• Creado por Cloudera, ahora es


un proyecto Apache de código
abierto

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
HDFS
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
HDFS
HDFS es un sistema de archivos escrito en Java, basado
en GFS de Google.
Se sitúa encima del sistema de archivos nativo.
Proporciona almacenamiento redundante para cantidades
masivas de datos.
Los archivos en HDFS son 'write once', no se permiten
'random writes'.

Los archivos se dividen en bloques de


128MB que se distribuyen en el tiempo de
carga.
Cada bloque se duplica en múltiples nodos
de datos (por defecto 3x).
El servicio DataNode almacena los datos.
El servicio NameNode almacena los
metadatos.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
HDFS
El servicio NameNode debe estar
ejecutándose en todo momento. Si el
servicio NameNode se detiene, el
clúster se vuelve inaccesible

HDFS típicamente está configurado


para alta disponibilidad
 Dos NameNodes: Active y StandBy.
 Standby NameNode se hace cargo
automáticamente si NameNode
Active falla.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Línea de comandos
Comando Descripción
hdfs --help Mostrar la ayuda de HDFS
hdfs dfs -help Mostrar los comandos de tratamiento del filesystem
hdfs dfs -help put Mostrar la ayuda del comando put
hdfs dfs -put foo.txt foo.txt Copiar el fichero local foo.txt al directorio del usuario en HDFS. Este
comando copia el fichero a /user/username/foo.txt. Las rutas son relativas
al directorio del usuario
hdfs dfs -ls Mostrar el contenido del directorio del usuario
hdfs dfs -ls / Mostrar el contenido del directorio raíz
hdfs dfs -cat /user/fred/bar.txt Mostrar el contenido del archivo /user/fred/bar.txt
hdfs dfs -get /user/fred/bar.txt baz.txt Copiar el archivo HDFS /user/fred/bar.txt al archivo local baz.txt
hdfs dfs -mkdir input Crear un directorio llamado input en el directorio del usuario
hdfs dfs -rm -r input_old Borrar el directorio input_old y todo su contenido

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
HUE File Browser
El File Browser de Hue permite gestionar los directorios y ficheros HDFS.
.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Formato de archivos
Hadoop y las herramientas del ecosistema Hadoop usan diferentes formatos de fichero para almacenar la
información. Los más usuales son:

 Ficheros de texto
 Ficheros secuenciales
 Ficheros Apache Avro
Almacenamiento eficiente debido a una codificación binaria optimizada
Ampliamente compatible en todo el ecosistema de Hadoop
Auto descriptivo. Incorpora el esquema en formato JSON, en el archivo.
El esquema puede evolucionarse para acomodar cambios en el mismo.
 Fichero Apache Parquet
Almacenamiento en formato columnar desarrollado por Cloudera y Twitter
Ampliamente compatible en todo el ecosistema de Hadoop
Auto descriptivo. Incorpora el esquema, en formato JSON, en el archivo

HDFS considera los ficheros simplemente como una secuencia de bytes.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Formato de archivos
Formato Text File SequenceFile Avro Parquet

Soportado por múltiples herramientas   


Buen rendimiento a escala   
Formato binario   
Esquema embebido  
Organización columnar 

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Formato de archivos
Los formatos de fichero soportan también compresión. Con ello se reduce la cantidad de espacio
necesario para almacenar datos, pero también requieren tiempo de CPU para comprimir/descomprimir la
información.

Los algoritmos de compresión pueden mejorar


significativamente el rendimiento:
 Muchas tareas en Hadoop utilizan extensivamente
operaciones de E/S
 La compresión de datos permite manejar más información
por cada operación de E/S
 También mejora el rendimiento en la transferencia de datos
a través de red

La implementación de un algoritmo de compresión es


conocida como códec. Diversos códec’s son usados en
Hadoop, pero no todas las herramientas son compatibles con
todos los códec’s

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios HDFS
Páginas 6-8
SQOOP
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Sqoop
Scoop es un Proyecto de código abierto de Apache
originalmente desarrollado por Cloudera. El nombre es
una contracción de SQL to Hadoop.

Sqoop permite intercambiar datos entre bases de datos y


Hadoop.

Sqoop es una aplicación cliente que importa datos usando Hadoop


MapReduce
Una importación implica tres pasos:
1. Examinar detalles de la tabla
2. Crear y enviar job al clúster
3. Obtener registros de la tabla y escribir esta información en
HDFS

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Línea de comandos
Comando Descripción
sqoop help Mostrar la ayuda de Sqoop
sqoop help tool-name Mostrar la ayuda de un comando de Scoop
sqoop tool-name [tool-options] Sintaxis básica de Scoop
sqoop list-tables El comando list-tables muestra el nombre de todas las tablas de una
--connect jdbc:mysql://dbhost/dbname base de datos
--username dbuser
--pasword dbpassword
sqoop eval Ejecuta la sentencia indicada en la opción --query en la base de datos
--connect jdbc:mysql://dbhost/dbname
--username dbuser
--pasword dbpassword
--query "SELECT … * FROM …"

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Línea de comandos
Comando Descripción
sqoop import-all-tables El comando import-all-tables importa una base de datos entera
--connect jdbc:mysql://dbhost/dbname El resultado es almacenado en ficheros delimitados por coma. La
--username dbuser información es almacenada en subdirectorios, correspondiéndose cada
--pasword dbpassword subdirectorio con el nombre de la tabla y localizándose estos
subdirectorios en el directorio del usuario
sqoop import --table tableName El comando import importa una única tabla
--connect jdbc:mysql://dbhost/dbname El resultado es almacenado en ficheros delimitados por coma. La
--username dbuser información es almacenada en subdirectorios, correspondiéndose cada
--pasword dbpassword subdirectorio con el nombre de la tabla y localizándose estos
subdirectorios en el directorio del usuario
sqoop export --table tableName El comando export exporta una tabla hacia la base de datos relacional
--connect jdbc:mysql://dbhost/dbname La tabla debe existir previamente en la base de datos para realizar la
--username dbuser exportación
--pasword dbpassword
--export-dir /directory
--update-mode allowinser

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Línea de comandos
Comando Descripción
--warehouse-dir /folder Especifica un directorio base
--target-dir /folder Especifica un directorio específico donde depositar la información de la
tabla (comando import)
--fields-terminated-by “\t” Especifica un separador de campo distinto a la coma
--incremental lastmodified Especifica una importación incremental, utilizando para ello una
--check-column mod_dt columna de tipo timestamp
--last-value '2017-04-30 18:00:00‘
--incremental append Especifica una importación incremental, a partir del último valor de una
--check-column id columna dada
--last-value 12345
--columns “column1, column2, …” Limita las columnas a importar

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Línea de comandos
Comando Descripción
--target-dir /directory Especifica una consulta para realizar la importación
--query Es necesario añadir el literal WHERE $CONDITIONS a la
'SELECT … sentencia
FROM … Es obligatorio añadir la opción --target-dir
WHERE $CONDITIONS and …’
--split-by id Divide el trabajo de acuerdo a los valores indicados en la
columna
-m <n> Indica el número de tareas a utilizar para realizar importaciones
--num-mappers <n> en paralelo
--compression-codec Almacena la información en archivos comprimidos
org.apache.hadoop.io.compress.SnappyCodec
--as-textfile Almacena la información en archivos con formato textfile
--as-sequencefile Almacena la información en archivos con formato sequencefile
--as-parquetfile Almacena la información en archivos con formato parquet
--as-avrodatafile Almacena la información en archivos con formato avro
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Sqoop
Páginas 10-14
KAFKA
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Conceptualmente, Apache Kafka es similar a un sistema de mensajería de publicación y subscripción.

Posee las siguientes características:


 Escalable: Kafka es un sistema distribuido que admite múltiples nodos
 Tolerante a fallos: Los datos se conservan en el disco y se pueden replicar en todo el clúster
 Alto rendimiento: Cada nodo puede procesar cientos de miles de mensajes por segundo
 Baja latencia: Los datos se entregan en una fracción de segundo
 Flexible: Desacopla la producción de datos de su consumo

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Algunos conceptos clave de Kafka son:

 Message: Un registro de datos


 Topic: Un registro o Fuente de mensajes con nombre en Kafka
 Producer: Un programa que escribe mensajes a Kafka
 Consumer: Un programa que lee mensajes de Kafka

Kafka almacena todos los mensajes durante un periodo de


tiempo o un tamaño total predeterminados.

Los administradores pueden definir un periodo de


tiempo/tamaño global o específico para cada topic.

Una vez superado el periodo/tamaño establecidos, Kafka


descarta los mensajes.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Herramientas disponibles como parte de Kafka:
 Consumidor y productor de línea de comando
 API Java (productor y consumidor)

Asimismo, existe un número creciente de otras API’s ofrecidas por terceros:


 Bibliotecas de clientes en muchos lenguajes, incluidos Python, PHP, C / C ++, Go, .NET y Ruby

Existen integraciones con otras herramientas y proyectos, que incluyen:


 Apache Flume
 Apache Spark
 Amazon AWS
 syslog

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Kafka divide la información de cada topic en particiones. Una partición de un topic es una secuencia
ordenada e inmutable de mensajes.

 Los nuevos mensajes son añadidos a la partición según son recibidos


 A cada mensaje se le asigna un ID secuencial único denominado offset

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Uno o más consumidores pueden formar un grupo de consumidores que trabajan juntos para consumir
los mensajes.

 Cada partición es consumida por solo un miembro de un grupo de consumidores


 El orden de los mensajes se conserva por partición, pero no a través del topic

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Cada mensaje publicado en un topic se entrega a una instancia de consumidor dentro de cada grupo de
consumidores suscriptores

Kafka permite escalar a un gran número de grupos de consumidores y consumidores.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
Un clúster Kafka clúster consiste en uno o más brókeres. Un bróker es un servidor corriendo el servicio
Kafka Broker.

Kafka depende del servicio Apache ZooKeeper para la coordinación entre los brókeres.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Kafka
En la creación de un topic, se puede establecer un factor de réplica.

Cada bróker puede actuar como líder para algunas particiones del topic y como seguidor para otras.
 Los seguidores replican, de forma pasiva, la información del líder
 Si el líder falla, un seguidor se convierte en Nuevo líder automáticamente

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Línea de comandos
Comando Descripción
kafka-topics --create Crear un nuevo topic en el clúster Kafka, con factor de replicación 3 y
--zookeeper zkhost1:2181, … 5 particiones. Para indicar la ubicación del clúster, indicamos el
--replication-factor 3 servicio zookeeper asociado al mismo.
--partitions 5
--topic topic_name
kafka-topics --list Mostrar los topics creados en el clúster Kafka
--zookeeper zkhost1:2181, …
kafka-topics –help Mostrar la ayuda de kafka-topics
kafka-console-producer Crear un productor en la línea de comandos. Se indican los brokers
--broker-list brokerhost1:9092, … de Kafka y el nombre del topic sobre el que se escribirán los
--topic topic_name mensajes
kafka-console-consumer Crea un consumidor en la línea de comandos. El parámetro opcional
--zookeeper zkhost1:2181, … --from-beginning indica que los mensajes deben ser consumidos
--topic topic_name desde el primero. Si no es indicado, se consumirán los mensajes a
[--from-beginning] partir de la creación del consumidor

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Kafka
Páginas 16-18
FLUME
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Flume
Apache Flume es un sistema para recopilación de datos de alto rendimiento.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Flume
Flume recopila datos utilizando agentes configurables:

 Los agentes pueden recibir datos de muchas fuentes, incluidos otros agentes
 Flume admite la inspección y modificación de datos en vuelo

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Flume
Un evento es la unidad fundamental de datos en Flume. Consiste en una colección de cabeceras y un
cuerpo. La cabecera consiste en pares clave-valor.

Los componentes de Flume son:


 Agent: Configura y compone el Source, el Sink y el Channel
 Source: Recive eventos de un actor externo que los genera
 Channel: Almacena los eventos del origen hasta que son consumidos por el Sink
 Sink: Envía un evento a su destinatario

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Flume
Sources Descripción
syslog Captura eventos del servicio syslog de UNIX a través de la red
netcat Captura evento escritos en un socket sobre un puerto TCP
exec Ejecuta un programa UNIX y obtiene la salida estándar
spooldir Obtiene eventos de los ficheros de un directorio específico (local)
HTTP Source Obtiene evento de peticiones HTTP
Kafka Obtiene eventos consumiendo mensaje de un topic Kafka

Channels Descripción
Memory Almacena los eventos en la memoria RAM
Disk Almacena los eventos en ficheros del filesystem local
Kafka Usa Kafka como canal entre el origen y del destino

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Flume
Sinks Descripción
null Descarta todos los eventos
logger Guarda los eventos en archivos de log con nivel INFO usando SLF4J
IRC Envía los eventos a un Internet Relay Chat
HDFS Almacena los eventos en archivos en directorios específicos de HDFS
Kafka Envía los eventos como mensajes a un topic Kafka
HBase Sink Almacena los eventos en HBASE

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Flume

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Flume
Páginas 20-21
HIVE E IMPALA
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hive e Impala
Hive e Impala proporcionan una capa para realizar consultas SQL sobre datos almacenados en HDFS o
en HBASE.

 Apache Hive proporciona una capa de  Cloudera Impala es un motor de SQL dedicado
abstracción sobre MapReduce. de alto rendimiento.
 Utiliza HiveQL.  Utiliza Impala SQL.
 Genera trabajos MapReduce o Spark que se  Su motor SQL especializado ofrece un mejor
ejecutan en el clúster Hadoop. rendimiento (de 5x a 50x).
 Soporta tipos de datos complejos (arrays,
maps).

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hive e Impala

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Hive e Impala
Relational Database Hive Impala
Query language SQL HiveQL (SQL subset) Impala SQL (SQL subset)
Actualización de registros Sí No No
Borrado de registros Sí No No
Transacciones Sí No No
Soporte de índices Completo Limitado No
Latencia Muy baja Alta Baja
Tamaño de los datos Terabytes Petabytes Petabytes

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Query language
Consulta Descripción
CREATE DATABASE [IF NOT EXISTS] databaseName Crea una nueva base de datos
Añade la definición de la base de datos al metastore y crea un
directorio de almacenamiento en HDFS
(/user/hive/warehouse/databasename.db)
DROP DATABASE databaseName Elimina una base de datos
La sentencia devuelve error si la base de datos contiene tablas
DROP DATABASE databaseName CASCADE Elimina una base de datos eliminando también las tablas que
contiene (sólo Hive)
USE databaseName Selecciona una base de datos. Las consultas subsiguientes se
realizarán contra elementos de esta base de datos
CREATE TABLE tableName ( Crea una tabla en la base de datos
column1 DATATYPE, Añade la definición de la tabla al metastore y crea un directorio
column2 DATATYE, de almacenamiento en HDFS
…) (/user/hive/warehouse/databasename.db/tablename)

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Tipos de datos
Tipo de dato Descripción Ejemplo
STRING Caracteres (cualquier longitud) Hello World!
BOOLEAN TRUE | FALSE TRUE
TIMESTAMP Instante de tiempo 2017-05-08 16:02:20
INT Java Int 84127213
BIGINT Java Long 7613292936514215317
FLOAT Java Float 3.14159

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Query language
Consulta Descripción
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name Al borrar una tabla se eliminan sus
(col_name data_type [COMMENT 'col_comment'], ...) metadatos y los archivos de datos asociadas
[COMMENT 'table_comment'] a la misma. La cláusula EXTERNAL
[ROW FORMAT row_format] previene este problema, eliminando sólo los
[STORED AS file_format] metadatos y manteniendo los ficheros de
[LOCATION 'hdfs_path'] datos
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name Permite añadir descripciones a la tabla o a
(col_name data_type [COMMENT 'col_comment'], ...) las columnas que la componen
[COMMENT 'table_comment']
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION 'hdfs_path']
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name Establece el formato de registro
(col_name data_type [COMMENT 'col_comment'], ...) ROW FORMAT
[COMMENT 'table_comment'] DELIMITED
[ROW FORMAT row_format] [FIELDS TERMINATED BY 'char'
[STORED AS file_format] [ESCAPED BY 'char']]
[LOCATION 'hdfs_path'] [LINES TERMINATED BY 'char']

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Query language
Consulta Descripción
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name Permite establecer el formato de archivo
(col_name data_type [COMMENT 'col_comment'], ...) para los ficheros de datos
[COMMENT 'table_comment']
[ROW FORMAT row_format] STORED AS
[STORED AS file_format] TEXTFILE | SEQUENCEFILE | AVRO |
[LOCATION 'hdfs_path'] PARQUET
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name Permite establecer una ubicación distinta a
(col_name data_type [COMMENT 'col_comment'], ...) la establecida por defecto para almacenar
[COMMENT 'table_comment'] los ficheros de datos
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION 'hdfs_path']
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name Permite crear una tabla obteniendo su
LIKE PARQUET ‘parquet file’ estructura directamente de la estructura
[COMMENT 'table_comment'] almacenada en el fichero parquet, sin
[ROW FORMAT row_format] necesidad de especificar las columnas (sólo
[STORED AS file_format] Impala).
[LOCATION 'hdfs_path']

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Query language
Hive e Impala son schema on read. Los datos no se validan durante las inserciones, por lo que los
errores son descubiertos en las consultas. Los datos inválidos son representados como NULL

Consulta Descripción
LOAD DATA INPATH ‘/path/file’ El comando LOAD DATA INPATH permite incorporar ficheros a una tabla.
[OVERWRITE] INTO TABLE tableName; La cláusula OVERWRITE elimina el contenido de la tabla antes de
almacenar los nuevos ficheros
INSERT INTO TABLE tableName Permite cargar datos en una tabla a partir que datos almacenados en otras
SELECT … FROM anotherTableName tablas
sqoop import --table tableName Sqoop puede importer datos en Hive e Impala directamente. Para ello se
--conect jdbc:mysql://dbhost/dbname utiliza la opción --hive-import. Este comando crea la tabla en el metastore
--username dbuser e importa los datos en HDFS.
--pasword dbpassword
--hive-import

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Impala caché
Impala cachea la información de los metadatos.

Por ello, cualquier cambio que se realice desde fuera de


Impala (importaciones Sqoop, procesos Spark, …) no es
reconocido, por lo que hay que refrescar la información de
caché.

INVALIDATE METADATA [tablename] invalida la


información de todos los metadatos o de una tabla
específica. Esta información es regenerada la próxima vez
que sea necesaria.

REFRESH tablename invalida la información de los


metadatos de una tabla concreta, regenerándose esta
información en el momento.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Hive e Impala
Páginas 23-28
Esquemas AVRO
Avro utiliza un esquema en JSON para almacenar la definición de su estructura. Este esquema se
encuentra almacenado en los propios ficheros Avro.

SQL Esquema Avro


CREATE TABLE employees ( {"namespace":"com.loudacre.data",
id INT, "type":"record",
name STRING, "name":"Employee",
title STRING, "fields":[
bonus INT) {"name":"id", "type":"int"},
{"name":"name", "type":"string"},
{"name":"title", "type":"string"},
{"name":"bonus", "type":"int"}]
}

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Esquemas AVRO
Esquema Avro Descripción
{"namespace":"com.loudacre.data", Los valores NULL únicamente son admitidos solamente si
"type":"record", se especifican explícitamente en el esquema
"name":"Employee",
"fields":[
{"name":"id", "type":"int"},
{"name":"name", "type":"string"},
{"name":"title", "type":["null","string"]},
{"name":"bonus", "type":["null","int"]}]
}
{"namespace":"com.loudacre.data", Pueden definirse valores por defecto para cada uno de los
"type":"record", campos
"name":"Invoice",
"fields":[
{"name":"id", "type":"int"},
{"name":"taxcode", "type":"int", "default":"39"},
{"name":"lang", "type":"string", "default":"EN_US"}]
}

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Esquemas AVRO
Esquema Avro Descripción
{"namespace":"com.loudacre.data", Avro permite definir tipos complejos, que están soportados
"type":"record", por Hive, pero no por Impala
"name":"CustomerServiceTicket",
"fields":[
{"name":"id", "type":"int"},
{"name":"agent", "type":"string"},
{"name":"category", "type":{
"name":"CSCategory", "type":"enum",
"symbols":["Order","Shipping","Device"]}
},
{"name":"tags", "type":{
"type":"array", "items":"string"}
}]
}

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Esquemas AVRO
Esquema Avro Descripción
{"namespace":"com.loudacre.data", Avro también admite el atributo opcional
"type":"record", doc
"name":"WebProduct",
"doc":"Item currently sold in Loudacre's online store",
"fields":[
{"name":"id", "type":"int", "doc":"Product SKU"},
{"name":"shipwt", "type":"int", "doc": "Shipping weight, in pounds"},
{"name":"price", "type":"int", "doc":"Retail price, in cents (US)"}]
}

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Evolución de un esquema AVRO
La estructura de los datos evoluciona a lo largo del tiempo. Los datos en ficheros Avro pueden leerse
siempre, ya que el esquema se encuentra embebido en los propios ficheros. Sin embargo, aplicaciones
que lean dichos datos pueden estar esperando un esquema diferente.
Imaginemos que disponemos de millones de registros con una estructura determinada y deseamos
evolucionarla. Las nuevas aplicaciones podrán leer/escribir nuevos datos, pero desafortunadamente no
podrán leer la información almacenada con el esquema anterior.

Esquema original Esquema evolucionado


{"namespace": "com.loudacre.data", {"namespace": "com.loudacre.data",
"type": "record", "type": "record",
"name": "CustomerContact", "name": "CustomerContact",
"fields": [ "fields": [
{"name": "id", "type": "int"}, {"name": “idcustomerId", "type": "intlong"},
{"name": "name", "type": "string"}, {"name": "name", "type": "string"},
{"name": "faxNumber", "type": "string"} {"name": "faxNumber", "type": "string"},
]} {"name": "prefLang", "type": "string”},
{"name": "email", "type": "string"}
]}

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Evolución de un esquema AVRO
Esquema Avro Descripción
{"namespace": "com.loudacre.data", "type": "record", Al cambiar el nombre de un campo, debe
"name": "CustomerContact", especificarse un alias para el nombre anterior
"fields": [
{"name":"customerId", "type":"long", "aliases":["id"]},
{"name":"name", "type":"string"},
{"name":"prefLang", "type":"string", "default":"en_US"},
{"name":"email", "type":["null","string"],"default":null}
]}
{"namespace": "com.loudacre.data", "type": "record", Al añadir nuevos campos, debe especificarse un
"name": "CustomerContact", valor por defecto para los mismos
"fields": [
{"name":"customerId", "type":"long", "aliases":["id"]},
{"name":"name", "type":"string"},
{"name":"prefLang", "type":"string", "default":"en_US"},
{"name":"email", "type":["null","string"],"default":null}
]}

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Uso de AVRO con Hive e Impala
Para crear una tabla en Hive/Impala que utilice ficheros con formato Avro, podemos especificar su
estructura en la creación de la tabla.

. Consulta Descripción
CREATE TABLE order_details_avro STORED AS AVRO Indicamos el esquema Avro en la creación
TBLPROPERTIES ('avro.schema.literal'= de la tabla
'{"name": "order",
"type": "record",
"fields": [
{"name":"order_id", "type":"int"},
{"name":"cust_id", "type":"int"},
{"name":"order_date", "type":"string"}
]}');
CREATE TABLE order_details_avro Indicamos la ubicación del esquema Avro.
STORED AS AVRO Puede utilizarse el archivo con el esquema
TBLPROPERTIES generado por la utilidad Sqoop
('avro.schema.url'='hdfs://localhost/directory/accounts_schema.json');

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Hive e Impala
Páginas 29-31
Compresión
Al crear una tabla en Hive/Impala podemos indicar que utilice un códec de compresión de datos.

.
Consulta Descripción
CREATE TABLE mytable_parquet … Indicamos el códec de compresión para archivos de tipo
STORED AS PARQUET; Parquet

set PARQUET_COMPRESSION_CODEC=snappy;

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Particionamiento
Por defecto, todos los archivos asociados a una
tabla están almacenados en un único directorio.

Todos los ficheros del directorio son leídos


durante una consulta o un proceso.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Particionamiento
El particionamiento divide los datos. El análisis o
los procesos pueden realizarse sobre un
subconjunto relevante de datos.

Hadoop usa subdirectorios para el


particionamiento.

También es posible realizar subparticionamiento.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Particionamiento en Hive e Impala
Consulta Descripción
CREATE EXTERNAL TABLE accounts_by_state( Particionamos una tabla especificando el campo de
cust_id INT, partición en su creación. La columna de
fname STRING, particionamiento es creada como una columna virtual,
lname STRING, pero no se incluye en los ficheros de datos
address STRING,
city STRING,
state STRING,
zipcode STRING)
PARTITIONED BY (state STRING)

ALTER TABLE call_logs Creación estática de una partición
ADD PARTITION (call_date='2014-10-02');
ALTER TABLE call_logs Borrado de una partición
DROP PARTITION (call_date='2014-10-02');
LOAD DATA INPATH '/mystaging/call-20141002.log' Carga de datos en una partición
INTO TABLE call_logs PARTITION(call_date='2014-10-02');

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Particionamiento en Hive e Impala
Consulta Descripción
INSERT OVERWRITE TABLE accounts_by_state Las particiones también pueden crearse
PARTITION(state) dinámicamente
SELECT cust_id, fname, lname, address, city, zipcode, state
FROM accounts
SET hive.exec.dynamic.partition=true; En versiones antiguas de Hive, el particionamiento
SET hive.exec.dynamic.partition.mode=nonstrict; dinámico no está habilitado, por lo que es necesario
habilitarlo previamente

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Hive e Impala
Páginas 32-33
YARN
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Yarn
YARN (Yet Another Resource Negotiator) es la capa de procesamiento de Hadoop
que contiene un administrador de recursos y un planificador de jobs.

Lo componen los siguientes servicios:

 ResourceManager (RM)  Contenedores


Se ejecuta en un Master Node Asignan recursos (memoria, núcleos de CPU) en un
Es un planificador de recursos globales Worker Node
Arbitra los recursos entre competidores Las aplicaciones se ejecutan en uno o más
contenedores
 NodeManager (NM) Los clientes solicitan contenedores de RM
Se ejecuta en los nodos de los Worker Node
Se comunica con RM  ApplicationMaster (AM)
Administra los recursos de los nodos Uno por aplicación
Lanza contenedores Se ejecuta en un contenedor
Solicita más contenedores para ejecutar tareas de
aplicación.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Yarn

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
SPARK
NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark
Apache Spark es un motor para procesamiento de
datos a gran escala.

Dispone de dos modos de ejecución:

Spark Shell:
 Interactivo.
 Útil para el aprendizaje o la exploración de datos.
 Programable en Python (pyspark) o Scala
(spark-shell).

Spark Application:
 Para procesamiento de datos a gran escala.
 Programable en Python, Scala o Java.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark Context
Todas las aplicaciones en Spark requieren un Spark Context, que proporciona el principal punto de
acceso a la API de Spark.
Spark Shell proporciona un Spark Context predeterminado, llamado sc.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark RDDs
La unidad fundamental de datos en Spark es el RDD (Resilient Distributed Dataset):
 Resilient: si se pierden datos en la memoria, se pueden recrear.
 Distributed: procesado a través del cluster.
 Dataset: los datos iniciales pueden provenir de un archivo o pueden crearse mediante programación.
Existen tres modos de crear un RDD: de un fichero o conjunto de ficheros, de datos en memoria o a partir
de otro RDD.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark RDDs
Existen dos operaciones básicas con RDD:

Actions: devuelven un valor.


Transformations: definen un nuevo RDD a partir del actual.

Las transformaciones crean un nuevo RDD a partir de uno existente. Los RDD son inmutables. Los datos
en un RDD nunca cambian.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark RDDs
Algunas acciones comunes son:

count(): devuelve el número de elementos del


RDD.

take(n): devuelve un array con los primeros n


elementos del RDD.

collect(): devuelve un array con todos los


elementos del RDD.

saveAsTextFile(file): graba el RDD en fichero(s).

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark RDDs
Algunas transformaciones comunes
son:

map(function): crea un nuevo RDD


realizando una función en cada
registro en el RDD origen.

filter(function): crea un nuevo RDD


excluyendo registros de acuerdo a
una función booleana.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Spark
Páginas 35-36
Spark RDDs
Las transformaciones pueden encadenarse en un único comando.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Lazy execution
Los datos en un RDD no son procesados hasta que una acción es efectuada.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark RDDs
Spark mantiene el linaje de cada RDD (los RDD anteriores de los que depende.
El método toDebugString permite ver el linaje de un RDD.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Spark RDDs functions
Spark depende en gran medida de los conceptos
de programación funcional.
 Las funciones son la unidad fundamental de
la programación
 Las funciones sólo tienen entrada y salida

Funciones anónimas: Funciones definidas en


línea sin un identificador.
Soportado por muchos lenguajes de
programación.
 Python: lambda x: ...
 Scala: x => ...
 Java 8: x -> ...

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Spark
Páginas 37-41
Spark RDDs
Los RDD’s pueden contener cualquier tipo de elementos:
 Tipos primitivos: enteros, caracteres, booleans, …
 Secuencias: Strings, listas, arrays, …
 Objetos Scala/Java
 Tipos mixtos

Algunos tipos de RDDs tienen funcionalidad adicional:


 Pair RDDs: RDDs que contienen pares Clave-Valor
 Double RDDs: RDDs que contienen valores numéricos

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating RDDs
Existen varias formas de crear un RDD.

A partir de ficheros
 sc.textFile(file)

A partir de otros RDD’s


 sc.map()

A partir de una colección


 sc.parallelize(collection)

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating RDDs
Al crear un RDD a partir de un fichero de texto con el comando sc.textFile(file), el nombre del fichero se
indica a través de URI (Uniform Resource Identifier / Identificador de recursos uniforme)
 file:/home/training/myfile.txt
 hdfs://localhost/training/myfile.txt
Si no se especifica esquema, se utiliza el esquema por defecto del sistema.
textFile mapea cada línea del fichero en un elemento del RDD.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating RDDs
Otras instrucciones que permiten crear RDD’s a partir de ficheros son:

Instrucción Descripción
sequenceFile(file) Crea un RDD a partir de ficheros secuenciales
saveAsSequenceFile(file)
hadoopFile / newAPIhadoopFile Crea un RDD a partir de un fichero. Permite especificar el
saveAsHadoopFile / saveAsNewAPIhadoopFile formato del fichero

textFile realiza una llamada a hadoopFile especificando TextInputFormat como formato de fichero.
saveAsTextFile realiza una llamada a saveAsHadoopFile indicando TextOutputFormat como formato de
fichero.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating RDDs
Otra acción que nos permite crear RDD’s a partir de ficheros
 wholeTextFiles(directory)

textFile mapea cada línea del fichero en un elemento del RDD.

wholeTextFiles(directory) mapea el contenido de cada fichero indicado en


un elemento del RDD. Cada elemento del RDD estará formado por un par
compuesto por el nombre del fichero y el contenido del mismo.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Transformations
Las transformaciones crean un nuevo RDD a partir de uno existente. Pueden ser simples o multiples:

Transformación single-RDD Descripción


flatMap Mapea un elemento del RDD base en múltiples elementos
distinct Filtra duplicados
sortBy Ordena los datos del RDD
first Obtiene el primer elemento de un RDD
foreach Aplica una función a cada elemento de un RDD

Transformación multi-RDD Descripción


intersection Crea un nuevo RDD con los elementos existentes en los RDD’s originales
union Añade los elementos de dos RDD’s en uno nuevo
zip Empareja cada elemento del primer RDD con su correspondiente elemento del
segundo

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Transformations

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Transformations

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Spark
Páginas 42-49
Pair RDDs
Los Pair RDDs son una forma especial de RDD en el que cada elemento debe ser un par tipo-valor
(dupla de dos elementos).

Los elementos de la dupla pueden ser de cualquier tipo.

Este tipo de RDD son usados en algoritmos map-reduce e incorporan funciones comunes como
ordenación, agrupamiento, conteo, etc…

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Pair RDDs

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Pair RDDs

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Map-Reduce
Los algoritmos map-reduce trabajan sobre Pair RDDs.

Estos algoritmos operan en dos fases.

Fase Map.
 Operan registro a registro
 Mapean cada registro a otro o más registros
 Ejemplos: map, flatMap, filter, keyBy

Fase Reduce.
 Operan sobre los resultados de la fase Map
 Consolidan múltiples registros
 Ejemplos: reduceByKey, sortByKey, mean.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Map-Reduce

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Map-Reduce
Las funciones Reduce deben tener las siguientes características:

Deben ser binarias


Deben ser conmutativas: a + b = b + a
Deben ser asociativas: (a + b) + c = a + (b + c)

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Pair RDDs

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Pair RDDs

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Map-Reduce
Otras operaciones pair RDDs:

 keys: Devuelve un RDD con las claves del pair RDD, sin los valores.
 values: Devuelve un RDD con los valores del pair RDD, sin las claves.
 Lookup(key): Devuelve el valor para la clave indicada.
 leftOuterJoin, rightOuterJoin, fullOuterJoin: Joins
 mapValues, flatMapValues: Ejecutan una función en cada uno de los valores, dejando la clave intacta.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Spark
Páginas 50-54
Parallel processing

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Parallel processing

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Stages and tasks
Application: Conjunto de jobs gestionados por un único driver (controlador)
Job: Conjunto de tasks (tareas) ejecutadas como resultado de una acción
Stage: Conjunto de tasks (tareas) en un job que pueden ejecutarse en paralelo
Task: Unidad de trabajo individual enviada a un executor

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Persistencia
Lazy execution: Los datos en un RDD no son procesados hasta que una acción es efectuada

 Cada transformación crea un nuevo child RDD


 Spark guarda el linaje hacia el parent RDD por cada nuevo child RDD
 Cada acción re-ejecuta el linaje complete.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Persistencia
Lazy execution: Los datos en un RDD no son procesados hasta que una acción es efectuada

 Persistir un RDD almacena la información


 Acciones subsiguientes pueden utilizar esta información

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Spark
Páginas 66-67
SparkSQL
SparkSQL es un módulo que permite el procesamiento de datos estructurados.

Permite definir DataFrames, que permite trabajar con datos en filas y columnas (como una tabla).

Existen dos implementaciones de este módulo, que son el punto de acceso a la API de SparkSQL.

Implementación Descripción
SQLContext Implementación básica
HiveContext Permite leer y escribir tablas Hive/HCatalog directamente
Soporta completamente el lenguaje HiveQL

Spark Shell genera una instancia del SQLContext automáticamente, llamada sqlcontext.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
SparkSQL
Análogamente a los RDD’s en el core de Spark, los DataFrames son la unidad fundamental de datos en
Spark SQL.

 Colección distribuida de datos estructurados organizados en columnas con nombre


 Construidos en un RDD base que contiene objetos Row.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrames
Al igual que en los RDD’s, existen dos operaciones básicas con Dataframes:
 Actions: devuelven un valor.
 Queries: definen un nuevo DataFrame a partir del actual.

Las queries crean un nuevo DataFrame a partir de uno existente. Los DataFrame son inmutables. Los
datos en un DataFrame nunca cambian.

Lazy execution: Los datos en un DataFrame no son procesados hasta que una acción es efectuada

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating DataFrames
Existen varias formas de crear un DataFrame.

 A partir de un origen estructurado


Hive
Fichero parquet
Fichero AVRO
Fichero JSON

 A partir de un RDD

 A partir de otro DataFrame


Efectuando una operación o una query sobre el mismo

 Mediante la definición de un esquema

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating DataFrames
El método sqlContext.read devuelve un objeto DataFrameReader. Este objeto nos provee de la
funcionalidad necesaria para obtener un objeto DataFrame con datos obtenidos de un origen
estructurado.

Función Descripción
sqlContext.read.json(filename) Genera un DataFrame a partir de la información almacenada en un fichero
json
sqlContext.read.parquet(filename) Genera un DataFrame a partir de la información almacenada en un fichero
parquet
sqlContext.read.orc(filename) Genera un DataFrame a partir de la información almacenada en un fichero
orc
sqlContext.read.table(hive-tablename) Genera un DataFrame a partir de la información almacenada en una tabla
Hive
sqlContext.read.jdbc(url,table,options) Genera un DataFrame a partir de la información almacenada en una tabla de
una base de datos relacional

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Creating DataFrames
Pueden especificarse configuraciones para el DataFrameReader.

Método Descripción
format Especifica un tipo de origen de datos
option Especifica una configuración clave/valor para la fuente de datos subyacente
schema Especifica un esquema en lugar de inferirlo desde la fuente de datos

Una vez especificada la configuración, debe llamarse a la función load.

sqlContext.read.format("com.databricks.spark.avro").load("/loudacre/accounts_avro")
sqlContext.read.format("jdbc").option("url","jdbc:mysql://localhost/loudacre").option("dbtable","accounts").optio
n("user","training").option("password","training").load()

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Metadata operations
Las operaciones básicas se ocupan de los metadatos del DataFrame, en lugar de sus datos.

Método Descripción
schema Devuelve un objeto Schema que describe los datos
printSchema Muestra el esquema
cache / persist Persiste el DataFrame en disco o memoria
columns Devuelve un array con el nombre de las columnas
dtypes Devuelve un array de pares con el nombre de las columnas y su tipo
explain Muestra información sobre el DataFrame

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame actions
Algunas acciones que podemos realizar sobre un DataFrame son.

Acción Descripción
collect Devuelve todas las filas en un array de objetos Row
take(n) Devuelve las n primeras filas en un arrray de objetos Row
count Devuelve el número de filas
show(n) Muestra las primeras n files (por defecto, 20)

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries
Algunas acciones que podemos realizar sobre un DataFrame son.

Query Descripción
distinct Crea un nuevo DataFrame eliminando duplicados
join Crea un nuevo DataFrame como resultado del cruce de dos DataFrames
limit(n) Crea un nuevo DataFrame con las primeras n filas del DataFrame original
select Crea un nuevo DataFrame con los datos de una o más columnas del DataFrame original
where Crea un Nuevo DataFrame con las filas que cumplan los criterios especificados (alias para filter)

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries
Las columnas pueden referenciarse de distintos modos.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries
Usando HiveContext es posible consultar tablas usando HiveQL.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries
También es posible registrar un DataFrame como tabla temporal y efectuar queries sobre la misma.

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
DataFrame queries
Los DataFrames proporcionan muchas otras funciones para manipulación de datos, como:

 Funciones de agregación como groupBy, orderBy y agg


 Operaciones multi-dataset, como join, unionAll e intersect
 Funciones estadística, como avg, sampleBy, corr y cov
 Funciones multivariable, como rollup y cube
 Funciones de análisis basadas en Window

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Saving DataFrames
El método sqlContext.write devuelve un objeto DataFrameWriter. Este objeto nos provee de la
funcionalidad necesaria para almacenar un objeto DataFrame.

Función Descripción
sqlContext.write.json(filename) Almacena el DataFrame en un fichero json
sqlContext.write.parquet(filename) Almacena el DataFrame en un fichero parquet
sqlContext.write.orc(filename) Almacena el DataFrame en un fichero orc
sqlContext.write.text(filename) Almacena el DataFrame en un fichero de texto
sqlContext.write.saveAsTable(hive-tablename) Almacena el DataFrame en una tabla Hive
sqlContext.write.jdbc(url,table,options) Almacena el DataFrame en una tabla de una base de datos relacional

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Saving DataFrames
Pueden especificarse configuraciones para el DataFrameWriter.

Método Descripción
format Especifica un tipo de destino de datos
mode Especifica el modo de actuación si el destino indicado existe: overwrite, append, ignore
or error. El valor por defecto es error
partitionBy column=value Almacena la información particionada en directorios en la forma column=value, como
en el particionamiento Hive/Impala
option Especifica una configuración clave/valor para el destino de datos subyacente

Una vez especificada la configuración, debe llamarse a la función save.

sqlContext.write.format("com.databricks.spark.avro").save("/loudacre/accounts_avro")
sqlContext.write.format("jdbc").option("url","jdbc:mysql://localhost/loudacre").option("dbtable","accounts").optio
n("user","training").option("password","training").save()

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.
Ejercicios Spark
Páginas 68-72
Thank You

www.youtube.com/NEORISvideo
twitter.com/NEORIS
flickr.com/photos/NEORIS/
linkedin.com/company/NEORIS
facebook.com/NEORIS.Corporate

HEADQUARTERS:

+1 (305) 728-6000
info@NEORIS.com
www.NEORIS.com

NEORIS Corporate Presentation - Confidential: Do Not Reproduce without prior written permission from NEORIS.

Вам также может понравиться