8
Repaso a Large-Scale Computation Standalone --> Cluster (entra en la idea de MPI y va a hacer referencia a bajo nivel que implica) --> PROBLEMAS: - Ancho banda - Complejidad - Gestion de ejecucion (programacion) - Gestion de fallos (resiliency) --> ~1 fallo al dia con mil nodos --> Idea transferencia de datos al lugar donde se procesan en sistemas distribuidos... problema de ancho de banda limitado... -- > concepto Data-driven - Se usan datos que antes se descartaban... idea logs, e info de la que se pasaba ****EVERNOTE --> Mirar*** Ej: big data_ http://pennystocks.la/internet-in-real-time/ Salta a datos no estructyura2 Idea cuello de bottella son los datos __> No merece pasar a ssd por coste discos vs ganancia... Nuevo Approach ( va a dar caracterisitcas del sistema necesario): - Resiliency (support partial failure) - Failure should not result in loss of data - Failure does not imply system restart (hot recovery) - Consistency (result is the same whichever the circumstances of the system) - Scalability (grateful decline vs load, increase load when provided with increased resources) Version 1 Hadoop limite de 4000 nodos ... idea de que segun añades nodos en un sistema distribuido tiende a llegar a punto muerto (logaritmo) y decae tras este (saturacion mensajes gestion del sistema) Ideas clave de Hadoop: - Encapsula ideas de gestion del sistema --> Estas a alto nivel - No2 hablan entre ellos lo menos posible --> bueno para la escalabilidad! · No comparten datos entre ellos - Datos distribuidos (los distribuye el)

Notas Curso Hadoop

Embed Size (px)

DESCRIPTION

Notas Curso Hadoop

Citation preview

Page 1: Notas Curso Hadoop

Repaso a Large-Scale ComputationStandalone --> Cluster (entra en la idea de MPI y va a hacer referencia a bajo nivel que implica)

--> PROBLEMAS:- Ancho banda- Complejidad- Gestion de ejecucion (programacion)- Gestion de fallos (resiliency) --> ~1 fallo al dia con mil nodos

--> Idea transferencia de datos al lugar donde se procesan en sistemas distribuidos... problema de ancho de banda limitado... --> concepto Data-driven

- Se usan datos que antes se descartaban... idea logs, e info de la que se pasaba****EVERNOTE --> Mirar***Ej: big data_ http://pennystocks.la/internet-in-real-time/

Salta a datos no estructyura2Idea cuello de bottella son los datos __> No merece pasar a ssd por coste discos vs ganancia...

Nuevo Approach ( va a dar caracterisitcas del sistema necesario):- Resiliency (support partial failure)- Failure should not result in loss of data- Failure does not imply system restart (hot recovery)- Consistency (result is the same whichever the circumstances of the system)- Scalability (grateful decline vs load, increase load when provided with increased resources)

Version 1 Hadoop limite de 4000 nodos ... idea de que segun añades nodos en un sistema distribuido tiende a llegar a punto muerto (logaritmo) y decae tras este (saturacion mensajes gestion del sistema)

Ideas clave de Hadoop:- Encapsula ideas de gestion del sistema --> Estas a alto nivel- No2 hablan entre ellos lo menos posible --> bueno para la escalabilidad!

· No comparten datos entre ellos- Datos distribuidos (los distribuye el)

Trocea ficheros en bloques de 64 MB (o 128 MB) --> cada tarea d Map coje un bloque--> Idea clave de que el maper se ejecuta donde esta el dato--> Persiges trabajar siempre con datos locales : lo que tienes que procesar lo envias donde

esta el dato

· Tolerancia a fallos- El master redirige la tarea a otro nodo : Lo puede hacer porque los datos estan replicados en varios nodos, entonces hay otro nodo que tienen el dato. Cuando cae un nodo detecta que esta underrepicated y lo copia otro... xo xa que explote tienen que caer 3 a la vez xq esta triplicado.

- Idea de transferencia minima si le falta un trozo de record del ultimo registro...

Page 2: Notas Curso Hadoop

=> Conceptos basicosIdea distros de Hadoop... x eje Cloudera (committers) --> libre (Apache)HUE --> CLoudera interfaz web

HUE (fronend), Scoop (bbdd), Hive (), Pig(SQL-like, Avro (serializacion)

Hadoop = HDFS + MapReduce (set of is known as Hadoop Cluster)HDFS = Almacenar datosMapReudce = Procesarlos--> Escalas en esclavos en el cluster, no en maestros...HDFS:- Tienes por defecto 4 copias de cada bloque (es configurable) --> Pero suele ser 3- Replicas estan en distintos no2 (logico)--> Todo esto en aras de disponibilidad de los datos

MapReduce:- Fase Map (se puede hacer solo esta!?) --> Se suele ejecutar sobre un bloque HDFS- Fase Shuffle & Sort entre ambas que hace... something- Fase Reduce

HDFS:- File system written in Java (based on google GFS)- On top of ext3, ext4- Trabaja mejor con pocos ficheros muy grandes que pocos pequeños- Solo permite hacer Append : write once, y esta pensado para leer secuencialmente

-Esclavos se llaman DataNodes, maestro NameNode- NameNode almacena metadatos- El NameNode te coje el fichero y le dice donde meterse, pero el fichero ya va el solo directo a los DataNodes. Tambien se lo propagan entre ellos

- EL NameNode nuca procesa los datos. Los DataNodes devuelven ack hacia atras

Logica para duplicar:R1 R2 -->Racks

N1 B1 B1 --> B1 en 3 sitiosN2N3 B1--> Nodos

- NameNode siempre tiene que estar en marcha; si se cae esta jodido- Hadoop no soporta alta disponibilidad- Clouder ha sacado nodo en standby par apoder cubirir al activo si se cae--> Parta el maestro recomiendan un equipo mas serio para que no te jodan, basicamente

- Tiene el file system en memoria- Para tareas de gestion y limpieza tiene el secondary NameNode que NO es por si cae el primero --

Page 3: Notas Curso Hadoop

> le quita faena al NameNode (optimizaciones supongo)

--> Sistema de ALTA DISPONIBILIDAD!

--> En 1a implementacion suya tienen: NN (NameNode), JT (JobTracker), ? (otro que habia) y CM (Cloudera Manager) pero no tienen BNN (Back NameNode)

--> Sin NN no haces nada, sin JT te va al menos el HDFS (pero no hacees MapReduce)

Para acceder a consola Hadoop tienes comando:hadoop fs --> En general son como en Linux (Cloudera_Developer_Training @ 3-18)X ej: hadoop fs -ls--> Con HUE haces esto via Web

Pseudo-distribuido: En un solo nodo tiene todo: NN, JT, DN, TT (task tracker) --> Para pruebas

HDFS Exercise:$ hadoop fs$ hadoop fs -ls /$ hadoop fs -ls /user$ hadoop fs -ls /user/training

$ cd ~/training_materials/developer/data$ tar zxvf shakespeare.tar.gz$ hadoop fs -put shakespeare /user/training/shakespeare$ hadoop fs -ls /user/training$ hadoop fs -ls$ hadoop fs -mkdir weblog$ gunzip -c access_log.gz | hadoop fs -put - weblog/access_log$ hadoop fs -mkdir testlog$ gunzip -c access_log.gz | head -n 5000 | hadoop fs -put - testlog/test_access_log

$ hadoop fs -ls shakespeare$ hadoop fs -rm shakespeare/glossary$ hadoop fs -cat shakespeare/histories | tail -n 50$ hadoop fs -get shakespeare/poems ~/shakepoems.txt$ less ~/shakepoems.txt

==> Consola HDFS:

--> Podemos ver los bloques y el sistema de ficheros· MapReduce- Map recibe L(k, v) [1] y devuelve L(k, v) [0..n]- Shuffle & Sort agrupa todas las claves que son iguales --> Cada clave tendra lista de valores L(k, v1, v2, v3,...)

--> Podrias no tener fase de reduce, por ejemplo si quieres filtrar solamente, te quedarias con lo

Page 4: Notas Curso Hadoop

que devuelva el map a la salida

- JobTracker es el maestro de MapReduce, los TaskTracker son los esclavos--> El cliente envia jar al JT que los reparte en cada TT. Cada TT levanta su propia JVM independiente y le envian pings (refrescos) al JT. Cuando terminan les envia la salida.

- 2 formas de lanzarlo: Wait for completion vs don´t

Ojo MapReduce 1 vs MaprReduce 2 (ya es Production Ready!)- MapReduce 2 corre sobre YARN... lo veremos el ultimo dia --> no cambia el codigo!- Hace falta recompilar, eso si

--> Proyectos actuales Hadoop version 1!

Un job es el programa, que si involucra 200 bloques cad auno tendra su task o ejecucion asociada de MapReduce. Task Attempt sera cada intento que haga de ejecutar el task.

--> Clave y valor pueden ser todo lo complejas que tu quieras...--> El record reader se encarga de decidr que es un record... puedes hacer que ingonore directamente la primera linea

Explode Mapper --> ('foo','bar') ==> ('foo','b') + ('foo','a') + ('foo','r')Filter Mapper --> ('foo','7') ==> ('foo','7) ; ('foo','7') ==> nadaChanging keyspace --> ('foo','bar') ==> ('3','bar')

--> Existe MR a MR sin pasar por disco entre medias, pero de momento lo dejamos ahi

-->Reducer: recibe Clave y lista de valores. El S&S se lo envia en orden!

-- Numero de reducer, jugar con el numero para parelizacion, pero depende de los datos => Conocer los datos!!! PRUEBA y ERROR....

--> Todas las claves que sean iguales van a ir al mismo Reducer!! --> Diseño de MapReduce es como definir esas claves intermedias para jugar con la carga y que sea mas homogenea..!

La palabra cat puede estar en varios Mappers, por eso necesitas la fase de reduce par unificar por palabra...!!

· WordCount- Map: Te entra el texto y sacas cada palabra y el numero der veces que aparece! Maper saca eso --> emit(w,1)- Reduce: Itera el numero de veces de la palabra y suma n --> emit (out, count) ==> Basicamente la jugada es que lo tendrias en distintos Mapper (lineas) en la entrada. El Reducer ahora ya es el mismo para una palabra dada, por lo que no tiene problems xa contar de la lista de valores los que sean!!!

--> Reducer solo empieza a trabajar cuando han acabado todos los Mapper (sino se dejaria alguno). Los reducer ya no tienen data locality!. --> Interesa tener ojo al enviar cosas al reducer para no joder el rendimiento, xo a veces no tendras mas webs!

Page 5: Notas Curso Hadoop

MapReduce Exercise:$ cd ~/training_materials/developer/exercises/wordcount$ ls$ javac -classpath `hadoop classpath` *.java$ jar cvf wc.jar *.class$ hadoop jar wc.jar WordCount shakespeare wordcounts$ hadoop fs -ls wordcounts$ hadoop fs -cat wordcounts/part-r-00000 | less$ hadoop jar wc.jar WordCount shakespeare/poems pwords$ hadoop fs -rm -r wordcounts pwords

$ hadoop jar wc.jar WordCount shakespeare count2$ mapred job -list$ mapred job -kill jobid

Cada reducer tiene un part particular

==> Consola JobTracker : para gestionar y ver ejecucion de los jobs y tal....--> Al cabo de un tiempo (configurable) o se eliminan o pasan a retired jobs...

· HIVE- Querys a la SQL (muy parecido)

·PIG- Abstraccion alternativa sobre MApReduce

·Impala- Es mas rapido pero necesitas infraestructura aparte --> maazo de RAM.

==> Depende del diseño usar Pig o Hive o no, pierdes control pero programas mas rapido

· Flume y Sqoop- Flume: Incorporar datos en HDFS, x ejemplo logs que vienen de un servidor Web- Sqoop: Incorporar datos de una base de datos (y exportarlo tb)

·Oozie- Para crear flujos de MapReduce jobs (con tareas entre medias tb y tal, rollo copia un archivo aki y ahora otro job, etc) --> Se usa en Voclker seguro

·HBase- Acceso aleatorio a un fichero (bbdd masiva, NoSQL). No puedes usar SQL contra esto, sino que tienes que usar sus comandos. Esta pensado pera ir a un dato concreto vs querys. --> No se usa de momento

·MapReduce Flow: The MapperAl Mapper lo que le llega es un Split que en principio coincide en tamaño (tiene una relacion 1:1) con el bloque, pero puede ser distinto.

Page 6: Notas Curso Hadoop

El Split se lo pasa al record reader, recorre el split detectando lo que es un record. Le puedes redefinir lo que es un record reader (x ejemplo siquieres uno para JSONs) o puedes cojer alguno definido por defecto.

Split+Reader es Format, por lo que cojes ya uno hecho...

Partioner es el que se encarga de decir a que Reducer van las claves (por defecto hace una hash de la clave). Puedes definir lo que quieras basicamente, puede hacer cualquier funcion que coja k, v, ambos, ninguno tal que devuelve un valor de 0 a n-1 que indique un partioner al que atacar.

RecordWriter, que es como el OutputFormat analgo al de entrada aunque se suele tocar poco. Cada Reducer escribe a un fichero independiente, si quieres un unico fichero necesitas un unico Reducer o usar otro job despues que los fusione.

Keys and values in Hadoop are Objects!Values are objects which implement Writable!Keys are objects which implment WritableComparable!

Puedes implementar tu overwrite de estas interfaces para lo que te apetezca...--> La API nueva es el paquete mapreduce en vez de mapred; puede haber jaleos con los imports, la mitiK

Cuadrar driver con interfaz de entrada y salida de la clase Mapper y tb con el metodo map.2 primeros son entrada, 2 ultimos salida (k,v). Context permite escribir datos intermedios (contadores y cosas asi al parecer).

Streaming API permite lanzar mapReduce jobs en otros lenguajes...- Solo puedes usar Mappers y Reducers...