$30 off During Our Annual Pro Sale. View Details »

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)

    View Slide

  2. INDICE
    • ¿QUE ES HDFS?
    • CONCEPTOS BASICOS
    • REPLICACION Y GESTIÓN DE ERRORES
    • ARQUITECTURA DE HDFS
    • PRÁCTICA: COMANDOS BÁSICOS

    View Slide

  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”

    View Slide

  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.”

    View Slide

  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.

    View Slide

  6. View Slide

  7. 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).

    View Slide

  8. 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.

    View Slide

  9. 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

    View Slide

  10. Namenodes y Datanodes
    • En la arquitectura de HDFS existen dos tipos
    de nodos:
     Namenodes (master)
     Datanodes (workers)

    View Slide

  11. 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

    View Slide

  12. 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.

    View Slide

  13. View Slide

  14. 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.

    View Slide

  15. 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.

    View Slide

  16. 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.

    View Slide

  17. 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.

    View Slide

  18. 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.

    View Slide

  19. View Slide

  20. 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.

    View Slide

  21. 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

    View Slide

  22. View Slide

  23. 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.

    View Slide

  24. 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.

    View Slide

  25. 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.

    View Slide

  26. 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.

    View Slide

  27. 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.

    View Slide

  28. 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.

    View Slide

  29. 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.

    View Slide

  30. 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.

    View Slide

  31. View Slide

  32. SecundaryNameNode
    • Servicio auxiliar y opcional en el cluster.
    • Puede usarse como backup de los
    metadatos.

    View Slide

  33. JobTracker
    • Es el “demonio” encargado de ejecutar las
    tareas relacionadas con mapreduce.
    • Las ejecuta sobre unos determinados nodos
    del clúster.

    View Slide

  34. TaskTracker
    • Es un demonio encargado de ejecutar una
    determinada tarea en cada nodo encargada
    por el jobtracker.
    • Las tareas son aplicaciones Java
    MapReduce.

    View Slide

  35. 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

    View Slide

  36. 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.

    View Slide

  37. Configuración HDFS
    • Core-site.xml

    href="configuration.xsl"?>


    fs.default.name
    hdfs://localhost:8020
    Nombre del filesystem por
    defecto.


    View Slide

  38. Configuración HDFS
    • Hdfs-site.xml




    dfs.namenode.name.dir
    file:/home/hadoop/workspace/dfs/name
    Path del filesystem donde el namenode almacenará los
    metadatos.


    dfs.datanode.data.dir
    file:/home/hadoop/workspace/dfs/data
    Path del filesystem donde el datanode almacenerá los
    bloques.


    dfs.replication
    1
    Factor de replicación. Lo ponemos a 1 porque sólo tenemos 1
    máquina.


    View Slide

  39. View Slide

  40. Comandos básicos
    $hdfs dfs
    - Sencillez
    - Comandos básicos parecidos a Linux.
    - http://hadoop.apache.org/docs/r2.3.0/hadoo
    p-project-dist/hadoop-
    common/FileSystemShell.html

    View Slide

  41. Comandos básicos
    $ hdfs namenode –format

    View Slide

  42. Comandos básicos
    $ hdfs dfs –ls

    View Slide

  43. Comandos básicos
    Creación de directorios
    $ hdfs dfs –mkdir
    /user/root/prueba

    View Slide

  44. Comandos básicos
    Copiar archivos de local a
    HDFS.
    $ hdfs dfs -copyFromLocal
    prueba1.txt
    /user/root/prueba

    View Slide

  45. Comandos básicos
    Ver contenido de los ficheros
    $ hdfs dfs –cat /user/root/prueba/prueba1.txt

    View Slide

  46. Comandos básicos
    Tamaños de directorios y ficheros
    $ hdfs dfs –du /user/root/prueba

    View Slide

  47. Comandos básicos
    $ hdfs fsck / -files -blocks

    View Slide

  48. Comandos básicos
    Fusión de ficheros
    $ hdfs dfs -getmerge
    /user/root/prueba total.txt

    View Slide

  49. Comandos básicos
    Borrado de ficheros
    $ hdfs dfs –rm
    /user/root/prueba/prueba1.txt

    View Slide

  50. 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

    View Slide

  51. ¡MUCHAS GRACIAS A TODOS!
    @joseadame

    View Slide