Transcript
Page 1: Monta una Infraestructura para Big Data en tu Empresa

Taller:

“Monta una infraestructura Big Data para tu Empresa”

Urko Zurutuza

Dpto. Electrónica e Informática

Mondragon Goi Eskola Politeknikoa JMA

Mondragon Unibertsitatea

Page 2: Monta una Infraestructura para Big Data en tu Empresa

2

Enlaces

• http://bit.ly/big_data_sesion3

• http://bit.ly/ejercicios_bigdata

Page 3: Monta una Infraestructura para Big Data en tu Empresa

Agenda

• Día 1: Introducción al Big Data

• Día 2: Instalación de un cluster Cloudera

• Día 3: Ejercicios sobre Cloudera

Page 4: Monta una Infraestructura para Big Data en tu Empresa

Índice

1. Ejemplo de MapReduce

2. Creando y editando una base de datos HBase

3. Ingerir datos estructurados con Apache sqoop

4. Consultar datos estructurados con HIVE e Impala

5. El valor del Big Data: datos no estructurados

6. Análisis avanzado con Spark

7. Búsquedas en tiempo real con Solr

8. Creación de un panel de mandos

Page 5: Monta una Infraestructura para Big Data en tu Empresa

Consideraciones previas

• Cloudera Quick Start: • http://www.cloudera.com/content/cloudera/en/documen

tation/core/latest/topics/cloudera_quickstart_vm.html

• Dirección Cloudera Manager: http://ip_cloudera:7180

• Dirección Hue: http://ip_cloudera:8888

• Algunos links no son relativos (y erroneamentellevarán a quickstart.cloudera)

Page 6: Monta una Infraestructura para Big Data en tu Empresa

Consideraciones previas

• Cuenta (con privilegios sudo):• username: cloudera

• password: cloudera

• La contraseña de root de MySQL es la misma, al igual que Hue y ClouderaManager

Page 7: Monta una Infraestructura para Big Data en tu Empresa

• Consideraciones previas

Page 8: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 1: MapReduce

Page 9: Monta una Infraestructura para Big Data en tu Empresa

Procesamiento en batch: MapReduce

• Marco para escribir aplicaciones que procesanenormes cantidades de datos de forma paralelaen 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.

Page 10: Monta una Infraestructura para Big Data en tu Empresa

Procesamiento en batch: MapReduce

, 4

, 2

, 4

, 3

, 4

, 2

, 4

, 3

Split MapShuffle

&

Sort

Reduce

Master

assign

sassigns

Page 11: Monta una Infraestructura para Big Data en tu Empresa

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

Page 12: Monta una Infraestructura para Big Data en tu Empresa

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>

Page 13: Monta una Infraestructura para Big Data en tu Empresa

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>

Page 14: Monta una Infraestructura para Big Data en tu Empresa

Procesamiento en batch: MapReduce

• Reducer:• Suma los valores (ocurrencias de cada clave):

• < Bye, 1>

• < Goodbye, 1>

• < Hadoop, 2>

• < Hello, 2>

• < World, 2>

Page 15: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio

• WordCount

• Documento ejercicios.doc

Page 16: Monta una Infraestructura para Big Data en tu Empresa

18

Ejercicio 1: Archivos de entrada

Page 17: Monta una Infraestructura para Big Data en tu Empresa

19

Ejercicio 1: ejecuciónMapReduce

[cloudera@quickstart ~]$ hadoop jar wordcount.jar org.myorg.WordCount /user/cloudera/wordcount/input

/user/cloudera/wordcount/output

16/06/29 10:21:52 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032

16/06/29 10:21:52 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:8032

16/06/29 10:21:52 WARN mapreduce.JobResourceUploader: Hadoop command-line option parsing not performed. Implement the Tool

interface and execute your application with ToolRunner to remedy this.

16/06/29 10:21:52 INFO mapred.FileInputFormat: Total input paths to process : 2

16/06/29 10:21:53 INFO mapreduce.JobSubmitter: number of splits:3

16/06/29 10:21:53 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1467220526122_0001

16/06/29 10:21:53 INFO impl.YarnClientImpl: Submitted application application_1467220526122_0001

16/06/29 10:21:53 INFO mapreduce.Job: The url to track the job:

http://quickstart.cloudera:8088/proxy/application_1467220526122_0001/

16/06/29 10:21:53 INFO mapreduce.Job: Running job: job_1467220526122_0001

16/06/29 10:22:03 INFO mapreduce.Job: Job job_1467220526122_0001 running in uber mode : false

16/06/29 10:22:03 INFO mapreduce.Job: map 0% reduce 0%

16/06/29 10:22:17 INFO mapreduce.Job: map 33% reduce 0%

16/06/29 10:22:19 INFO mapreduce.Job: map 67% reduce 0%

16/06/29 10:22:20 INFO mapreduce.Job: map 100% reduce 0%

16/06/29 10:22:25 INFO mapreduce.Job: map 100% reduce 100%

16/06/29 10:22:25 INFO mapreduce.Job: Job job_1467220526122_0001 completed successfully

16/06/29 10:22:25 INFO mapreduce.Job: Counters: 49

File System Counters

FILE: Number of bytes read=79

FILE: Number of bytes written=455843

FILE: Number of read operations=0

FILE: Number of large read operations=0

FILE: Number of write operations=0

HDFS: Number of bytes read=410

HDFS: Number of bytes written=41

HDFS: Number of read operations=12

HDFS: Number of large read operations=0

HDFS: Number of write operations=2

Page 18: Monta una Infraestructura para Big Data en tu Empresa

20

Ejercicio 1: ejecuciónMapReduceJob Counters

Launched map tasks=3

Launched reduce tasks=1

Data-local map tasks=3

Total time spent by all maps in occupied slots (ms)=36685

Total time spent by all reduces in occupied slots (ms)=5500

Total time spent by all map tasks (ms)=36685

Total time spent by all reduce tasks (ms)=5500

Total vcore-seconds taken by all map tasks=36685

Total vcore-seconds taken by all reduce tasks=5500

Total megabyte-seconds taken by all map tasks=37565440

Total megabyte-seconds taken by all reduce tasks=5632000

Map-Reduce Framework

Map input records=2

Map output records=8

Map output bytes=82

Map output materialized bytes=91

Input split bytes=357

Combine input records=8

Combine output records=6

Reduce input groups=5

Reduce shuffle bytes=91

Reduce input records=6

Reduce output records=5

Spilled Records=12

Shuffled Maps =3

Failed Shuffles=0

Merged Map outputs=3

GC time elapsed (ms)=445

CPU time spent (ms)=1970

Physical memory (bytes) snapshot=762191872

Virtual memory (bytes) snapshot=6006784000

Total committed heap usage (bytes)=557592576

Page 19: Monta una Infraestructura para Big Data en tu Empresa

21

Ejercicio 1: ejecuciónMapReduce

Shuffle Errors

BAD_ID=0

CONNECTION=0

IO_ERROR=0

WRONG_LENGTH=0

WRONG_MAP=0

WRONG_REDUCE=0

File Input Format Counters

Bytes Read=53

File Output Format Counters

Bytes Written=41

Page 20: Monta una Infraestructura para Big Data en tu Empresa

22

Ejercicio 1: Archivos de salida

Page 21: Monta una Infraestructura para Big Data en tu Empresa

23

Ejercicio 1: resultado

[cloudera@quickstart ~]$ hadoop fs -cat /user/cloudera/wordcount/output/part-

00000

Bye 1

Goodbye 1

Hadoop 2

Hello 2

World 2

Page 22: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo HBase

Page 23: Monta una Infraestructura para Big Data en tu Empresa

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 almacenade forma dispersa, de modo que las filas de unamisma tabla pueden tener columnas tan variadascomo se quiera.

Page 24: Monta una Infraestructura para Big Data en tu Empresa

HBase

• Map: filas de datos

{

"zzzzz" : "woot",

"xyz" : "hello",

"aaaab" : "world",

"1" : "x",

"aaaaa" : "y"

}

Page 25: Monta una Infraestructura para Big Data en tu Empresa

HBase

• Sorted Map: filas ordenadas por la clave

{

"1" : "x",

"aaaaa" : "y",

"aaaab" : "world",

"xyz" : "hello",

"zzzzz" : "woot"

}

Page 26: Monta una Infraestructura para Big Data en tu Empresa

HBase

• Multidimensional: familias de columnas por cadafila{

"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"

}

}

Page 27: Monta una Infraestructura para Big Data en tu Empresa

HBase

• Multidimensional: una familia de columnas puedetener varias columnas, identificadas por unaetiqueta o qualifier{

// ...

"aaaaa" : {

"A" : {

"foo" : "y",

"bar" : "d"

},

"B" : {

"" : "w"

}

},

"aaaab" : {

"A" : {

"foo" : "world",

"bar" : "domination"

},

"B" : {

"" : "ocean"

}

},

// ...

}

Page 28: Monta una Infraestructura para Big Data en tu Empresa

HBase

• Multidimensional: timestamp{

// ...

"aaaaa" : {

"A" : {

"foo" : {

15 : "y",

4 : "m"

},

"bar" : {

15 : "d",

}

},

"B" : {

"" : {

6 : "w"

3 : "o"

1 : "w"

}

}

},

// ...

}

Page 29: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

Page 30: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBaseConectarse a HUE: http://localhost:8888

32

Page 31: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

33

Page 32: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

34

Page 33: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

35

Page 34: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

36

Page 35: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

37

Page 36: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

38

Page 37: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

39

Page 38: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

40

Page 39: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

41

Page 40: Monta una Infraestructura para Big Data en tu Empresa

Ejemplo con HBase

42

Page 41: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Ingerir datos estructurados

Page 42: Monta una Infraestructura para Big Data en tu Empresa

Un paseo por la potencia de Big Data

• Imaginemos que somos el “Data Specialist” de una corporación

• El análisis de los datos debe responder a preguntas concretas

Page 43: Monta una Infraestructura para Big Data en tu Empresa

Definir una pregunta de Negocio

• Sin una pregunta bien definida:• No sabremos como modelar los datos

• Qué estructuras de datos aplicar

• Qué conjuntos de datos deberemosobtener

• Qué herramientas necesitaremos

Page 44: Monta una Infraestructura para Big Data en tu Empresa

Ingerir datos estructurados

• Pregunta de Negocio: “Qué productos les gustacomprar a nuestros clientes?”

• Esta información se guarda por lo general en unabase de datos Transaccional, la cual nos dirá quéclientes compran y quienes no cada producto.

• Necesitamos ingerir los datos de una BBDD en HDFS

Page 45: Monta una Infraestructura para Big Data en tu Empresa

sqoop

Page 46: Monta una Infraestructura para Big Data en tu Empresa

Ingerir datos estructurados

• Sqoop nos permite cargar los datos de MySQL en HDFS, preservando la estructura de las tablas.

• Con unos parámetros extra, podremos cargarlosen un formato (avro) que podrá luego ser utilizadopor Impala

Page 47: Monta una Infraestructura para Big Data en tu Empresa

Ingerir datos estructurados: sqoop

tablas tablasFicheros

distribuidos

BBDD Relacional

BBDD RelacionalHDFS

Tratamiento

(Map-Reduce) (Map-Reduce)

(Map-Reduce)

Page 48: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Ingerir datos estructurados: sqoop

• Pasos:1. Importar todas las tablas desde MySQL a

HDFS.

2. Sqoop generará los esquemas de cada tabla.Copiar estos esquemas a HDFS para queHIVE los tenga disponibles.

3. Arrancamos Hive y definimos las tablas. Dosopciones: (1) desde la línea de comandos y(2) desde la interfaz web.

4. Mostramos las tablas

50

Page 49: Monta una Infraestructura para Big Data en tu Empresa

Ingerir datos estructurados

(Mirar Documento)

[[email protected] ~] sqoop import-all-tables \

-- num-mappers 1 \

--connect jdbc:mysql://quickstart.cloudera:3306/retail_db \

--username=retail_dba \

--password=cloudera \

--compression-codec=snappy \

--as-avrodatafile \

--warehouse-dir=/user/hive/warehouse/userXX

Page 50: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Ingerir datos estructurados: sqoop

52

Page 51: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Ingerir datos estructurados: sqoop

53

Page 52: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Definir las tablas: Hive

54

Page 53: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Definir las tablas: Hive

55

Page 54: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Definir las tablas: Hive

56

Page 55: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 2: Mostrar las tablas: Hive

57

Page 56: Monta una Infraestructura para Big Data en tu Empresa

Ingerir datos estructurados

Page 57: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar datos estructurados

Page 58: Monta una Infraestructura para Big Data en tu Empresa

Consultar datos estructurados

• Dos herramientas para hacer consultas SQL en CDH:

• Hive • Traduce las consultas SQL a trabajos MapReduce. • Bueno para trabajos en lote grandes, aplicando

transformaciones de forma flexible.

• Impala• Significativamente más rápido y preparado para tener

baja latencia para consultas interectivas y exploraciónde datos.

• Ambos comparten los metadatos sobre las tablas

Page 59: Monta una Infraestructura para Big Data en tu Empresa

Consultar datos estructurados

• Ejemplo en HIVE:[cloudera@quickstart ~]$ hive

CREATE EXTERNAL TABLE categories

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'

STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'

OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'

LOCATION 'hdfs:///user/hive/warehouse/categories'

TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/urko/sqoop_import_categories.avsc');

categories, customers, departments, orders, order_items, productsshow tables;

exit;

Page 60: Monta una Infraestructura para Big Data en tu Empresa

Consultar datos estructurados

• Hemos transferido datos estructurados de unabase de datos relacional a HDFS

• Lo hemos transformado en formato Avro

• Hemos creado tablas HIVE, preparadas para serconsultadas mediante Impala o consultas porlotes de HIVE.

• Vamos a consultarlos!

Page 61: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar losdatos

63

Page 62: Monta una Infraestructura para Big Data en tu Empresa

Consultar datos estructurados

Page 63: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar los datos

Mostrar las categorias de producto más popularesselect c.category_name, count(order_item_quantity) as count

from order_items oi

inner join products p on oi.order_item_product_id = p.product_id

inner join categories c on c.category_id = p.product_category_id

group by c.category_name

order by count desc limit 10;

65

Page 64: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar losdatos

66

Page 65: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar losdatos

67

Page 66: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar losdatos

68

Page 67: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar los datos

Mostrar los 10 productos más satisfactoriosselect p.product_id, p.product_name, r.revenue

from products p inner join (select oi.order_item_product_id,

sum(cast(oi.order_item_subtotal as float)) as revenue from

order_items oi inner join orders o on oi.order_item_order_id =

o.order_id where o.order_status <> 'CANCELED' and o.order_status

<> 'SUSPECTED_FRAUD' group by order_item_product_id) r on

p.product_id = r.order_item_product_id order by r.revenue desc

limit 10;

69

Page 68: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 3: Consultar losdatos

70

Page 69: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 4: El valor del Big Data

Page 70: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

• Hasta ahora, el resultado no es nuevo: SQL!

• Pregunta de negocio: “son los productos másvistos los más vendidos?”

• Devemos correlacionar datos estructurados con otros no estructurados:

• Usando Web logs, podremos ver los productos másvistos

• Para ingerir flujos de clicks: Flume

Page 71: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

• Flume: un framework de tiempo real y escalablepara encaminar, filtrar, agregar, y realizarpequeñas operaciones sobre datos

• Para este ejercicio, ya tenemos recopilados un conjunto de datos de acceso web en /opt/examples/log_data/access.log.2

Page 72: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

Page 73: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 4: El valor del Big Data

• Cargar los datos de log a HDFS:

[cloudera@quickstart ~]$ hadoop fs -copyFromLocal /opt/examples/log_files/access.log.2

/user/hive/warehouse/original_access_logs

• Entrar en HIVE:

[cloudera@quickstart ~]$ hive

75

Page 74: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 4: El valor del Big Data

• Crear una tabla en Hive, y consultarla mediante Impala o Hive

CREATE EXTERNAL TABLE intermediate_access_logs (

ip STRING,

date STRING,

method STRING,

url STRING,

http_version STRING,

code1 STRING,

code2 STRING,

dash STRING,

user_agent STRING)

ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'

WITH SERDEPROPERTIES (

"input.regex" = "([^ ]*) - - \\[([^\\]]*)\\] \"([^\ ]*) ([^\ ]*) ([^\ ]*)\" (\\d*) (\\d*) \"([^\"]*)\" \"([^\"]*)\"",

"output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s"

)

LOCATION '/user/hive/warehouse/original_access_logs';

76

Page 75: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 4: El valor del Big Data

• Crear una tabla en Hive, y consultarla mediante Impala o Hive

CREATE EXTERNAL TABLE tokenized_access_logs (

ip STRING,

date STRING,

method STRING,

url STRING,

http_version STRING,

code1 STRING,

code2 STRING,

dash STRING,

user_agent STRING)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LOCATION '/user/hive/warehouse/tokenized_access_logs';

ADD JAR /usr/lib/hive/lib/hive-contrib.jar;

INSERT OVERWRITE TABLE tokenized_access_logs SELECT * FROM intermediate_access_logs;

Exit;

77

Page 76: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

Page 77: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

Page 78: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

Page 79: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

Page 80: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

Uno de los productos másvistos no está entre los máscomprados!!

Page 81: Monta una Infraestructura para Big Data en tu Empresa

El valor del Big Data

• La correlación entre ambos datos permitiódetectar un error en el precio mostrado para el producto “Adidas Kids’ RG III Mid Football Cleat”. Una vez corregido, las ventas del productoempezaron a crecer rápidamente ;)

Page 82: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 5: Advanced Analytics

Page 83: Monta una Infraestructura para Big Data en tu Empresa

Advanced Analytics

• Pregunta de negocio: ¿Qué productos se suelencomprar de forma conjunta?

• La respuesta podría ayudar a:• Optimizar campañas de marketing, posicionando

productos de forma conjunta

• Podrían utilizarlo para mejorar ventas de productosmenos vistos

• Una herramienta que permite realizar análisisrápidos sobre relaciones de objetos es Apache Spark

Page 84: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 5: Advanced Analytics

• Apache Spark

86

Page 85: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 5: Advanced Analytics

• Generamos un trabajo en Spark

[cloudera@quickstart ~]$ spark-shell --jars

/usr/lib/avro/avro-mapred.jar --conf

spark.serializer=org.apache.spark.serializer.KryoSerializer

87

Page 86: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 5: Advanced Analytics

88

Page 87: Monta una Infraestructura para Big Data en tu Empresa

Advanced Analytics

// First we're going to import the classes we need and open some of the files

// we imported from our relational database into Hadoop with Sqoop

import org.apache.avro.generic.GenericRecord

import org.apache.avro.mapred.{AvroInputFormat, AvroWrapper}

import org.apache.hadoop.io.NullWritable

val warehouse = "hdfs://quickstart.cloudera/user/hive/warehouse/"

val order_items_path = warehouse + "order_items"

val order_items = sc.hadoopFile[AvroWrapper[GenericRecord], NullWritable, AvroInputFormat[GenericRecord]](order_items_path)

val products_path = warehouse + "products"

val products = sc.hadoopFile[AvroWrapper[GenericRecord], NullWritable, AvroInputFormat[GenericRecord]](products_path)

Page 88: Monta una Infraestructura para Big Data en tu Empresa

Advanced Analytics

// Next, we extract the fields from order_items and products that we care about

// and get a list of every product, its name and quantity, grouped by order

val orders = order_items.map { x => (

x._1.datum.get("order_item_product_id"),

(x._1.datum.get("order_item_order_id"), x._1.datum.get("order_item_quantity")))

}.join(

products.map { x => (

x._1.datum.get("product_id"),

(x._1.datum.get("product_name")))

}

).map(x => (

scala.Int.unbox(x._2._1._1), // order_id

(

scala.Int.unbox(x._2._1._2), // quantity

x._2._2.toString // product_name

)

)).groupByKey()

Page 89: Monta una Infraestructura para Big Data en tu Empresa

Advanced Analytics

// Finally, we tally how many times each combination of products appears

// together in an order, and print the 10 most common combinations.

val cooccurrences = orders.map(order =>

(

order._1,

order._2.toList.combinations(2).map(order_pair =>

(

if (order_pair(0)._2 < order_pair(1)._2) (order_pair(0)._2, order_pair(1)._2) else (order_pair(1)._2, order_pair(0)._2),

order_pair(0)._1 * order_pair(1)._1

)

)

)

)

val combos = cooccurrences.flatMap(x => x._2).reduceByKey((a, b) => a + b)

val mostCommon = combos.map(x => (x._2, x._1)).sortByKey(false).take(10)

println(mostCommon.deep.mkString("\n"))

Page 90: Monta una Infraestructura para Big Data en tu Empresa

Advanced Analytics

Page 91: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Buscando en un mar de datos

Page 92: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

• Los logs pueden ser una fuente imprescindible de información

• Vamos a ser capaces de explorar de forma interactiva eventos de Log Web, indexando los datos, y haciendo que puedan ser buscados

• Vamos a extender Apache Flume anterior, de modo que ademas de ingerir logs, enviará los eventos a Apache Solr para su indexación en tiempo real

Page 93: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

• Flume

• Solr• Organiza los datos de la misma manera que una BBDD SQL.

• Dada registro se llama “document”, y contiene campos definidos en un esquema

• Un conjunto de documentos forman una colección.

• Es menos estricto en cuanto a la estructura:• Campos opcionales• Flexibilidad en las consultas de texto

Page 94: Monta una Infraestructura para Big Data en tu Empresa

Ingestión de Datos en streaming: Apache Flume

• Servicio distribuido y fiable para recopilar, agregary mover grandes volúmenes de datos (de log) de forma eficiente

• De muchas y variadas fuentes de logs a un lugarcentralizado 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 media, emails, …

Page 95: Monta una Infraestructura para Big Data en tu Empresa

Ingestión de Datos en streaming: Apache Flume

• Una fuente externa envía eventos a un agenteFlume, en un formato que Flume puedareconocer.

• El evento se guarda en el canal, hasta que es consumido por el embudo (Sink)

• El Sink quita el evento del canal y lo pone en un repositorio externo o en otro origen de Flume

Page 96: Monta una Infraestructura para Big Data en tu Empresa

Ingestión de Datos en streaming: Apache Flume

Page 97: Monta una Infraestructura para Big Data en tu Empresa

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

Page 98: Monta una Infraestructura para Big Data en tu Empresa

Ingestión de Datos en streaming: Apache Flume

• Canales Flume:• Memoria

• JDBC

• Fichero

• …

Page 99: Monta una Infraestructura para Big Data en tu Empresa

Ingestión de Datos en streaming: Apache Flume

• Sinks Flume:• HDFS

• Avro

• Thrift

• IRC

• Fichero

• Hbase

• …

Page 100: Monta una Infraestructura para Big Data en tu Empresa

Ingestión de Datos en streaming: Apache Flume

• Miramos la configuracion de flume:

cd /opt/examples/flume

Page 101: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

• Crear el índice de búsqueda:

solrctl --zk quickstart.cloudera:2181/solr instancedir --generate solr_configs

• Generar los ficheros de configuración:

<fields>

<field name="_version_" type="long" indexed="true" stored="true" multiValued="false" />

<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

<field name="ip" type="text_general" indexed="true" stored="true"/>

<field name="request_date" type="date" indexed="true" stored="true"/>

<field name="request" type="text_general" indexed="true" stored="true"/>

<field name="department" type="string" indexed="true" stored="true" multiValued="false"/>

<field name="category" type="string" indexed="true" stored="true" multiValued="false"/>

<field name="product" type="string" indexed="true" stored="true" multiValued="false"/>

<field name="action" type="string" indexed="true" stored="true" multiValued="false"/>

</fields>

Page 102: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Buscando en un mar de datos

• Cargamos la configuración (y morplines.conf)[cloudera@quickstart ~]$ cd /opt/examples/flume

[cloudera@quickstart ~]$ solrctl --zkquickstart.cloudera:2181/solr instancedir --create live_logs./solr_configs

• Creamos la colección[cloudera@quickstart ~]$ solrctl --zkquickstart.cloudera:2181/solr collection --create live_logs -s 1

• Arrancamos el agente flume[cloudera@quickstart ~]$ start_logs

[cloudera@quickstart ~]$ flume-ng agent --conf /opt/examples/flume/conf --conf-file /opt/examples/flume/conf/flume.conf --name agent1 -Dflume.root.logger=DEBUG,INFO,console

104

Page 103: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

Page 104: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

Page 105: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

Page 106: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Buscando en un mar de datos

108

Page 107: Monta una Infraestructura para Big Data en tu Empresa

buscando en un mar de datos

Page 108: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 7: Creando un panel de mandos

Page 109: Monta una Infraestructura para Big Data en tu Empresa

Creando un panel de mandos

• Las búsquedas son rápidas, pero aún es fácilperdernos

• Vamos a crear un panel de mandos para analizarel comportamiento de las visitas Web en tiemporeal.

Page 110: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

112

Page 111: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

Arrastrar a estazona gris

Seleccionarrequest_date

113

Page 112: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

114

Page 113: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

Seleccionar un intervalo de +10 minutos

115

Page 114: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

1.- Seleccionar un layout de 2 columnas

2.- Arrastrar un pie chart

116

Page 115: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

3.- Seleccionardepartment

117

Page 116: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

1.- Arrastrar gráfico de tipo facet a la columnaizquierda

2.- Seleccionarproduct

118

Page 117: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

119

Page 118: Monta una Infraestructura para Big Data en tu Empresa

Ejercicio 6: Creando un panel de mandos

Terminamos la edición

Guardamos el panel

30/06/2016 Iñaki Garitano - Taller Big Data 120

Page 119: Monta una Infraestructura para Big Data en tu Empresa

Acabando…

• Ideas?

• Es útil?

• Vas a por ello?

• ESKERRIK ASKO!!

Page 120: Monta una Infraestructura para Big Data en tu Empresa

Eskerrik asko

www.mondragon.edu

Urko Zurutuza

Mondragon Unibertsitatea

[email protected]

https://es.linkedin.com/in/uzurutuz

a/

@urkovain