Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducción a Apache Hadoop

Paradigma
December 22, 2011

Introducción a Apache Hadoop

Apache Hadoop es una librería open Source para procesamiento distribuido donde caracterizada principalmente por su fiabilidad y escalabilidad. La clave de Hadoop es la posibilidad de manejar grandes cantidades de datos bajo un modelo de programación simple.

Paradigma

December 22, 2011
Tweet

More Decks by Paradigma

Other Decks in Technology

Transcript

  1. 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?
  2. HISTORY • Comenzó como funcionalidad de Nutch • Basado en

    Google GFS y MapReduce • Iniciado por Doug Cutting • Ahora es un Apache Project
  3. 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?
  4. 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?
  5. 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
  6. 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)
  7. HDFS Arquitectura Modelo Maestro/Esclavo Namenode/Datanode • Namenode controla: – Persistencia

    – Replicación, recuperación de fallos – Estructura del dfs – Acceso a recursos del dfs
  8. HDFS Arquitectura Datanode controla: – Creación y borrado de los

    bloques de datos – Emisión de heartbeat – Envio de Blockreport – Pipeline de replicación
  9. 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
  10. 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
  11. 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
  12. 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 /
  13. 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-
  14. 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
  15. 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)
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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<V2>) de salida • Debe extender de MapReduceBase • Debe implementar Mapper<K1,V1,K2,V2> 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.
  23. MapReduce • Función map: void map(K1 key,V1 value, OutputCollector<K2,V2>, Reporter

    reporter): • K1 key: Clave de los datos de entrada • V1 value: Valor de los datos de entrada • OutputCollector<K2,V2>: 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<K,V>: Implementa Mapper<K,V,K,V> y mapea directamente la entrada a la salida • InverseMapper<K,V>: Implementa Mapper<K,V,V,K> y mapea inversamente la entrada a la salida • RegexMapper<K>: Implementa Mapper<K,Text,Text,LongWritable> y genera pares de (match, 1) para cada resultado que la expresión regular tenga un match. • TokenCountMapper<K>: Implementa Mapper<K,Text,Text,LongWritable> y genera pares de (token,1)
  24. 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<K2,V2,K3,V3> 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<V2> values, OutputCollector<K3, V3> output, Reporter reporter) • K2 key: Clave de la salida del map • Iterator<V2>: Iterador sobre los valores de la salida del map. • OuputCollector<K3,V3>: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
  25. MapReduce • Reducers útiles implementados: • IdentityReducer<K,V>: Implementa Reducer<K,V,K,V> y

    mapea directamente la entrada a la salida • LongSumReducer<K>: Implementar Reducer<K,LongWritable,K,LongWritable> 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
  26. 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
  27. 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()
  28. HADOOP Instalación cloudera pseudo-distrubuido ubuntu: • Añadir los repositorios de

    cloudera: • Instalar hadoop en pseudo-distribuido: • Ejecutar hadoop:
  29. 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
  30. 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
  31. ¿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