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

JUC - Lectura y escritura de datos con Hadoop

CETA-Ciemat
February 11, 2015

JUC - Lectura y escritura de datos con Hadoop

I Jornadas Técnicas UEx - CIEMAT. Procesando grandes volúmenes de datos con Hadoop

CETA-Ciemat

February 11, 2015
Tweet

More Decks by CETA-Ciemat

Other Decks in Education

Transcript

  1. Jornadas Técnicas Uex-CIEMAT // 10-12 Febrero 2015 Procesando grandes volúmenes

    de datos con HADOOP Jose Antonio Adame Fernández [email protected] Lectura y escritura de datos con Hadoop (HDFS)
  2. INDICE • ¿QUE ES HDFS? • CONCEPTOS BASICOS • REPLICACION

    Y GESTIÓN DE ERRORES • ARQUITECTURA DE HDFS • PRÁCTICA: COMANDOS BÁSICOS
  3. ¿Qué es HDFS? • HDFS es el sistema de ficheros

    distribuido de Hadoop.(Hadoop distributed filesystem) • Diseñado para la administración de un sistema de ficheros en una arquitectura multinodo. • Optimizado para el almacenamiento de ficheros de gran tamaño (cientos de megabytes, gigabytes o terabytes). • HDFS está construido sobre la idea “write- once, read many times”
  4. HARDWARE • HDFS no requiere ser montado sobre un hardware

    caro. Esta diseñado para trabajar con clústeres de bajo coste ya que tiene una estrategia diseñada para soportar fallos en cualquiera de los nodos. “Mas posibilidad de fallos cuanto mas grande es el clúster.”
  5. Aplicaciones no recomendadas para HDFS • Aplicaciones que necesiten baja

    latencia de acceso a datos. • Aplicaciones que necesiten muchos ficheros de pequeño tamaño. • Aplicaciones que tengan múltiples escritores y modificaciones arbitrarias en los ficheros.
  6. Bloques • Los ficheros en HDFS se dividen en bloques

    que son almacenados en el sistema de ficheros como unidades independientes. • Es la unidad mínima que se puede leer o escribir. • En HDFS el tamaño de los bloques es muy grande, 64MB por defecto (Configurable).
  7. Bloques • ¿Por qué son tan grandes los bloques en

    HDFS? ▫ La razón es minimizar los costes de las búsquedas. De esta manera por cada búsqueda nos traemos mas información de golpe.
  8. Bloques • El uso de bloques simplifica el almacenamiento y

    mejora la tolerancia a los fallos. • Cada bloque de un fichero es replicado en base a un factor de replicación entre las diferentes máquinas que componen el clúster. De esta manera si alguna de las máquinas falla tenemos una copia de ese bloque siempre disponible. $ hdfs fsck / -files -blocks
  9. Namenodes y Datanodes • En la arquitectura de HDFS existen

    dos tipos de nodos:  Namenodes (master)  Datanodes (workers)
  10. Namenodes • Gestionan el sistema de ficheros de HDFS. •

    Mantienen la estructura de árbol y los metadatos de todos los ficheros y directorios. • Esta información se almacena en disco en dos ficheros: ▫ - Namespace Image ▫ - EditLog
  11. Datanodes • Son los “trabajadores” del sistema de ficheros. •

    Almacenan y recuperan bloques cuando se les solicita. • Puntualmente informan al Namenode con la lista de bloques que están almacenando.
  12. Almacenamiento en HDFS • Almacenar datos en HDFS no es

    exactamente igual que hacerlo en tu ordenador personal. • HDFS esta diseñado para almacenar ficheros de gran tamaño. Fichero mayores de 500 MB es lo normal. • Los datos se almacenan en HDFS según el patrón: “Write one, read often”. Lo normal es no modificar el contenido de los ficheros y si hay que añadir se hace al final del mismo.
  13. Replicación • Los ficheros almacenados en HDFS se dividen en

    bloques en base al factor de replicación. • Todos los bloques de un fichero tienen el mismo tamaño, excepto el último que puede tener el mismo tamaño que los demás o ser mas pequeño.
  14. Replicación • HDFS esta diseñado para almacenar datos en hardware

    barato y poco fiable, es por ello por lo que realiza la replicación de bloques. Si falla uno de los nodos coge una copia del bloque de otro nodo del clúster. • El factor de replicación es configurable, para arquitecturas singlenode es 1 para el resto es 3 por defecto.
  15. Replicación Estrategia de replicación: • El primer bloque se mete

    en uno de los nodos de un rack, y las otras dos copias se meten en nodos diferentes de otro rack del cluster. De esta manera nos aseguramos que siempre vamos a tener disponible una copia del bloque.
  16. Replicación • Sub-replicación: Cuando el número de copias del bloque

    es menor que el índice de replicación. Cuando HDFS detecta esta situación manda realizar una copia del bloque. • Sobre-replicación: Cuando el número de copias del nodo es mayor que el índice de replicación. Cuando HDFS detecta esta situación manda borrar una copia del bloque.
  17. Arquitectura • HDFS puede ser montado en docenas, cientos o

    incluso miles de ordenadores individuales donde los ficheros son almacenados en sus discos duros. • Cada uno de esos ordenadores individuales es un servidor con su propia memoria, disco duro, procesador y un sistema operativo instalado, normalmente Linux aunque Windows también es soportado.
  18. Arquitectura • Técnicamente HDFS se monta encima del sistema de

    ficheros de cada uno de los nodos que componen el cluster. • Un cluster Hadoop está compuesto de las siguientes clases de servidores: ▫ Slave nodes ▫ Master nodes
  19. Arquitectura: Slavenodes • También llamados Datanodes. • Sirven para almacenar

    los datos. • En cada uno de estos nodos corre un “daemon” llamados Datanode. • Los procesos Datanode sirven para llevar la cuenta de los bloques de datos que están almacenados en ese nodo. • Regularmente se comunican con los master nodes para notificarlos del estado de los datos que guardan.
  20. Arquitectura: Slavenodes • Los bloques de datos son almacenados como

    ficheros en el sistema de ficheros. El usuario de Hadoop no tiene constancia de la ubicación de los bloques del fichero que quiere consultar en el clúster. • HDFS esta preparado para los fallos y es por eso por lo que realiza copia de los bloques de los ficheros y los reparte entre los slavenodes.
  21. Arquitectura: Masternodes • También conocidos como Namenodes. • Cuando un

    usuario guarda un fichero en HDFS este se divide en bloques y tres copias de estos bloques se guardan a lo largo del cluster de Hadoop. • El namenode actúa de “libro de direcciones” en HDFS. Sabe que bloques componen un determinado fichero y en que datanodes están guardados sus bloques y sus replicas.
  22. Arquitectura: Masternodes • El masternode es el elemento mas importante

    en HDFS. Si este falla el acceso a los datos del cluster HDFS es imposible. • En los master nodes corren los procesos Name nodes que se encargan de guardar toda la información respecto a los bloques y que datanodes los contienen. Toda esta información se guarda en un fichero llamado fsimage. • Todos los cambios de datos se registran en un log. Este log se llama edits y se guarda en el name node.
  23. Arquitectura: ¿Cómo funciona un namenode? • El propósito de un

    namenode es informar a las aplicaciones de cuantos bloques necesitan y guardar la ubicación de los mismos dentro del cluster. Proceso de inicio de un namenode: ▫ 1 ) Carga el fsimage y lo guarda en memoria. ▫ 2) Carga el fichero edits y replica los cambios para actualizar los meta-datos de los bloques en memoria. ▫ 3) Los procesos de los Data nodes envían los informes de los bloques que contienen al namenode.
  24. Arquitectura: Masternodes • Durante la vida del cluster los data

    nodes envían de manera periódica al name node una señal indicándoles que están activos(Normalmente cada tres segundos, este valor es configurable) • Cada 6 horas (también configurable) envían al name node el estado de los bloques que contienen.
  25. Escritura de datos • 1 ) El cliente envía una

    petición al name node para crear un nuevo fichero. • 2) El name node determina cuantos bloques son necesarios. • 3) El cliente escribe las primeras copias de los bloques según le planifica el namenode. (Algoritmo de replicación) • 4) Cada bloque se escribe en HDFS y un proceso se encarga de escribir el resto de replicas a otros data nodes identificados por el namenode. • Una vez que el proceso datanode sabe que todas las replicas se han escrito, el cliente cierra el fichero y notifica al namenode.
  26. Lectura de datos • 1 ) El cliente manda un

    petición al namenode de un fichero. • 2) El name node determina que bloques pertenecen a ese fichero y elige en base a la proximidad de unos bloques con otros cual es el camino mas eficiente. • 3) El cliente accede a los bloques mediante la dirección dada por el namenode.
  27. JobTracker • Es el “demonio” encargado de ejecutar las tareas

    relacionadas con mapreduce. • Las ejecuta sobre unos determinados nodos del clúster.
  28. TaskTracker • Es un demonio encargado de ejecutar una determinada

    tarea en cada nodo encargada por el jobtracker. • Las tareas son aplicaciones Java MapReduce.
  29. CHECKPOINTING • Los cambios en los ficheros almacenados en HDFS

    se guardan el fichero edits. • Periódicamente se lee el fichero edits y los cambios registrados se pasan al fichero fsimage. • Del checkpointing se encarga uno de estos cuatro posibles daemons: ▫ Secondary NameNode ▫ Checkpoint Node ▫ Backup Node ▫ Standby Namenode
  30. Checkpointing • El NameNode crea un nuevo fichero para aceptar

    el diario de cambios del sistema de ficheros, lo llama edits.new • El fichero edits no acepta más cambios y se copia al servicio de checkpointing además del fichero fsimage. • El checkpointing service une estos dos ficheros creando el fichero fsimage.ckpt • El checkpointing service copia fsimage.ckpt al NameNode • El NameNode sobreescribe el fichero fsimage con el fichero fsimage.ckpt • El NameNode renombra edits.new a edits.
  31. Configuración HDFS • Core-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>

    <property> <name>fs.default.name</name> <value>hdfs://localhost:8020</value> <description>Nombre del filesystem por defecto.</description> </property> </configuration>
  32. Configuración HDFS • Hdfs-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration>

    <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/workspace/dfs/name</value> <description>Path del filesystem donde el namenode almacenará los metadatos.</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/workspace/dfs/data</value> <description>Path del filesystem donde el datanode almacenerá los bloques.</description> </property> <property> <name>dfs.replication</name> <value>1</value> <description>Factor de replicación. Lo ponemos a 1 porque sólo tenemos 1 máquina.</description> </property> </configuration>
  33. Comandos básicos $hdfs dfs <comandos> - Sencillez - Comandos básicos

    parecidos a Linux. - http://hadoop.apache.org/docs/r2.3.0/hadoo p-project-dist/hadoop- common/FileSystemShell.html
  34. Comandos básicos Copiar archivos de local a HDFS. $ hdfs

    dfs -copyFromLocal prueba1.txt /user/root/prueba
  35. Comandos básicos Ver contenido de los ficheros $ hdfs dfs

    –cat /user/root/prueba/prueba1.txt
  36. Otros comandos útiles • Count : ▫ hdfs dfs –count

    /user/root/ • Tail ▫ hdfs dfs –tail /user/root/prueba1.txt • Touchz ▫ hdfs dfs –touchz /user/root/zero.txt • Mv ▫ hdfs dfs –mv /user/root/zero.txt /user/root/directorio