Este documento presenta un taller de 3 días sobre cómo implementar una infraestructura Big Data para una empresa. El primer día se introduce el concepto de Big Data. El segundo día se instala un cluster Cloudera. El tercer día se realizan ejercicios prácticos sobre el cluster Cloudera. El documento también cubre temas como el ecosistema Big Data, herramientas como Hadoop, HDFS, HBase y sistemas de procesamiento como MapReduce, Pig y Storm.
Monta una Infraestructura Big Data para tu Empresa - Sesión I
1. Taller:
“Monta una infraestructura Big Data para
tu Empresa”
Urko Zurutuza
Dpto. Electrónica e Informática
Mondragon Goi Eskola Politeknikoa JMA
Mondragon Unibertsitatea
12. Big Data
“Big Data” hace referencia al conjunto de
información que es demasiado compleja
como para ser procesada mediante TI
tradicionales de manera aceptable
–Min Chen, Shiwen Mao, and Yunhao Liu. Big Data: A Survey. Mobile Networks and
Applications,
19(2):171–209, 2014.
13. Big Data
“Big Data hace referencia al conjunto de
información que es demasiado compleja
como para ser procesada mediante TI
tradicionales de manera aceptable
–Min Chen, Shiwen Mao, and Yunhao Liu. Big Data: A Survey. Mobile Networks and
Applications,
19(2):171–209, 2014.
19. Ecosistema Hadoop (simplificado)
Apache
Pig:
Scripting
Almacenamient
o redundante y
fiable
YARN
Gestiona
recursos del
Cluster
Procesamiento
Distribuido de
datos
Zookee
per:
Coordin
a la
distribuc
ión
Data
Warehous
e
Machine
Learning
Colector
de datos
Conector
BBDDR-
HDFS
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
30. Apache Hadoop
• Sistema que permite una computación
– Fiable,
– Escalable, y
– Distribuida
• Un Framework que permite el
procesamiento distribuido de grandes
conjuntos de datos sobre clusters de
ordenadores
31. Apache Hadoop
• Hadoop common: utilidades comunes que
dan soporte al resto de los módulos de
Hadoop
• Hadoop Distributed File System (HDFS):
sistema de ficheros distribuido.
• Hadoop YARN: sistema para la planificación
de trabajos y gestión de recursos del cluster
• Hadoop MapReduce: sistema basado en
YARN para procesamiento paralelo de
grandes volúmenes de datos
32. ¿Quién usa Hadoop?
• Adobe
– We use Apache Hadoop and Apache HBase in
several areas from social services to structured
data storage and processing for internal use.
– We currently have about 30 nodes running HDFS,
Hadoop and HBase in clusters ranging from 5 to
14 nodes on both production and development.
We plan a deployment on an 80 nodes cluster.
– We constantly write data to Apache HBase and
run MapReduce jobs to process then store it back
to Apache HBase or external systems.
33. ¿Quién usa Hadoop?
• EBay
– 532 nodes cluster (8 * 532 cores, 5.3PB).
– Heavy usage of Java MapReduce, Apache
Pig, Apache Hive, Apache HBase
– Using it for Search optimization and Research.
34. ¿Quién usa Hadoop?
• Facebook
– We use Apache Hadoop to store copies of internal log
and dimension data sources and use it as a source for
reporting/analytics and machine learning.
– Currently we have 2 major clusters:
• A 1100-machine cluster with 8800 cores and about 12 PB raw
storage.
• A 300-machine cluster with 2400 cores and about 3 PB raw
storage.
– Each (commodity) node has 8 cores and 12 TB of
storage.
– We are heavy users of both streaming as well as the
Java APIs. We have built a higher level data
warehousing framework using these features called
Hive (see the http://hadoop.apache.org/hive/).
35. ¿Quién usa Hadoop?
• Last.fm
– 100 nodes
– Dual quad-core Xeon L5520 @ 2.27GHz &
L5630 @ 2.13GHz , 24GB RAM,
8TB(4x2TB)/node storage.
– Used for charts calculation, royalty reporting,
log analysis, A/B testing, dataset merging
– Also used for large scale audio feature
analysis over millions of tracks
36. ¿Quién usa Hadoop?
• LinkedIn
– We have multiple grids divided up based upon purpose.
– Hardware:
• ~800 Westmere-based HP SL 170x, with 2x4 cores, 24GB RAM, 6x2TB SATA
• ~1900 Westmere-based SuperMicro X8DTT-H, with 2x6 cores, 24GB RAM, 6x2TB
SATA
• ~1400 Sandy Bridge-based SuperMicro with 2x6 cores, 32GB RAM, 6x2TB SATA
– Software:
• RHEL 6.3
• Sun JDK 1.6.0_32
• Apache Hadoop 0.20.2+patches and Apache Hadoop 1.0.4+patches
• Pig 0.10 + DataFu
• Azkaban and Azkaban 2 for scheduling
• Apache Hive, Apache Avro, Apache Kafka, and other bits and pieces...
– We use these things for discovering People You May Know and other fun
facts.
37. ¿Quién usa Hadoop?
• Spotify
– We use Apache Hadoop for content
generation, data aggregation, reporting and
analysis
– 690 node cluster = 8280 physical cores, 38TB
RAM, 28 PB storage
– +7,500 daily Hadoop jobs (scheduled by Luigi,
our home-grown and recently open-sourced
job scheduler - code and video)
38. ¿Quién usa Hadoop?
• Twitter
– We use Apache Hadoop to store and process tweets,
log files, and many other types of data generated
across Twitter. We store all data as compressed LZO
files.
– We use both Scala and Java to access Hadoop's
MapReduce APIs
– We use Apache Pig heavily for both scheduled and ad-
hoc jobs, due to its ability to accomplish a lot with few
statements.
– We employ committers on Apache Pig, Apache Avro,
Apache Hive, and Apache Cassandra, and contribute
much of our internal Hadoop work to opensource (see
hadoop-lzo)
40. Almacenamiento: HDFS
• Diseñado para ejecutarse en Hw común
(commodity)
• Tolerante a fallos
• Diseñado para trabajo por lotes (batch)
• Diseñado para manejar ficheros grandes, enfocado
en muchos accesos (throughput), más que en
velocidad (latencia)
• Modelo: escribir una vez, leer muchas
• Importancia: es más barato mover la computación
que los datos
• Portabilidad
42. Almacenamiento: NoSQL (Not
Only SQL)
• Base de Datos de nueva generación que
en su mayoría aborda algunas de las
siguientes características:
– no relacional,
– distribuida,
– open-source, y
– horizontalmente escalable
[fuente: http://nosql-database.org/]
43. Almacenamiento: NoSQL (Not
Only SQL)
Tipo Descripción Ejemplo
Clave-
Valor
Cada elemento tiene una
clave y su valor asociado.
emcached
Familias
de
Columnas
Para consultas sobre grandes
conjuntos de datos. Enfoque
en columnas no en filas
Document
os
Empareja una clave con una
estructura de datos o
documento.
Grafos
Guarda nodos y sus
relaciones. RRSS,
estructuras de redes,…
http://db-engines.com/en/ranking/
44. Almacenamiento: Base de Datos
HBase
• Qué es Hbase?
– En Hbase los datos se almacenan en tablas, las
cuales tienen filas y columnas… pero mejor verlo
como un mapa u objeto multidimensional
– Una tabla de Hbase contiene multiples filas.
– Una fila de datos tiene una clave ordenable y un
número arbitrario de columnas. La tabla se
almacena de forma dispersa, de modo que las
filas de una misma tabla pueden tener columnas
tan variadas como se quiera.
45. Almacenamiento: Base de Datos
HBase
• Map: filas de datos
{
"zzzzz" : "woot",
"xyz" : "hello",
"aaaab" : "world",
"1" : "x",
"aaaaa" : "y"
}
46. Almacenamiento: Base de Datos
HBase
• Sorted Map: filas ordenadas por la clave
{
"1" : "x",
"aaaaa" : "y",
"aaaab" : "world",
"xyz" : "hello",
"zzzzz" : "woot"
}
47. Almacenamiento: Base de Datos
HBase
• Multidimensional: familias de columnas por
cada fila{
"1" : {
"A" : "x",
"B" : "z"
},
"aaaaa" : {
"A" : "y",
"B" : "w"
},
"aaaab" : {
"A" : "world",
"B" : "ocean"
},
"xyz" : {
"A" : "hello",
"B" : "there"
},
"zzzzz" : {
"A" : "woot",
"B" : "1337"
}
}
48. Almacenamiento: Base de Datos
HBase
• Multidimensional: una familia de columnas
puede tener varias columnas, identificadas
por una etiqueta o qualifier{
// ...
"aaaaa" : {
"A" : {
"foo" : "y",
"bar" : "d"
},
"B" : {
"" : "w"
}
},
"aaaab" : {
"A" : {
"foo" : "world",
"bar" : "domination"
},
"B" : {
"" : "ocean"
}
},
// ...
}
51. Procesamiento de Datos
• Varios modos de alimentar un sistema
Hadoop:
– Por lotes (batch): tengo todos los datos y los
proceso
– En tiempo real (streaming): según se generan
los eventos los computo
52. Procesamiento en batch:
MapReduce
• Marco para escribir aplicaciones que procesan
enormes cantidades de datos de forma paralela en
grandes clusters formados por hardware común.
• MapReduce job
– Divide el conjunto de datos de entrada en pedazos
(chunks) que son procesados por tareas “map” de
forma paralela.
– Ordena las salidas de los “maps”, que son entrada a
las tareas “reduce”.
– Opera sobre pares clave-valor.
– No necesariamente en Java.
54. Procesamiento en batch:
MapReduce
• Ejemplo:
$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file01
Hello World Bye World
$ bin/hadoop dfs -cat /usr/joe/wordcount/input/file02
Hello Hadoop Goodbye Hadoop
55. Procesamiento en batch:
MapReduce
• Mapper:
– procesa cada línea (cada línea un map)
– Divide en tokens separados por espacios (palabras)
– Emite un conjunto de claves-valor, en modo <palabra, 1>
– Map 1:
• < Hello, 1>
• < World, 1>
• < Bye, 1>
• < World, 1>
– Map 2:
• < Hello, 1>
• < Hadoop, 1>
• < Goodbye, 1>
• < Hadoop, 1>
56. Procesamiento en batch:
MapReduce
• Combiner:
– Cada map se ordena y genera agregados
locales:
– Salida del primer Map:
• < Bye, 1>
• < Hello, 1>
• < World, 2>
– Salida del segundo Map:
• < Goodbye, 1>
• < Hadoop, 2>
• < Hello, 1>
57. Procesamiento en batch:
MapReduce
• Reducer:
– Suma los valores (ocurrencias de cada clave):
• < Bye, 1>
• < Goodbye, 1>
• < Hadoop, 2>
• < Hello, 2>
• < World, 2>
58. Procesamiento en batch: Apache
Pig
• Plataforma para análisis/tratamiento de datos
• Tiene un compilador que genera las
sequencias de MapReduce
• Lenguaje de alto nivel: Pig Latin:
A = LOAD 'student' USING PigStorage() AS (name:chararray, age:int,
gpa:float);
X = FOREACH A GENERATE name,$2;
DUMP X;
(John,4.0F)
(Mary,3.8F)
(Bill,3.9F)
(Joe,3.8F)
59. Procesamiento en streaming:
Storm
• Sistema de computación distribuido en
tiempo real
• “El hadoop del tiempo real”
• Lo que en Hadoop son trabajos
MapReduce, en Storm son topologías.
– El MapReduce es un trabajo específico,
– Una topología está haciendo el trabajo de
forma persistente
• Se pueden crear clusters de Storm
60. Proceso en streaming: Spark
streaming
• Procesamiento en memoria (vs.
MapReduce)
• Muy rápido
• Java, Scala, Python
62. Ingestión de Datos
• Varios modos de alimentar un sistema
Hadoop:
–Por lotes (batch): hacer un volcado
–En tiempo real (streaming): según se
generan los eventos
63. Ingestión de Datos por lotes:
HDFS
• La forma más sencilla, pero debemos tener
los datos en ficheros
$ hadoop fs –put <nombre_fichero>
• Rara vez, pero podría ser…
64. Ingestión de Datos por lotes:
Apache sqoop
• Transfiere datos entre Hadoop y datos
estructurados como Bases de Datos
Relacionales
$ sqoop import --connect jdbc:mysql://database.example.com/employees
--username aaron --password 12345
• No siempre tenemos los datos
empaquetados en un único fichero
65. Ingestión de Datos por lotes:
Apache sqoop
tablas tablas
Ficheros
distribuidos
BBDD
Relacional
BBDD
RelacionalHDFS
Tratamiento
(MapReduce) (MapReduce)
(MapReduce)
66. Ingestión de Datos en streaming:
Apache Flume
• Servicio distribuido y fiable para recopilar,
agregar y mover grandes volúmenes de datos
(de log) de forma eficiente
• De muchas y variadas fuentes de logs a un
lugar centralizado de almacenamiento de
datos (ej. Hadoop)
• Cuando los datos se generan de forma
continua
• No solo logs, también sirve para p.e. datos de
tráfico de red, datos generados por social
67. Ingestión de Datos en streaming:
Apache Flume
• Una fuente externa envía eventos a un
agente Flume, en un formato que Flume
pueda reconocer.
• El evento se guarda en el canal, hasta que
es consumido por el sumidero (Sink)
• El Sink quita el evento del canal y lo pone
en un repositorio externo o en otro origen
de Flume
69. Ingestión de Datos en streaming:
Apache Flume
• Origenes Flume:
– Avro
– Thrift
– Exec (el resultado de la ejecución de un comando Unix)
– Un directorio a la espera de nuevos ficheros y sus contenidos
– Twitter
– NetCat
– Syslog
– HTTP
70. Ingestión de Datos en streaming:
Apache Flume
• Canales Flume:
– Memoria
– JDBC
– Fichero
– …
71. Ingestión de Datos en streaming:
Apache Flume
• Sinks Flume:
– HDFS
– Avro
– Thrift
– IRC
– Fichero
– Hbase
– …
72. Ingestión de Datos en streaming:
Apache Flume
• El Sink HDFS crea un fichero, lo abre,
mete datos, y cierra el fichero de forma
constante
• Se falla el Sink antes de cerrar el fichero,
se pierden los datos: falta persistencia
• En contra de la filosofía de Hadoop:
ficheros grandes Vs. muchos ficheros
pequeños
– Sus metadatos se guardan en memoria del
NameNode!!
73. Ingestión de Datos en streaming:
Apache Kafka
• Servicio para registro de logs distribuido y
particionado
• Rápido: un Kafka “broker” puede manejar
cientos de megabytes de lecturas y
escrituras por segundo de miles de clientes
• Escalable: los flujos de datos se pueden
dividir por el cluster, y así ser consumidos
de forma distribuida
• Durable: los mensajes son persistentes (en
disco)
75. Consulta: Hive
• Provee un mecanismo para proyectar
estructuras de datos y ser consultadas en
un lenguaje pseudo-SQL: HiveQL
• La consulta genera un conjunto de
MapReduces, donde su resultado se
muestra como una tabla
76. Consulta: Impala
• Mediante Impala se pueden consultar
datos de HDFS o de Hbase
• Se integra con Apache Hive, para
compartir sus tablas y BBDD.
• No usa MapReduce
• Es de Cloudera (MapR tiene Drill)
77. Consulta: Search (Solr)
• Indexación de contenidos escalable, fiable
y distribuido
• Capaz de Indexar:
– Texto
– JSON
– XML
– CSV
79. Análisis de datos
• In-Memory Analytics vs. In-Hadoop Analytics
• El fondo es el mismo, pero ahora:
– Distribuido
– Escalable
• Herramientas
– R
– Spark (Mllib)
– TODOS: RapidMiner, SAS, Teradata,…
80. Análisis de datos: Apache Mahout
• Un entorno para generar aplicaciones
escalables de machine learning
– El entorno mismo
– Algoritmos de Scala + Spark, H2O y Flink
– Algoritmos Mahout para Hadoop MapReduce
• Algoritmos:
– Recomendador
– K-Means, Fuzzy K-Means clustering
– Clasificadores Naïve Bayes, Random Forest
– …
81. Análisis de datos: Apache Spark
• Procesamiento en memoria (vs.
MapReduce)
• Muy rápido
• Java, Scala, Python
82. Análisis de datos: RHadoop
• R: Software estadístico muy extendido
• RHadoop:
– ravro: lee/escribe ficheros en formato Avro
– rmr: funcionalidad MapReduce en R
– rhdfs: funciones de gestión de ficheros en
HDFS
– rhbase: gestión de base de datos HBase
desde R.
84. Orquestador: ozzie
• Programa flujos de trabajo para gestionar
trabajos Hadoop
• Orquesta trabajos MapReduce, generados
en Java, Pig, Hive, Sqoop,…
85. El cuidador: Zookeeper
• Servicio de mantenimiento de:
– Información de configuración
– Información de nombres (nodos)
– Sincronización de la distribución
87. Ecosistema Hadoop (simplificado)
Apache
Pig:
Scripting
Almacenamient
o redundante y
fiable
YARN
Gestiona
recursos del
Cluster
Procesamiento
Distribuido de
datos
Zookee
per:
Coordin
a la
distribuc
ión
Data
Warehous
e
Machine
Learning
Colector
de datos
Conector
BBDDR-
HDFS
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
S.
O.
88. Objetivos: ¿Qué valor añadido quiero
obtener?
• Alinea la necesidad de Big Data con los
objetivos de negocio
• Implementar Big Data es decisión de
negocio, no de TI
• Evalúa los requisitos de los datos (V’s!)
90. Fórmate
• Diferentes perfiles:
– Sistemas:
• Administración del cluster, servidores y nodos
– Desarrollo
• NoSQL
• Procesamientos (Map/Reduce, Storm, Spark, Pig,…)
• Visual Analytics (d3.js, CartoDB, Gephi, Tableu,…)
– Machine Learning / Data Mining
• Conocimiento de Algoritmos y procesos
• Herramientas/Lenguajes (R, SAS, …)
91. Une las piezas
• ¿Qué preguntas debo responder?
• ¿Cómo recojo los datos?
• ¿Cómo los almaceno?
• ¿Cómo los analizo?
• ¿Cómo muestro los resultados?
93. Empieza con objetivos simples e
integra los resultados
• Según se van obteniendo pequeños
resultados, aparecen nuevas preguntas a
responder.
• Integrar resultados con el Sistema de
Producción/Sistema de Gestión actual
94. Conclusiones
• Objetivos, estrategia, ROI
• Datos: ¿Estamos preparados?
• Infraestructura Local o en la Nube?
• Big Data está relacionado con:
Análisis de Datos = Data Science
• Analizas tus datos en “Small Data” ahora?
Intención inicial de trabajar con bases de datos modernas a escala Web.
Movimiento iniciado a principio del 2009
Actualmente aprox. 150 BBDD NoSQL diferentes.
Document databases pair each key with a complex data structure known as a document. Documents can contain many different key-value pairs, or key-array pairs, or even nested documents.
Graph stores are used to store information about networks, such as social connections. Graph stores include Neo4J and HyperGraphDB.
Key-value stores are the simplest NoSQL databases. Every single item in the database is stored as an attribute name (or "key"), together with its value. Examples of key-value stores are Riak and Voldemort. Some key-value stores, such as Redis, allow each value to have a type, such as "integer", which adds functionality.
Wide-column stores such as Cassandra and HBase are optimized for queries over large datasets, and store columns of data together, instead of rows.
One of the most important things you should look for is a compelling ROI (return on investment). That is to say, find something for which you can put a value on the cost of the problem before you plan a solution.