Slide 1

Slide 1 text

Introducción a APACHE™ HADOOP™

Slide 2

Slide 2 text

HADOOP ● Un framework para computación y persistencia distribuida ● Permite montar fácilmente y de manera fiable clusters con multitud de nodos ● Implementa Map/Reduce y un sistema de archivos distribuido (HDFS) ¿Qué es?

Slide 3

Slide 3 text

HISTORY ● Comenzó como funcionalidad de Nutch ● Basado en Google GFS y MapReduce ● Iniciado por Doug Cutting ● Ahora es un Apache Project

Slide 4

Slide 4 text

HISTORY Subproyectos dentro de Hadoop: Hbase Hive PIG ...

Slide 5

Slide 5 text

HISTORY ● Mayor capacidad de computación/almacenamiento ● Reduce el riesgo de fallo (Redundancia de datos) ● Tiempos de lectura y seektimes se “solapan” ● €(1000 PC quad)<€(1 server 4000 cores) ¿Por qué distribuir?

Slide 6

Slide 6 text

Elementos del “Core” HDFS MapRed

Slide 7

Slide 7 text

Elementos del “Core” ● Hadoop Distributed File System ● Transparencia: Nos abstrae de la distribución de datos ● Para el usuario es como tener un filesystem local ● Alta tolerancia a fallos ● Diseñado para usarse con commodity hardware ● Escalable ● Portable ¿Qué es HDFS?

Slide 8

Slide 8 text

Elementos del “Core” ¿Qué es MapReduce? MapReduce es un modelo de programación aplicable a problemas en los que la solución de una subparte no sea dependiente de las soluciones de las demás subpartes Es una especie de divide y vencerás sin pasos intermedios, se divide el problema inicialmente en subproblemas independientes (pero de igual resolución) y se soluciona cada uno independientemente. Funciona en dos fases, la primera genera una lista de “soluciones” intermedias y la segunda se alimenta de estas “soluciones” que se dividen de nuevo en subproblemas independientes y se computan, componiendo la solucion al final

Slide 9

Slide 9 text

Elementos del “Core” ¿Qué es MapReduce? “Hadoop MapReduce is a programming model and software framework for writing applications that rapidly process vast amounts of data in parallel on large clusters of compute nodes” Basado en MapReduce de Google (“MapReduce: Simplified Data Processing on Large Clusters”, Jeffrey Dean and Sanjay Ghemawat, 2004)

Slide 10

Slide 10 text

HDFS Arquitectura Modelo Maestro/Esclavo Namenode/Datanode ● Namenode controla: – Persistencia – Replicación, recuperación de fallos – Estructura del dfs – Acceso a recursos del dfs

Slide 11

Slide 11 text

HDFS Arquitectura Datanode controla: – Creación y borrado de los bloques de datos – Emisión de heartbeat – Envio de Blockreport – Pipeline de replicación

Slide 12

Slide 12 text

HDFS Arquitectura Nodos especiales Secondary Namenode Era ~ checkpointnode, se pretende Standby-namenode Sustituido por: Backupnode Mantiene una copia en memoria del FS aparte del checkpoint Si hay backupnode no puede haber checkpoint registrado Checkpointnode

Slide 13

Slide 13 text

HDFS Arquitectura

Slide 14

Slide 14 text

HDFS Arquitectura ● Los protocolos usados en HDFS se implementan sobre TCP/IP ● La comunicación entre procesos se realiza como Remote Procedure Call (RPC) ● Los metadatos se mantienen en memoria (Rapidez de acceso) ● Organización jerárquica

Slide 15

Slide 15 text

HDFS Arquitectura

Slide 16

Slide 16 text

HDFS ● Hdfs tiene su propia shell (http://hadoop.apache.org/common/docs/r0.17.2/hdfs_shell.html) ● get: Copia a local el fichero del hdfs hadoop fs -get src dest ● put: Copia desde local multiples ficheros al hdfs. hadoop fs -put src ..... dest ● setrep: Cambia el factor de replicación de uin fichero hadoop fs -setrep -w 3 -R dest ● Comandos típicos: mkdir, ls, lsr (ls recursivo), cat, touch, tail, chmod, cp, du, rm ... Linea de comandos

Slide 17

Slide 17 text

HDFS Linea de comandos ● Comandos de adminstración: ● dfsadmin [report | safemode] hadoop dfsadmin -report ● namenode -format: Formatea hdfs, debe estar apagado el cluster. hadoop namenode -format ● fsck $path: Utilidad de chequeo de los directorios hdfs hadoop fsck /

Slide 18

Slide 18 text

HDFS REPLICACIÓN DE DATOS ● Pipeline de replicación – Namenode envia el bloque en paquetes de 4K al 1er Datanode – El Datanode envia el paquete al siguiente Datanode,.. ● En lectura se intenta seleccionar la replica más cercano al cliente ● Safemode – En el arranque el namenode entra en safemode (read-

Slide 19

Slide 19 text

HDFS ROBUSTEZ Caída de un datanode – Fallo de heartbeat – Se registra el nodo como no disponible – No se intentan más conexiones I/O – Se revisa blockreport y se identifican las réplicas de los bloque perdidos – Se ordena la replicación a los datanodes

Slide 20

Slide 20 text

HDFS ROBUSTEZ

Slide 21

Slide 21 text

HDFS ROBUSTEZ Rebalanceo de cluster ● El cluster está correctamente balanceado si no existen nodos sobre o infra utilizados. El nivel de uso se define con % de espacio usado ● Infrautilizado es un uso inferior a (uso_medio – umbral)

Slide 22

Slide 22 text

HDFS INTEGRIDAD DE DATOS ● Por defecto se replican 3 veces cada bloque mateniendo compromiso dispersion- tiempos_de_acceso ● Cuando un bloque se escribe o lee se chequea su checksum

Slide 23

Slide 23 text

HDFS INTEGRIDAD DE DATOS “HDFS lost 650 blocks out of 329 million blocks on 10 clusters with 20,000 nodes running Apache Hadoop 0.20.3. – 533 blocks were temporary blocks abandoned by a failed client (0.21 fixed) – 98 blocks were blocks explicitly created with a single replica – 19 blocks were lost due to roughly 7 bugs that were promptly fixed in dot releases of 0.20

Slide 24

Slide 24 text

HDFS Fallos en los metadatos Checkpointnodes BackupNodes

Slide 25

Slide 25 text

HDFS ¿Y si todo falla? ● Estrategias de replicación total o parcial del cluster ● Configuraciones ad-hoc para sustituir NameNode (Zookeeper) ● DistCp: Comando hadoop para copia de big data usando map/reduce ● Se trabaja en un NameNode suplente

Slide 26

Slide 26 text

MapReduce Arquitectura Arquitectura Maestro/Esclavo JobTracker/TaskTracker: ● Un único master: JobTracker ● Responsable de la gestion de las tareas asignadas a los esclavos ● Las monitoriza y se encarga de re-ejecutarlas si han fallado ● N esclavos: TaskTracker ● Ejecutan las tareas asignadas por el JobTracker

Slide 27

Slide 27 text

MapReduce Como funciona

Slide 28

Slide 28 text

MapReduce ¿Como funciona?

Slide 29

Slide 29 text

MapReduce Aspectos Avanzados ● Reporting Clases con espacio de memoria compartido Thread-safe, se escribe solo en el master ● Distributed Cache Almacena archivos necesarios para la ejecución Los hace accesibles a todos los mappers/reducers ● Debug Scripts Se ejecutan en caso de fallo Pueden usarse 2 diferentes para map o reduce

Slide 30

Slide 30 text

MapReduce Tolerancia a Fallos ● Las task tanto map como reduce se recuperan si no han terminado con exito ● Si se cae un reducer se repite la ultima task si es un mapper se repite todas las tareas ● Ejecución especulativa

Slide 31

Slide 31 text

MapReduce Multilenguaje Inicialmente pensado para Java Hadoop Streaming para el resto de lenguajes API C++: Hadoop Pipes

Slide 32

Slide 32 text

MapReduce ¿Cómo usarlo? MAP: ● Transforma los datos de entrada en datos intermedios ● Los datos de entrada no necesitan ser los mismos que los datos de salida ● Los datos de entrada pueden generar 0 o más pares (K2,list) de salida ● Debe extender de MapReduceBase ● Debe implementar Mapper donde: ● K1,V1: Par de los datos de entrada: ● K1: Clave de los datos de entrada. ● V1: Valor de los datos de entrada. ● K2,V2: Par de datos de salida que se mandan al reducer: ● K2: Clave de los datos de salida. En la etapa de shuffle and sort se ordena por este valor. ● V2: Valores de los datos de salida.

Slide 33

Slide 33 text

MapReduce ● Función map: void map(K1 key,V1 value, OutputCollector, Reporter reporter): ● K1 key: Clave de los datos de entrada ● V1 value: Valor de los datos de entrada ● OutputCollector: Recolector de los datos generados en el map. K2 y V2 serán los datos de que reciba el reducer. ● Reporter reporter: Provee de la opción de generar información extra del proceso, como puede ser el progreso de la tarea. ● Mappers implementados: ● IdentityMapper: Implementa Mapper y mapea directamente la entrada a la salida ● InverseMapper: Implementa Mapper y mapea inversamente la entrada a la salida ● RegexMapper: Implementa Mapper y genera pares de (match, 1) para cada resultado que la expresión regular tenga un match. ● TokenCountMapper: Implementa Mapper y genera pares de (token,1)

Slide 34

Slide 34 text

MapReduce Reducer: ● Recibe la key y la lista de valores asociados a esa clave generando una lista de pares K3,V3 ● Debe extender MapReduceBase ● Debe implementar Reducer siendo: ● K2: Clave de los datos de entrada.Debe ser del mismo tipo que la salida del mapper. ● V2: Valores de los datos de entrada.Debe ser del mismo tipo que la salida del mapper. ● K3: Clave de los datos de salida. ● V3: Valor de los datos de salida. ● Función reduce: void reduce(K2 key, Iterator values, OutputCollector output, Reporter reporter) ● K2 key: Clave de la salida del map ● Iterator: Iterador sobre los valores de la salida del map. ● OuputCollector:Recolector de los datos generados en el reducer. K3 y V3 serán los datos finales de salida del reducer. ● Provee de la opción de generar información extra del proceso, como

Slide 35

Slide 35 text

MapReduce ● Reducers útiles implementados: ● IdentityReducer: Implementa Reducer y mapea directamente la entrada a la salida ● LongSumReducer: Implementar Reducer y suma todos los valores para cada clave ● Tipos de datos: ● Puedes crear tus propios datos (K1,V1,K2,V2): ● Deben implementar WritableComparable ● Tipo de datos frecuentes: ● BooleanWritable ● ByteWritable ● DoubleWritable ● FloatWritable ● IntWritable ● LongWritable ● Text ● NullWritable: Cuando la clave o valor no son necesarios

Slide 36

Slide 36 text

MapReduce ● Cadenas de mappers y reducers: ● Se pueden encadenar ejecuciones de mappers y reducers ● No necesariamente tienen que ser en la secuencia map | reduce | map | reduce .... ● Varias maneras: ● ChainMapper: ● addMapper: Método estático que encadena a una determinada configuración el mapper a realizar. ● addReducer: Método estático que encadena a una determinada configuración el reducer a realizar. ● Job: ● addDependingJob: Crea una dependencia sobre jobs que se deban ejecutar antes. ● JobControl: ● addJob: Añade un job a la lista ● addJobs: Añade una coleccion de jobs

Slide 37

Slide 37 text

MapReduce ¿Cómo se ejecuta? ● JobConf: Configuración del map/reduce a ejecutar. Parámetros importantes a configurar: ● InputFormats y OutputFormats. Define el formato de la entrada y salida ● Mappers and Reducers. Cadenas de Mappers y Reducers ● Combiners, Partitioners, DistributedCache, Counters... ● OutputKeyClass y OutputValueClass. Definen el tipo de los datos salida de la ejecución. ● JobClient: Ejecuta la tarea dada un JobConf: JobClient.run(JobConf conf) ● JobControl: Ejecuta la lista de jobs añadidos: JobControl jobs.run()

Slide 38

Slide 38 text

HADOOP Instalación cloudera pseudo-distrubuido ubuntu: ● Añadir los repositorios de cloudera: ● Instalar hadoop en pseudo-distribuido: ● Ejecutar hadoop:

Slide 39

Slide 39 text

HADOOP Archivos de configuración importantes: ● core-site.xml: ● fs.default.name: Uri del Namenode, ej. hdfs://localhost:8020/ ● hdfs-site.xml: ● dfs.name.dir: Path donde el namenode guarda el namespace y los logs de las transiciones. ● dfs.data.dir: Path donde el datanode guarda los datos. ● mapred-site.xml: ● mapred.job.tracker: Uri del jobtracker, ej. Localhost:8021 ● masters: Ip del namenode. En pseudodistribuido: localhost ● slaves: Lista de esclavos

Slide 40

Slide 40 text

Problemas típicos: ● Problemas de permisos: Mirar tanto permisos como usuarios, de los logs, binarios, data dir del hdfs... ● Problemas de redirecciones (ConnectionRefused): Comprobar el archivo /etc/hosts, conectividad a la máquina, puertos abiertos. ● Filesystem corrupto (En la etapa de desarrollo): Ejecutar hadoop namenode -format HADOOP

Slide 41

Slide 41 text

MapReduce Monitoring ● Ganglia ● Nagios

Slide 42

Slide 42 text

¿Pero esto se usa?: Yahoo: >82PB >25Knodes FaceBook: 15TB nuevos datos al dia 12PB +10000cores 6k mensajes/seg,50k mensajes_instantaneos/seg Twitter: 1TB/dia de nuevos datos Ebay,Linkedin,Last.fm,NYTimes,.... HADOOP