Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Introducción a Hadoop

1,957 views

Published on

Cursilllo impartido en el VII Seminario de Invierno, organizado por la red CAPAP-H, Madrid, 28 y 29 de enero de 2016















Published in: Technology

Introducción a Hadoop

  1. 1. Apache Hadoop Tomás Fernández Pena VII Seminario de Invierno, Red CAPAP-H 29 de enero de 2016 Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) citius.usc.es
  2. 2. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  3. 3. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  4. 4. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop ¿Qué es Big Data? Wikipedia In information technology, big data is a collection of data sets so large and complex that it becomes difficult to process using on-hand database management tools or traditional data processing applications. The challenges include capture, curation, storage, search, sharing, analysis, and visualization. Apache Hadoop, VII Seminario de Invierno 1/125
  5. 5. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características del Big Data Las 5 Vs del BigData Volume enorme cantidad de datos generados Velocity rapidez con la que se generan y mueven esos datos Variety datos de múltiples tipos, estructurados y no-estructurados: texto, datos de sensores, audio, vídeo, click streams, ficheros de log, etc. Veracity datos correctos o incorrectos Value capacidad de extraer valor de los datos Apache Hadoop, VII Seminario de Invierno 2/125
  6. 6. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Aluvión de datos El mundo está creando más bits que nunca: en 2013, se calcula unos 4,4 Zettabytes (4, 4 × 1021 ), y se estiman unos 44 ZB en 2020 La cantidad de datos se dobla cada dos años Apache Hadoop, VII Seminario de Invierno 3/125
  7. 7. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Fuentes de datos Origen de los datos: Redes sociales Redes de sensores Datos de GPS Datos de genoma Datos científicos . . . Apache Hadoop, VII Seminario de Invierno 4/125
  8. 8. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Retos tecnológicos (I) Búsqueda y refinamiento (Lucene, Solr, Nutch, Elasticsearch, OpenRefine, ScraperWiki, BloomReach) Serialización (JSON, BSON, Apache Thrift, Apache Avro, Google Protocol Buffers) Sistemas de almacenamiento (HDFS, GFS, Lustre, Amazon S3) Servidores (Amazon EC2, Google Cloud Platform, Azure, OpenShift, Heroku, Pivotal, Ambari) Procesamiento (Hadoop, Hive, Pig, Spark, Flink, Tez, Cascading, Azkaban, Oozie, mrjob, Twister, Flume, Storm, Samza, Falcon, Cloudera, MapR, Hortonworks, Platfora, Cask) Apache Hadoop, VII Seminario de Invierno 5/125
  9. 9. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Retos tecnológicos (II) Bases de datos (HBase, Cassandra, Accumulo, MongoDB, CouchDB, Hypertable, Parquet, Riak, Amazon DynamoDB, Google BigTable, Drill, Sqoop) Análisis (R, IBM BigSheets, Greenplum, Splunk, Datameer, WibiData) Lenguaje natural (Natural Language Toolkit, Apache OpenNLP, Perldoop, Boilerpipe, Open Calais) Machine learning (aprendizaje automático) (Weka, Apache Mahout, scikit-learn, Skytree) Visualización (R, D3.js, Tableau, IBM Cognos Insight, Google Fusion Tables) Apache Hadoop, VII Seminario de Invierno 6/125
  10. 10. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop BigData Landscape Apache Hadoop, VII Seminario de Invierno 7/125
  11. 11. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Programando para el Big Data: historia Finales de los 90: crecimiento explosivo de los datos las empresas no pueden almacenarlos Tendencia al escalado horizontal de clusters de commodity hardware Apache Hadoop, VII Seminario de Invierno 8/125
  12. 12. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Programando para el Big Data: historia Circa 2002 Se busca mitigar el riesgo de pérdidas de grandes workloads distribuidas debidas a fallos de los discos en commodity hardware Google publica 2 papers: Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung, “The Google File System ”, 19th ACM Symposium on Operating Systems Principles, Lake George, NY, October, 2003. http://research.google.com/archive/gfs.html, Jeffrey Dean and Sanjay Ghemawat, “MapReduce: Simplified Data Processing on Large Clusters”, OSDI’04, San Francisco, CA, December, 2004. http://research.google.com/archive/mapreduce.html Circa 2005 Doug Cutting y Mike Cafarella crean Hadoop Apache Hadoop, VII Seminario de Invierno 9/125
  13. 13. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Procesamiento del Big Data Necesitamos: Escalabilidad con grandes volúmenes de datos 1000’s de máquinas 10,000’s de discos Equipos y redes de bajo coste poco fiables elevadas latencias Facilidad de programación Tolerancia a fallos automática Apache Hadoop, VII Seminario de Invierno 10/125
  14. 14. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Problemas en la ejecución Los nodos baratos fallan, sobre todo si hay muchos Tiempo medio entre fallos para 1 nodo = 3 años Tiempo medio entre fallos para 1000 nodos = 1 día Solución: implementar tolerancia a fallos en el sistema Red de bajo coste = elevada latencia Solución: llevar la computación a los datos - Minimizar el movimiento de los datos Dificultad de programación Solución: un modelo de programación paralelo intensivo en datos - Los usuarios escriben funciones simples - El sistema distribuye el trabajo y maneja los fallos Apache Hadoop, VII Seminario de Invierno 11/125
  15. 15. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  16. 16. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Apache Hadoop Framework para el almacenamiento y procesamiento distribuido Manejo de enormes cantidades de datos en commodity clusters Escala: petabytes de datos en miles de nodos Apache Hadoop, VII Seminario de Invierno 12/125
  17. 17. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ecosistema Hadoop (I) Tecnologías relacionadas: Pig: lenguaje data-flow de alto nivel para facilitar la programación MapReduce Hive: infraestructura de data-warehouse construida sobre Hadoop Spark: motor de procesamiento de datos de carácter general compatible con datos Hadoop Oozie, Crunch, Cascading, Hamake: planificadores de workflows para gestionar trabajos Hadoop Tez: ejecución de DAGs de tareas complejos para queries interactivas S4, Storm: procesamiento de flujos de datos (stream processing) Impala: queries en tiempo real para Hadoop Twill: abstracción sobre YARN que reduce la complejidad de desarrollar aplicaciones distribuidas Apache Hadoop, VII Seminario de Invierno 13/125
  18. 18. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tecnologías relacionadas (II) HBase: base de datos distribuida no-relacional (NoSQL) que corre sobre HDFS (inspirado en Google BigTable) Sqoop: transferencia eficiente de datos entre Hadoop y bases de datos relacionales Parquet: formato de almacenamiento columnar para almacenamiento eficiente de datos anidados Ambari: herramienta basada en web para aprovisionar, gestionar y monitorizar clusters Hadoop Hue: interfaz web para simplificar el uso de Hadoop ZooKeeper: servicio centralizado de configuración, nombrado, sincronización distribuida y servicios de grupos para grandes sistemas distribuidos BigTop: empaquetamiento y tests para el ecosistema Hadoop Apache Hadoop, VII Seminario de Invierno 14/125
  19. 19. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tecnologías relacionadas (III) HCatalog: interfaces para permitir el acceso al Hive metastore desde diversas herramientas WebHCat: API REST-like para HCatalog (antes Templeton) Falcon: solución para el procesamiento y gestión de datos para Hadoop (movimiento. coordinación, gestión del ciclo de vida, descubrimiento). Slider: aplicación para desplegar aplicaciones distribuidas existentes en YARN (aplicaciones long-running) Hama: framework de computación Bulk Synchronous Parallel sobre HDFS Flume: obtención, agregación y movimiento de grandes ficheros de log a HDFS NiFi: automatización del flujo de datos entre sistemas de todo tipo Apache Hadoop, VII Seminario de Invierno 15/125
  20. 20. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tecnologías relacionadas (IV) Knox: REST API Gateway para interactuar con clusters Hadoop incorporando seguridad (autenticación/autorización/auditoría) Twister: aplicaciones MapReduce iterativas Mahout: algoritmos escalables de machine learning y minería de datos sobre Hadoop Chukwa: sistema de recogida de datos para monitorizar grandes sistemas distribuidos Flink: procesamiento in-memory y de streams (similar a Spark) Harp: abstracciones para datos y comunicaciones en el procesamiento Big Data Pydoop: Python API para Hadoop Perldoop: Traducción de códigos MR en Perl a Java Más ejemplos en https://hadoopecosystemtable.github.io/ Apache Hadoop, VII Seminario de Invierno 16/125
  21. 21. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características de Hadoop Incluye Almacenamiento: HDFS Gestor de recursos: YARN, (sólo MapReduce en Hadoop v1) Modelo de programación: MapReduce Ventajas Bajo coste: clusters baratos o cloud Facilidad de uso Tolerancia a fallos Apache Hadoop, VII Seminario de Invierno 17/125
  22. 22. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Instalación Instalación relativamente simple: aplicación Java Paquete fuente: hadoop.apache.org/releases.html Sistemas preconfigurados proporcionados por empresas como Cloudera (www.cloudera.com), MapR (www.mapr.com) o Hortonworks (hortonworks.com), o más específicas como la distribución de Intel o IBM InfoSphere BigInsight Modos de funcionamiento: Standalone: todo en un nodo, para pruebas Pseudodistribuido: funciona como una instalación completa, pero en un solo nodo Totalmente distribuido Apache Hadoop, VII Seminario de Invierno 18/125
  23. 23. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Arquitectura Hadoop v1 Apache Hadoop, VII Seminario de Invierno 19/125
  24. 24. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hadoop v2 Este esquema se ha modificado en Hadoop 2.0 con YARN (Yet Another Resource Negociator) (HDFS se mantiene) separa las dos funcionalidades del Jobtracker (gestión de recursos y job-scheduling/monitorización) en demonios separados Resource manager (RM): planificador general Node managers (NM): monitorización, uno por nodo Application masters (AM): gestión de aplicaciones, uno por aplicación permite que diferentes tipos de aplicaciones (no solo MapReduce) se ejecuten en el cluster Apache Hadoop, VII Seminario de Invierno 20/125
  25. 25. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Arquitectura Hadoop v2 Apache Hadoop, VII Seminario de Invierno 21/125
  26. 26. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo Hadoop v1 HDFS Almacenamiento distribuido MapReduce Procesamiento distribuidoHBase Basededatos no-relacional Pig Scripts Hive Query Otrosproyectos Oozie,HCatalog,Sqoop, ZooKeeper,Mahout,... Apache Hadoop, VII Seminario de Invierno 22/125
  27. 27. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo Hadoop v2 HDFS Almacenamiento distribuido MapReduce Procesamiento distribuidoHBase Basededatos no-relacional Pig Scripts Hive Query Otrosproyectos Oozie,HCatalog,Sqoop, ZooKeeper,Mahout,... YARN Planificador y negociador de recursos Otrosproyectos YARN Apache Hadoop, VII Seminario de Invierno 23/125
  28. 28. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  29. 29. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop HDFS: Hadoop Distributed File System Hadoop puede acceder a diferentes tipos de filesystems (local, HDFS, KFS, S3,. . . ) Se recomienda HDFS: Hadoop Distributed File System HDFS: Ventajas Diseñado para almacenar ficheros muy grandes en commodity hardware Elevado ancho de banda Fiabilidad mediante replicacion HDFS: Inconvenientes Elevada latencia Poco eficiente con muchos ficheros pequeños Modificaciones siempre al final de los ficheros No permite múltiples escritores (modelo single-writer, multiple-readers Apache Hadoop, VII Seminario de Invierno 24/125
  30. 30. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Conceptos de HDFS Namenode Mantiene la información (metadatos) de los ficheros y bloques que residen en el HDFS Datanodes Mantienen los datos Bloques Por defecto 128 MB (64 MB en v1) bloques pequeños aumentan el paralelismo (un bloque por Map) bloques más grandes ocultan la latencia de búsqueda y reducen la carga del NameNode Apache Hadoop, VII Seminario de Invierno 25/125
  31. 31. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Conceptos de HDFS (cont.) Checkpoint node Mantienen checkpoints del Namenode debería ejecutarse en un sistema con características similares al Namenode Apache Hadoop, VII Seminario de Invierno 26/125
  32. 32. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Filesystems Hadoop tiene una noción abstracta de los filesystems HDFS es un caso particular de filesystem Algunos filesystems soportados: FS URI Descripción Local file Disco local HDFS hdfs Sistema HDFS HFTP hftp RO acceso a HDFS sobre HTTP HSFTP hsftp RO acceso a HDFS sobre HTTPS WebHDFS webhdfs RW acceso a HDFS sobre HTTP S3 (nativo) s3n Acceso a S3 nativo S3 (block) s3 Acceso a S3 en bloques Ejemplo: hdfs dfs -ls file:///home/pepe Más opciones: hdfs dfs -help Apache Hadoop, VII Seminario de Invierno 27/125
  33. 33. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Interactuar con HDFS Tres modos principales: 1. Usando línea de comandos: comando hdfs dfs Permite cargar, descargar y acceder a los ficheros desde línea de comandos Vale para todos los filesystems soportados Ayuda: hdfs dfs -help 2. Usando el interfaz web (solo lectura) por defecto, puerto 50070 del Namenode 3. API Java 4. Mediante otras interfaces: WebHDFS, HFTP, HDFS NFS Gateway Apache Hadoop, VII Seminario de Invierno 28/125
  34. 34. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Interfaz en línea de comandos (I) Algunos comandos de manejo de ficheros Comando Significado hdfs dfs -ls <path> Lista ficheros hdfs dfs -ls -R <path> Lista recursivamente hdfs dfs -cp <src> <dst> Copia ficheros HDFS a HDFS hdfs dfs -mv <src> <dst> Mueve ficheros HDFS a HDFS hdfs dfs -rm <path> Borra ficheros en HDFS hdfs dfs -rm -r <path> Borra recursivamente hdfs dfs -cat <path> Muestra fichero en HDFS hdfs dfs -tail <path> Muestra el final del fichero hdfs dfs -stat <path> Muestra estadísticas del fichero hdfs dfs -mkdir <path> Crea directorio en HDFS hdfs dfs -chmod ... Cambia permisos de fichero hdfs dfs -chown ... Cambia propietario/grupo de fichero hdfs dfs -du <path> Espacio en bytes ocupado por ficheros hdfs dfs -du -s <path> Espacio ocupado acumulado hdfs dfs -count <paths> Cuenta nº dirs/ficheros/bytes Apache Hadoop, VII Seminario de Invierno 29/125
  35. 35. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Interfaz en línea de comandos (II) Movimiento de ficheros del sistema local al HDFS: Comando Significado hdfs dfs -put <local> <dst> Copia de local a HDFS hdfs dfs -copyFromLocal ... Igual que -put hdfs dfs -moveFromLocal ... Mueve de local a HDFS hdfs dfs -get <src> <loc> Copia de HDFS a local hdfs dfs -copyToLocal ... Copia de HDFS a local hdfs dfs -getmerge ... Copia y concatena de HDFS a local hdfs dfs -text <path> Muestra el fichero en texto Apache Hadoop, VII Seminario de Invierno 30/125
  36. 36. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Interfaz en línea de comandos (III) Otros comandos: Comando Significado hdfs dfs -setrep <path> Cambia el nivel de replicación hdfs dfs -test -[defsz] <path> Tests sobre el fichero hdfs dfs -touchz <path> Crea fichero vacío hdfs dfs -expunge Vacía la papelera hdfs dfs -usage [cmd] Ayuda uso de comandos Más información: http://hadoop.apache.org/docs/current/hadoop-project- dist/hadoop-common/FileSystemShell.html Apache Hadoop, VII Seminario de Invierno 31/125
  37. 37. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 32/125
  38. 38. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (I) Práctica 1 a) Conéctate al NameNode del cluster: ssh -X studentXX@urraca.arcos.inf.uc3m.es (password: .bigdata.2016!) b) Comprueba si tienes ficheros en tu directorio HDFS c) Copia el directorio local /home/tfernandez/datos al directorio datos en tu directorio base en HDFS d) Cambia a 4 el nivel de replicación del fichero datos/libros/random_words.txt.bz2 e) Lanza el Firefox en el NameNode y úsalo para ver el interfaz web del HDFS (http://urraca.arcos.inf.uc3m.es:50070) - Usa la utilidad “Browse the filesystem” para ver el número de bloques y la localización de los mismos para el fichero datos/libros/random_words.txt.bz2 Apache Hadoop, VII Seminario de Invierno 33/125
  39. 39. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop API Java API que permite interactuar con los filesystems soportados por Hadoop Utiliza la clase abstracta org.apache.hadoop.fs.FileSystem Otras clases de interés en org.apache.hadoop.fs y org.apache.hadoop.io Path: representa a un fichero en un FileSystem FileStatus: información del fichero FSDataInputStream: stream de entrada de datos para un fichero, con acceso aleatorio FSDataOutputStream: stream de salida de datos para un fichero IOUtils: Funcionalidades para I/O Apache Hadoop, VII Seminario de Invierno 34/125
  40. 40. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de ficheros Método open(Path) de FileSystem Devuelve un FSDataInputStream Interfaces implementadas por FSDataInputStream: 1. Seekable: permite movernos a una posición en el fichero (método seek) 2. PositionedReadable: permite copiar a un buffer partes de un fichero Apache Hadoop, VII Seminario de Invierno 35/125
  41. 41. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de ficheros Dos métodos de FileSystem para abrir los ficheros para escritura: 1. create: crea un fichero para escritura (crea los directorios padre, si es preciso) 2. append: abre un fichero para añadir datos Ambos métodos devuelven un FSDataOutputStream FSDataOutputStream no permite seek (solo escritura al final del fichero) El método hflush() garantiza coherencia, pero supone un overhead (en Hadoop v1 método sync()) El método hsync() garantiza que los datos se mandan a disco (pero pueden estar en la caché del disco) Apache Hadoop, VII Seminario de Invierno 36/125
  42. 42. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Otras operaciones con ficheros y directorios Crear un directorio: Método mkdirs de FileSystem Información sobre ficheros y directorios: Métodos getFileStatus y listStatus de FileSystem Clase FileStatus Patrones de nombres de ficheros (globbing) Método globStatus de FileSystem Interfaz PathFilter, para filtrar con expresiones regulares Borrar ficheros o directorios, de forma recursiva o no: Método delete de FileSystem Apache Hadoop, VII Seminario de Invierno 37/125
  43. 43. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 38/125
  44. 44. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (II) Práctica 2: a) En la máquina virtual, inicia el Eclipse y revisa el programa FileSystemCat en el proyecto 01-hdfs b) Utiliza FileSystemCat para ver el fichero un fichero de texto (por ejemplo datos/quijote.txt) $ cd ~/SeminarioInvierno/Hadoop-Practicas/ $ cd 01-hdfs/target/classes $ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:’.’ $ hdfs cursohadoop.hdfs.FileSystemCat > ~/SeminarioInvierno/datos/quijote.txt c) Completa el programa CopyHalfFile para que copie la mitad inferior del fichero anterior en el HDFS a otro fichero en otro directorio del HDFS Apache Hadoop, VII Seminario de Invierno 39/125
  45. 45. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (II) Práctica 2 (cont): d) Llevar el código y probarlo en el cluster $ scp -rp cursohadoop/ studentXX@urraca.arcos.inf.uc3m.es:~ $ ssh studentXX@urraca.arcos.inf.uc3m.es ... $ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:’.’ $ hdfs cursohadoop.hdfs.FileSystemCat datos/quijote.txt Apache Hadoop, VII Seminario de Invierno 40/125
  46. 46. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Otras interfaces a HDFS Otros modos de acceder a HDFS WebHDFS: proporciona una API REST para acceder a HDFS mediante HTTP Activada mediante la propiedad dfs.webhdfs.enabled del fichero hdfs-site.xml del Namenode (por defecto, true) HFTP: acceso de solo lectura a HDFS a través de HTTP HDFS NFS Gateway: soporta NFSv3 y permite que HDFS sea montado como parte del sistema de ficheros local del cliente Permite usar HDFS como un sistema de ficheros UNIX local Permite copiar ficheros de HDFS al sistema de ficheros local y viceversa No todas las características están soportadas (p.e. no permite random writes ni enlaces duros) Apache Hadoop, VII Seminario de Invierno 41/125
  47. 47. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 42/125
  48. 48. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Práctica HDFS (III) Práctica 3: En el cluster, ejecuta la siguiente instrucción para leer un fichero usando WebHDFS $ curl -i -L "http://urraca.arcos.inf.uc3m.es:50070/webhdfs/v1/ user/studentXX/datos/quijote.txt?op=OPEN" Apache Hadoop, VII Seminario de Invierno 43/125
  49. 49. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Otras herramientas para mover datos Es posible mover datos a/desde HDFS usando otras herramientas distcp Transferir datos en paralelo entre dos filesystems Hadoop Ejemplo hadoop distcp hdfs://nnode1/foo hdfs://nnode2/bar Aplicación MapReduce map-only Puede usar otros filesystems (HFTP, WebHDFS, etc.) Interesante para mover cantidades masivas de datos Más opciones: hadoop distcp -help Apache Flume servicio para recoger, agregar y mover grandes cantidades de datos de log a HDFS Apache Sqoop transferencia masivas de datos entre bases de datos estructuradas y HDFS Apache Hadoop, VII Seminario de Invierno 44/125
  50. 50. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Herramientas para la gestión del HDFS Hadoop proporciona un conjunto de herramientas para chequear y optimizar el HDFS hdfs dfsadmin: optiene información del estado del HDFS hdfs fsck: chequeo del filesystem sbin/start-balancer.sh: redistribuye bloques entre datanodes Apache Hadoop, VII Seminario de Invierno 45/125
  51. 51. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop hdfs dfsadmin Algunas opciones (usar hdfs dfsadmin comando) Comando Significado -help Ayuda -report Muestra estadísticas del filesystem -setQuota Fija una cuota en el número de nombres en un directorio (nº de ficheros/directorios) -clrQuota Borra la cuota de nombres -setSpaceQuota Fija una cuota en el espacio ocupado en un directorio -clrSpaceQuota Borra la cuota de espacio -refreshNodes Actualiza los nodos que se pueden conectar -safemode fija o chequea el safe mode -saveNameSpace en safe mode, salva el filesystem en memoria a un nuevo fichero fsimage y resetea el fichero edits Apache Hadoop, VII Seminario de Invierno 46/125
  52. 52. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop hdfs fsck Chequea la salud de los ficheros en HDFS Chequea los bloques: Over-replicated: con replicas de más Under-replicated: con replicas de menos Misreplicated: replicas mal colocadas Corruptos Missing replicas: sin réplicas Ejemplos: Chequea recursivamente todo el HDFS hdfs fsck / Informa del número de bloques de un fichero y su localización hdfs fsck /user/pepe/foo -files -blocks -racks Apache Hadoop, VII Seminario de Invierno 47/125
  53. 53. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 48/125
  54. 54. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas HDFS (IV) Práctica 4: a) Haz un chequeo de tu directorio en HDFS b) Haz un chequeo más detallado de los ficheros en el directorio datos/patentes Apache Hadoop, VII Seminario de Invierno 49/125
  55. 55. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem 1: open Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode Apache Hadoop, VII Seminario de Invierno 50/125
  56. 56. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques Apache Hadoop, VII Seminario de Invierno 50/125
  57. 57. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques Apache Hadoop, VII Seminario de Invierno 50/125
  58. 58. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques 4: read Apache Hadoop, VII Seminario de Invierno 50/125
  59. 59. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques 4: read 5: read Apache Hadoop, VII Seminario de Invierno 50/125
  60. 60. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Lectura de datos en HDFS Cliente HDFS Distributed FileSystem FSData InputStream 1: open 3: read 6: close Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: obtiene la localización de los bloques 4: read 5: read Apache Hadoop, VII Seminario de Invierno 50/125
  61. 61. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem 1: create Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  62. 62. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  63. 63. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  64. 64. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  65. 65. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 5: ack packet 5 5 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  66. 66. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write 6: close Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 5: ack packet 5 5 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  67. 67. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Escritura de datos en HDFS Cliente HDFS Distributed FileSystem FSData OutputStream 1: create 3: write 6: close Nodo cliente JVM cliente Namenode Namenode Datanode Datanode Datanode Datanode Datanode Datanode 2: create 4: write packet 5: ack packet 7: complete 5 5 4 4 Pipeline de Datanodes Apache Hadoop, VII Seminario de Invierno 51/125
  68. 68. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Localización de las replicas Política por defecto: 1ª réplica: en el nodo del cliente o en un nodo al azar 2ª réplica: en un rack diferente de la primera (elegido al azar) 3ª réplica: en el mismo rack que la 2ª, pero en otro nodo Otras réplicas: al azar (se intenta evitar colocar demasiadas réplicas en el mismo rack) DataCenter rack 1 rack 2 nodo Apache Hadoop, VII Seminario de Invierno 52/125
  69. 69. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo de coherencia Para aumentar el rendimiento, HDFS no es POSIX compliant en la escritura de ficheros Después de crear un fichero, este es visible es el espacio de nombres del filesystem, pero, no se garantiza que sus datos sean visibles Forzar la visibilidad Cerrar el stream de salida con close() Utilizar el método sync() en Hadoop v1, o hflush() en v2, de la clase FSDataOutputStream Apache Hadoop, VII Seminario de Invierno 53/125
  70. 70. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Propiedades configurables Múltiples propiedades configurables (fichero hdfs-site.xml) dfs.namenode.name.dir: lista (separada por comas) de directorios donde el namenode guarda sus metadatos (una copia en cada directorio), por defecto file://$hadoop.tmp.dir/dfs/name dfs.datanode.data.dir: lista (separada por comas) de directorios donde los datanodes guarda los bloques de datos (cada bloque en sólo uno de los directorios), por defecto file://$hadoop.tmp.dir/dfs/data dfs.namenode.checkpoint.dir: lista (separada por comas) de directorios donde el CheckPoint node guarda los checkpoints (una copia en cada directorio), por defecto file://$hadoop.tmp.dir/dfs/namesecondary dfs.blocksize: tamaño de bloque para nuevos ficheros (por defecto, 128MB) dfs.replication: nº de réplicas por bloque, por defecto 3 Apache Hadoop, VII Seminario de Invierno 54/125
  71. 71. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Problemas con el Namenode El Namenode es un single point of failure (SPOF) Si falla es imposible acceder a los datos Posibilidad de recuperación a partir de los checkpoints Conveniente guardar varias réplicas de los datos del namenode (RAID, indicar en dfs.namenode.name.dir directorios en diferentes máquinas, etc) Mejoras en la versión 2.0 HDFS High-Availability HDFS Federation Apache Hadoop, VII Seminario de Invierno 55/125
  72. 72. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop HDFS High-Availability Un par de Namenodes en configuración activo-standby si falla el Namenode activo, el otro ocupa su lugar Consideraciones Los Namenodes deben usar un almacenamiento compartido de alta disponibilidad Los Datanodes deben enviar informes de bloques a los dos Namenodes (el block mapping va en memoria, no en disco) Los Clientes deben manejar el fallo del Namenode de forma transparente Más información: hadoop.apache.org/docs/current/hadoop-project- dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html, hadoop.apache.org/docs/current/hadoop-project-dist/hadoop- hdfs/HDFSHighAvailabilityWithNFS.html Apache Hadoop, VII Seminario de Invierno 56/125
  73. 73. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop HDFS Federation El Namenode mantiene, en memoria, referencias a cada fichero y bloque en el filesystem problemas de escalabilidad HDF Federation, introducida en la versión 2.0 Permite usar varios Namenodes Cada uno gestiona una porción del espacio de nombres del filesystem Los Namenodes no se coordinan entre sí Cada Datanodes se registra con todos los Namenodes Más información: hadoop.apache.org/docs/current/hadoop-project- dist/hadoop-hdfs/Federation.html Apache Hadoop, VII Seminario de Invierno 57/125
  74. 74. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  75. 75. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Terminología Hadoop v1 (MapReduce) Jobtracker Coordina todos los trabajos Envía tareas a los tasktrackers Mantiene información sobre el progreso de cada tarea Tasktrackers Realizan las tareas Envían informes de progreso al Jobtracker Splits Trozos en los que se divide la entrada a una tarea MapReduce Normalmente del tamaño de 1 bloque (64 MB) Apache Hadoop, VII Seminario de Invierno 58/125
  76. 76. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Elementos de control Hadoop v1 Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014Apache Hadoop, VII Seminario de Invierno 59/125
  77. 77. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop YARN: the Data Operating System Un único Jobtracker es un cuello de botella en grandes clusters (más de 4000 nodos) YARN (Yet Another Resource Negociator): nueva arquitectura Característica principal: separa las dos funcionalidades del Jobtracker (gestión de recursos y job-scheduling/monitorización) en demonios separados: resource manager, node managers y application masters MapReduce es uno de los tipos de aplicación que pueden correr sobre YARN Más información: hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site wiki.apache.org/hadoop/PoweredByYarn Apache Hadoop, VII Seminario de Invierno 60/125
  78. 78. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop YARN Fuente: www.slideshare.net/Hadoop_Summit/apache-hadoop-yarn-present-and-future Apache Hadoop, VII Seminario de Invierno 61/125
  79. 79. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Elementos de control YARN Fuente: A. Murthy, V. Vavilapalli, “Apache Hadoop YARN”, Addison-Wesley, marzo 2014 Apache Hadoop, VII Seminario de Invierno 62/125
  80. 80. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Demonios YARN (I) Resource manager arbitra los recursos entre las aplicaciones en el sistema demonio global, obtiene datos del estado del cluster de los node managers dos componentes: Scheduler: planifica aplicaciones en base a sus requerimientos de recusos (se basa en el concepto de Container de recursos) Applications Manager: acepta trabajos, negocia containers y gestiona fallos de los Application Masters Node managers uno por nodo monitorizan los recursos del cluster (containers) Apache Hadoop, VII Seminario de Invierno 63/125
  81. 81. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Demonios YARN (II) Application masters uno por aplicación gestiona el ciclo de vida de la aplicación solicita recursos (containers) al Resource manager y ejecuta la aplicación en esos containers trabaja con los Node managers para ejecutar y monitorizar las tareas permiten que diferentes tipos de aplicaciones (no solo MapReduce) se ejecuten en el cluster Apache Hadoop, VII Seminario de Invierno 64/125
  82. 82. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  83. 83. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo de programación MapReduce Inspirado en la programación funcional Operación Map: square n = n * n map op [] = [] map op (x: xs) = op x : map op xs map (square) [1..5] => [1,4,9,16,25] Operación Reduce: reduce op (x : [ ] ) = x reduce op (x: xs) = (op x (reduce op xs) ) reduce (+) (map (square) [1..5]) => 55 Apache Hadoop, VII Seminario de Invierno 65/125
  84. 84. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Modelo de programación Entrada y salida: listas de pares clave/valor El programador especifica las funciones map y reduce Función Map: genera claves/valores intermedios map(K1, V1) → list(K2, V2) Para cada K1 y V1 se obtiene una lista intermedia (K2, V2) es un par clave/valor intermedio Funcion Reduce: combina los valores intermedios para cada clave particular reduce(K2, list(V2)) → (K3, list(V3)) Para cada clave de salida K3 se genera una lista de valores - list(V3) suele tener un único valor - A menudo, K3 = K2 Apache Hadoop, VII Seminario de Invierno 66/125
  85. 85. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Automatización del proceso map map map Entradas: (Ki 1,Vi 1) Entradas: (Kj 1,Vj 1) Entradas: (Kk 1,Vk 1) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) (Ki 2,Vi 2) Sistema de ficheros distribuido Barajado y ordenación por valores de claves reduce reduce (Ka 2,list(Va 2)) (Kb 2,list(Vb 2)) (Kc 2,list(Vc 2)) (Kd 2,list(Vd 2)) (Ka 3,Va 3) (Kb 3,Vb 3) (Kc 3,Vc 3) (Kd 3,Vd 3) Apache Hadoop, VII Seminario de Invierno 67/125
  86. 86. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount Cuenta las ocurrencias de cada palabra en ficheros de texto Entrada: K1 = ∅, V1 = línea Salida: pares (palabra, nº de ocurrencias) Pseudocódigo del Map map(key, value): // key: nada, value: línea de texto for each word w in value emit(w, 1) Pseudocódigo del Reduce reduce(key, values): // key: palabra; values: un iterador sobre los 1s emit(key, sum(values)) Apache Hadoop, VII Seminario de Invierno 68/125
  87. 87. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce en,1 la,1 mancha,1 vale,1 la,1 pena,1 un,1 lugar,1 de,1 más,1 Entrada Map Shuffle & Sort Reduce Salida Apache Hadoop, VII Seminario de Invierno 69/125
  88. 88. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida en,1 rostro,1 la,1 mancha,1 en,1 el,1 que,1 Apache Hadoop, VII Seminario de Invierno 69/125
  89. 89. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida corazón,1 amor,1 deseo,1 el,1 el,1 es,1 de,1 belleza,1 Apache Hadoop, VII Seminario de Invierno 69/125
  90. 90. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Ejemplo: WordCount map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza amor, 1 corazón, 1 deseo, 1 en, 3 la, 3 mancha, 2 pena, 1 rostro, 1 vale, 1 belleza, 1 de, 2 el, 3 es, 1 lugar, 1 más, 1 que, 1 un, 1 map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida amor,1 corazón,1 deseo,1 en,1,1,1 la,1,1,1 mancha,1,1 pena,1 rostro,1 vale,1 belleza,1 de,1,1 el,1,1,1 es,1 lugar,1 más,1 que,1 un,1 Apache Hadoop, VII Seminario de Invierno 69/125
  91. 91. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características de la ejecución Sistema de ficheros distribuido para gestionar los datos GFS (Google File System), HDFS (Hadoop Distributed FS) Ficheros divididos en bloques (chunks o splits) grandes (64-128 MB en HDFS), con replicación Arquitectura master-worker Los map workers se inician en el mismo nodo o rack que sus datos de entrada Minimiza el uso de la red Los map workers graban su salida en el disco local antes de servirla a los reduce workers Permite recuperar una tarea reduce en caso de fallo Los reduce workers graban su salida en el sistema distribuido Replicación en los resultados Un fichero de salida por cada reduce Apache Hadoop, VII Seminario de Invierno 70/125
  92. 92. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Características de la ejecución Programa de usuario master worker worker worker worker worker split 0 split 1 split 2 fichero de salida 0 fichero de salida 1 fork fork fork asigna maps asigna reduces DFS Local DFS Read Local write Write Remote read, sort & shuffle Apache Hadoop, VII Seminario de Invierno 71/125
  93. 93. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Diferencia entre bloques y splits Apache Hadoop, VII Seminario de Invierno 72/125
  94. 94. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tolerancia a fallos Mediante heartbeats, el Master detecta fallos en los workers Si falla una tarea map o reduce La tarea se reintenta en otro nodo - Correcto para los maps porque no tienen dependencias - Correcto para los reduces porque las salidas de los maps están en disco - Necesario que las tareas no tengas efectos colaterales Si la misma tarea falla repetidamente, el trabajo MapReduce se aborta y se notifica al usuario (ajustable) Si falla un nodo completo Relanzar sus tareas en curso en otros nodos Reejecutar cualquier map que se hubiera ejecutado en el nodo - Necesario pues las salidas de los maps se perdieron Apache Hadoop, VII Seminario de Invierno 73/125
  95. 95. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Tolerancia a fallos Si una tarea no progresa (straggler o rezagada) Se lanza una segunda copia de la tarea en otro nodo (ejecución especulativa) Se toma la salida de la tarea que acabe antes, y se mata a la otra Situación bastante común en clusters grandes - Debidos a errores hardware, bugs software, fallos de configuración, etc. - Una tarea rezagada puede enlentecer de forma importante un trabajo Si falla el Master Se intenta relanzar de nuevo - Las tareas en proceso o acabadas durante el reinicio, se relanzan Si continua fallando, el trabajo se aborta y se le notifica al usuario Apache Hadoop, VII Seminario de Invierno 74/125
  96. 96. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Número de Maps y Reduces M tareas map y R tareas reduce Hacer M+R mucho mayor que el número de PEs disponibles Mejora la utilización del cluster Habitualmente, M igual al número de splits de entrada Mejora el balance de carga dinámico y acelera la recuperación cuando falla un worker R menor que M Salida repartida en R ficheros Valor ajustable por el usuario Función del tipo de problema y los recursos disponibles (memoria, nº cores,. . . ) Ver wiki.apache.org/hadoop/HowManyMapsAndReduces Apache Hadoop, VII Seminario de Invierno 75/125
  97. 97. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Combinador Un combinador (Combiner) es una función de agregación local para las claves repetidas de cada map Puede ahorrar ancho de banda al reducir el tamaño de los datos intermedios del map combiner(K m 2 , list(V m 2 )) → (K m 3 , list(V m 3 )) Habitualmente, misma función que el reducer Se ejecuta en el mismo nodo que el map Solo puede utilizarse si la función reduce es commutativa y asociativa Apache Hadoop, VII Seminario de Invierno 76/125
  98. 98. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Combinador map En un lugar de la Mancha Más vale la pena en el rostro que la mancha en el corazón El amor es deseo de belleza map map reduce reduce Entrada Map Shuffle & Sort Reduce Salida en,1 el,1 rostro,1 que,1 la,1 mancha,1 en,1 el,1 que,1 combiner combiner combiner en,2 rostro,1 la,1 mancha,1 Combiner Apache Hadoop, VII Seminario de Invierno 77/125
  99. 99. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Particionador El particionador (shuffler) por defecto es un hash de las claves: hash(K) mod R Garantiza: Claves iguales van al mismo reducer Carga de los reducers relativamente bien balanceada (en muchos casos) Hay situaciones en las que puede interesar cambiarlo: Ejemplo: hash(hostame(URL)) mod R Todas las URLs de cada host se juntan en el mismo fichero de salida Apache Hadoop, VII Seminario de Invierno 78/125
  100. 100. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Índice 1 Big Data 2 Apache Hadoop 3 HDFS 4 YARN 5 MapReduce 6 Programación MapReduce en Hadoop Programación Java Alternativas a Java Apache Hadoop, VII Seminario de Invierno
  101. 101. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Java MapReduce en Hadoop Un programa MapReduce en Java debe definir 3 clases: 1. Una clase mapper 2. Una clase reducer 3. Una clase principal, con el método main Pueden crearse como tres clases públicas separadas como una sola, con el método main, y clases internas static para mapper y reducer Apache Hadoop, VII Seminario de Invierno 79/125
  102. 102. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Nueva y vieja API Los programas pueden usar la nueva API (recomendado) o la antigua Ambas APIs son incompatibles Utilizaremos siempre la API nueva Disponible desde Hadoop 0.20.0 Definida en el paquete org.apache.hadoop.mapreduce Algunas librerías presentes en la API vieja no han sido portadas API vieja (desaconsejada) Definida en el paquete org.apache.hadoop.mapred Apache Hadoop, VII Seminario de Invierno 80/125
  103. 103. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Mapper public class WordCountMapper extends Mapper<LongWritable , Text , Text , IntWritable> { @Override public void map(LongWritable key, Text value , Context ctxt ) throws IOException , InterruptedException { Matcher matcher = pat .matcher(value . toString () ) ; while (matcher. find () ) { word. set (matcher. group () . toLowerCase () ) ; ctxt . write (word, one) ; } } private Text word = new Text () ; private final static IntWritable one = new IntWritable (1) ; private Pattern pat = Pattern . compile( " b[a−zA−Z u00C0−uFFFF]+b" ) ; } Apache Hadoop, VII Seminario de Invierno 81/125
  104. 104. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Mapper Extiende la clase Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT> Debe sobrescribir el método map(KEYIN key, VALUEIN value, Mapper.Context context) Usa una instancia de Context en la que escribe los pares clave/valor de salida Debe utilizar tipos de datos que implementen la interfaz Writable (como LongWritable o Text) optimizados para serialización Otros métodos que se pueden sobrescribir: setup(Context context) Llamado una vez al comienzo de la tarea cleanup(Context context) Llamado una vez al final de la tarea Apache Hadoop, VII Seminario de Invierno 82/125
  105. 105. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Reducer public class WordCountReducer extends Reducer<Text , IntWritable , Text , IntWritable> { @Override public void reduce(Text key, Iterable<IntWritable> values , Context ctxt ) throws IOException , InterruptedException { int sum = 0; for ( IntWritable value : values ) { sum += value . get () ; } ctxt . write (key, new IntWritable (sum) ) ; } } Apache Hadoop, VII Seminario de Invierno 83/125
  106. 106. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Reducer Extiende la clase Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> Debe sobrescribir el método reduce(KEYIN key, Iterable<VALUEIN> values, Reducer.Context context) Usa una instancia de Context en la que escribe los pares clave/valor de salida Debe utilizar tipos de datos que implementen la interfaz Writable (como LongWritable o Text) optimizados para serialización Otros métodos que se pueden sobrescribir: setup(Context context) Llamado una vez al comienzo de la tarea cleanup(Context context) Llamado una vez al final de la tarea Apache Hadoop, VII Seminario de Invierno 84/125
  107. 107. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver (I) public class WordCountDriver extends Configured implements Tool { public int run( String [] arg0) throws Exception { i f (arg0 . length != 2) { System. err . printf ( "Usar : %s [ops] <entrada> <salida >n" , getClass () .getSimpleName() ) ; ToolRunner .printGenericCommandUsage(System. err ) ; return −1; } Configuration conf = getConf () ; Job job = Job . getInstance ( conf ) ; job .setJobName( "Word Count" ) ; job . setJarByClass ( getClass () ) ; FileInputFormat . addInputPath( job , new Path(arg0[0]) ) ; FileOutputFormat . setOutputPath( job , new Path(arg0[1]) ) ; Apache Hadoop, VII Seminario de Invierno 85/125
  108. 108. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver (II) job . setOutputKeyClass(Text . class ) ; job . setOutputValueClass ( IntWritable . class ) ; job .setNumReduceTasks(4) ; job . setMapperClass(WordCountMapper. class ) ; job . setCombinerClass(WordCountReducer. class ) ; job . setReducerClass(WordCountReducer. class ) ; return ( job . waitForCompletion( true ) ? 0 : −1); } public static void main( String [] args) throws Exception { int exitCode = ToolRunner . run(new WordCountDriver () , args) ; System. exit (exitCode) ; } } Apache Hadoop, VII Seminario de Invierno 86/125
  109. 109. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver Clase Configured: permite acceder a la configuración del sistema Método Configuration getConf(): devuelve la configuración actual Clase Configuration: proporciona acceso a la configuración Clase Job: permite configurar, enviar y controlar la ejecución de un trabajo Clase FileInputFormat<K,V>: describe los ficheros de entrada en un trabajo MapReduce Clase FileOutputFormat<K,V>: describe los ficheros de entrada en un trabajo MapReduce Apache Hadoop, VII Seminario de Invierno 87/125
  110. 110. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop WordCount Driver Interfaz Tool: interfaz estándar para aplicaciones MapReduce, soporta el manejo de opciones en línea de comandos Clase ToolRunner: ejecuta clases que implementan la interfaz Tool Clase Path: identifica a un fichero o directorio en el FileSystem Apache Hadoop, VII Seminario de Invierno 88/125
  111. 111. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Compilación y ejecución Preferiblemente, crear un jar con todas las clases y ejecutarlo con: yarn jar fichero.jar [opciones] Para gestionar las aplicaciones, utilizad: en general, la opción application del comando yarn (yarn application -help para ver las opciones) para trabajos MapReduce, la opción job del comando mapred (mapred job -help para ver las opciones) Más información en hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn- site/YarnCommands.html hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop- mapreduce-client-core/MapredCommands.html Apache Hadoop, VII Seminario de Invierno 89/125
  112. 112. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 90/125
  113. 113. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (I) Práctica 5, programa wordcount (proyecto 02-wordcount) En la máquina virtual a) Inicia el Eclipse y revisa el código del WordCount b) En un terminal, usa maven para crear el fichero jar c) Prueba a lanzar el jar desde el terminal usando datos/libros-mini como directorio de entrada En el cluster: a) Copia el jar en el cluster y ejecuta el WordCount usando datos/libros como directorio de entrada b) Mientras se ejecuta, utiliza el interfaz web de YARN (http://urraca.arcos.inf.uc3m.es:8088) para analizar su ejecución Apache Hadoop, VII Seminario de Invierno 91/125
  114. 114. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Writables Formato de serialización de objetos de Hadoop Transforma objetos en un flujo de bytes para transmisión o almacenamiento Gran número de clases que implementan el interfaz Writable: Objetos primitivos: BooleanWritable, ByteWritable, IntWritable, LongWritable, FloatWritable, DoubleWritable, Text (cadenas UTF-8) Objetos primitivos de longitud variable: VIntWritable, VLongWritable Colecciones: ArrayWritable, ArrayPrimitiveWritable, TwoDArrayWritable, MapWritable, SortedMapWritable Otros: NullWritable, BytesWritable, ObjectWritable, GenericWritable, Apache Hadoop, VII Seminario de Invierno 92/125
  115. 115. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Writables a medida Es posible implementar writables a medida Implementar la interfaz Writable Implementar los métodos write(DataOutput out) y readFields(DataInput in) Un objeto que se quiera usar como clave debe implementar WritableComparable Apache Hadoop, VII Seminario de Invierno 93/125
  116. 116. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Clase abstracta FileInputFormat<K,V> Define métodos para añadir uno o varios paths de entrada al trabajo addInputPath(Job job, Path path), addInputPaths(Job job, String commaSeparatedPaths) Clase base para diferentes formatos de entrada concretos El formato a usar se especifica mediante el método setInputFormatClass del Job, por ejemplo: job.setInputFormatClass(TextInputFormat.class) Apache Hadoop, VII Seminario de Invierno 94/125
  117. 117. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Formatos de entrada TextInputFormat: formato por defecto para ficheros de texto KeyValueTextInputFormat: ficheros de texto con estructura clave/valor NLineInputFormat: permite que los mappers reciban un número fijo de líneas de entrada SequenceFileInputFormat: secuencias de datos binarios clave/valor CombineFileInputFormat: Permite empaquetar varios ficheros pequeños en un split de entrada de un tamaño determinado FixedLengthInputFormat: Usado para leer ficheros con registros de longitud fija Apache Hadoop, VII Seminario de Invierno 95/125
  118. 118. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Formatos de entrada TextInputFormat: Formato por defecto Cada mapper recibe un trozo (split) del fichero y lo procesa línea a línea Como clave, toma el offset en bytes en el fichero desde el comienzo de la línea (LongWritable) Como valor, toma toda la línea KeyValueTextInputFormat: Igual que el anterior, pero separa cada línea en clave/valor Usa tabulado como separador por defecto Para cambiar, modificar en el objeto Configuration la propiedad mapreduce.input.keyvaluelinerecordreader.key. value.separator Nota: en la API vieja es key.value.separator.in.input.line Apache Hadoop, VII Seminario de Invierno 96/125
  119. 119. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Salida de ficheros Similar a la entrada: clase abstracta FileOutputFormat<K,V> Clase base para diversos formatos de salida concretos TextOutputFormat: formato por defecto para ficheros de texto - Escribe líneas de texto en formato clave/valor separados por un tabulado - Carácter de separación modificable: mapreduce.output.textoutputformat.separator API vieja mapred.textoutputformat.separator SequenceFileOutputFormat: secuencias de datos binarios clave/valor MapFileOutputFormat: Un formato de salida que escribe MapFiles El formato a usar se especifica mediante el método setOutputFormatClass del Job Apache Hadoop, VII Seminario de Invierno 97/125
  120. 120. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 98/125
  121. 121. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (II) Datos de entrada Fichero de citas de patentes (cite75_99.txt) Formato: patente,patente_a_la_que_cita Fichero de descripción de patentes (apat63_99.txt) Práctica 6, programa citingpatents (proyecto 03-citingpatents) Objetivo: Crear un programa MapReduce que, para cada patente de cite75_99.txt, obtenga la lista de las que la citan Formato salida: patente patente1,patente2... Mapper: 3858245,3755824 → 3755824 3858245 Reducer: 3755824 {3858245 3858247. . . } → 3755824 3858245,3858247. . . Utilizar como formato de entrada KeyValueTextInputFormat Apache Hadoop, VII Seminario de Invierno 99/125
  122. 122. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (III) Práctica 7, programa creasequencefile (proyecto 04-creasequencefile) Hacer un programa MapReduce map-only que lea el fichero apat63_99.txt, separe los campos y lo guarde como un fichero Sequence con clave: el país (Text) valor: una cadena con la patente y el año separados por coma (Text) Se puede ver el contenido del fichero con hdfs dfs -text dir_salida Apache Hadoop, VII Seminario de Invierno 100/125
  123. 123. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Compresión Como vimos en el WordCount, Hadoop lee directamente ficheros comprimidos: Los ficheros se descomprimen automáticamente, usando la terminación del fichero para determinar que codec usar Formato Java/Nativo Splittable Codec zlib/DEFLATE Sí/Sí No DefaultCodec gzip Sí/Sí No GzipCodec bzip2 Sí/Sí Sí BZip2Codec LZO No/Sí No (Sí con preproceso) LzopCodec LZ4 No/Sí No Lz4Codec Snappy No/Sí No SnappyCodec Apache Hadoop, VII Seminario de Invierno 101/125
  124. 124. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Compresión Fuente: Kamat, G., Singh, S., “Compression Options in Hadoop - A Tale of Tradeoffs”, Hadoop Summit (San Jose), June 27, 2013 Apache Hadoop, VII Seminario de Invierno 102/125
  125. 125. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Compresión Recomendaciones: Usar contenedores binarios como Sequence File o Avro datafile (soportan compresión y splitting) Usar formatos splittables Dividir los ficheros en trozos y comprimirlos por separado (cada trozo comprimido debería ocupar un bloque HDFS) No usar compresión Apache Hadoop, VII Seminario de Invierno 103/125
  126. 126. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 104/125
  127. 127. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (IV) Práctica 8 (proyecto 03-citingpatents) Modificar el programa CitingPatents para que guarde la salida comprimida en Gzip Utilizad los métodos estáticos setCompressOutput y setOutputCompressorClass de la clase FileOutputFormat Apache Hadoop, VII Seminario de Invierno 105/125
  128. 128. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Encadenamiento de trabajos MapReduce Es posible encadenar trabajos MapReduce Basta con definir varios jobs y lanzarlos unos detrás de otros La salida a disco de un job es leída por el siguiente Alternativa Usar las clases ChainMapper y ChainReducer Permiten encadenar varios mappers seguidos de un reducer y cero o más mappers adicionales ([MAP+ / REDUCE MAP*]) Reduce los accesos a disco Para workflows complejos, se puede usar Apache Oozie o Cascading Apache Hadoop, VII Seminario de Invierno 106/125
  129. 129. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 107/125
  130. 130. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (V) Práctica 9 (proyecto 05-citationnumberbypatent_chained): para cada patente del fichero cite75_99.txt, obtener el número de las que la citan Encadenar CitingPatents con un mapper que cuenta el número de patentes que citan Mapper2: 3755824 3858245,3858247. . . → 3755824 9 Haz ese encadenamiento usando ChainMapper y ChainReducer Ejecución: $ export LIBJAR = path_a_citingpatents*.jar $ export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$LIBJAR $ yarn jar path_to_chained.jar -libjars $LIBJAR > path_to_cite75_99.txt path_to_out Apache Hadoop, VII Seminario de Invierno 108/125
  131. 131. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Secondary Sort La ordenación se hace sólo por la clave: El orden en que aparecen los valores no está fijado Es posible imponer un orden en el que aparecen los valores: Hacer que la clave esté compuesta por la clave natural y el valor natural (objeto WritableComparable) El comparador de ordenación debe ordenar usando esa clave compuesta El particionador debe considerar sólo la clave natural El comparador de agrupamiento usa una u otra según el caso Apache Hadoop, VII Seminario de Invierno 109/125
  132. 132. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Secondary Sort Ejemplo de clave compuesta Clave compuesta Clave Valor { { {Particionar Ordenar/Agrupar Se ordena por la clave compuesta [clave, valor] (job.setSortComparatorClass) Se particiona por clave (job.setPartitionerClass, garantiza que las mismas claves van al mismo reducer) Se agrupa por la clave o la clave compuesta [clave, valor] dependiendo del problema (job.setGroupingComparatorClass) Apache Hadoop, VII Seminario de Invierno 110/125
  133. 133. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 111/125
  134. 134. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VI) Objetivo Partiendo del fichero cite75_99.seq, obtener un fichero de texto con la siguiente información país año -> nº de patentes ese año La salida debe estar ordenada por países, y para cada país, por año (sort secundario) Debemos usar una clave compuesta [país, año] Clave compuesta País Año { { { Particionar Ordenar/Agrupar Apache Hadoop, VII Seminario de Invierno 112/125
  135. 135. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VI) Práctica 10, programa sort.SortSecundario (proyecto 06-sortsecundario) Se ordena por la clave compuesta [país, año] (job.setSortComparatorClass) Se particiona por país (job.setPartitionerClass, garantiza que los mismos países van al mismo reducer) Se agrupa por la clave compuesta [país, año] (job.setGroupingComparatorClass) Apache Hadoop, VII Seminario de Invierno 113/125
  136. 136. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Joins de datos de diferentes fuentes Hacer uniones de datos de diferentes fuentes es complejo en Hadoop Preferible usar lenguajes de alto nivel como Pig o Hive En Hadoop hay varias soluciones: Si un conjunto de datos es grande y el otro pequeño, se puede replicar el pequeño en todos los nodos usando Distributed Cache Map-Side joins: el join se realiza antes de llegar a la función map Los conjuntos de datos deben dividirse en el mismo número de particiones y estar ordenados por la clave de unión Reduce-side joins: el join se realiza en el reducer El mapper etiqueta cada dato con su fuente y usa la clave de unión como clave de salida Apache Hadoop, VII Seminario de Invierno 114/125
  137. 137. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 115/125
  138. 138. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VII) Práctica 11, proyecto 07-simplereducersidejoin Objetivo: unir datos de dos entradas (a) Salida de CitingPatents (primera práctica) (b) Fichero con información de las patentes (apat63_99.txt) Salida: patente, país, n_citas Un mapper diferente para cada entrada (a) Mapper-a (CNBPTaggedMapper) 3755824 3858245,3858247. . . → 3755824 ''cite'', 9 (b) Mapper-b (PBCMapper) 3755824,1973,4995,1971,''US'',''NY''. . . → 3755824 ''country'', US Reducer: hace un join de los dos mappers por patente 3755824 ''cite'', 9 3755824 ''country'', US → 3755824 US, 9 Apache Hadoop, VII Seminario de Invierno 116/125
  139. 139. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Localización de dependencias Mecanismo para copiar recursos (LocalResources) a los nodos del cluster Hadoop (DistributedCache en Hadoop v1) Los recursos (ficheros, archivos, librerías) se copian a todos los nodos una vez por trabajo Las aplicaciones pueden acceder directamente a estos recursos Tipos de LocalResources: FILE: Ficheros normales ARCHIVE: Ficheros comprimidos (jar, tar, tar.gz, zip) que descomprime el NodeManager PATTERN: Híbrido de ARCHIVE y FILE (se mantiene el fichero y se descomprime parte) Visibilidad de los LocalResources PUBLIC: accesibles por todos los usuarios PRIVATE: compartidos por aplicaciones del mismo usuario en el nodo APPLICATION: compartidos entre containers de la misma aplicación Apache Hadoop, VII Seminario de Invierno 117/125
  140. 140. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Uso en línea de comandos Si el código usa GenericOptionParser (o ToolRunner), los ficheros a copiar se indican como parámetro: -files + lista separada por comas de URIs de los ficheros -archives + ficheros comprimidos (archivos) -libjars + JARS para añadir al CLASSPATH Ejemplo: yarn jar mr.jar -files ~/fichero in out Apache Hadoop, VII Seminario de Invierno 118/125
  141. 141. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Uso desde la aplicación Métodos definidos en Job addCacheFile(URI uri): añade un fichero a la cache addCacheArchive(URI uri): añade un archivo a la cache addFileToClassPath(Path file): añade un fichero al CLASSPATH addArchiveToClassPath(Path file): añade un archivo al CLASSPATH URI[] getCacheFiles(): obtiene los ficheros en la cache URI[] getCacheArchives(): obtiene los archivos en la cache Apache Hadoop, VII Seminario de Invierno 119/125
  142. 142. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Contadores Hadoop incorpora contadores para obtener datos del trabajo: Contadores internos: informan sobre el comportamiento de la ejecución Contadores definidos por el usuario (interfaz Counter) Permiten obtener información adicional sobre las tareas Definidos mediante Java enums, que permiten agrupar contadores relacionados Se accede a ellos mediante el método getCounter() del MapContext o el ReduceContext Se modifican mediante los métodos del interfaz Counter Apache Hadoop, VII Seminario de Invierno 120/125
  143. 143. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 121/125
  144. 144. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (VIII) Práctica 12: Analizar el programa WordCountPRO ()proyecto 08-wordcountpro) Ejemplo de ejecución: yarn -jar wordcountpro.jar -Dwordcount.case.sensitive=true indir outdir -skip skipfile.txt Apache Hadoop, VII Seminario de Invierno 122/125
  145. 145. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Alternativas a Java Hadoop Streaming API que permite crear códigos map-reduce en otros lenguajes Utiliza streams Unix como interfaz entre Hadoop y el código Permite usar cualquier lenguaje que pueda leer de la entrada estándar y escribir en la salida estándar (Python, Ruby, etc.) Más información hadoop.apache.org/docs/current/hadoop-streaming Hadoop Pipes Interfaz C++ a Hadoop MapReduce Usa sockets como canal de comunicación entre el tasktracker y el proceso C++ que ejecuta el map o el reduce Apache Hadoop, VII Seminario de Invierno 123/125
  146. 146. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Hands-on Apache Hadoop, VII Seminario de Invierno 124/125
  147. 147. Big Data Apache Hadoop HDFS YARN MapReduce Programación MapReduce en Hadoop Prácticas MapReduce (IX) Práctica 13: WordCount en Python (directorio 09-wordcountpython) $ yarn jar $HADOOP_PREFIX/share/hadoop/tools/lib/hadoop-streaming-*.j -files WordCountMapper.py,WordCountReducer.py -input indir -output outdir -mapper WordCountMapper.py -reducer WordCountReducer.py -numReduceTasks 2 Nota: La opción -files sólo se necesita si se ejecuta en un cluster, para copiar los scripts en los nodos del cluster Apache Hadoop, VII Seminario de Invierno 125/125

×