hdfs

29
HDFS Tomás Fernández Pena Máster en Computación de Altas Prestaciones Universidade de Santiago de Compostela Computación en Sistemas Distribuidos Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) citius.usc.es

Upload: tomas-pena

Post on 05-Dec-2014

382 views

Category:

Technology


0 download

DESCRIPTION

Introducción al sistema de ficheros ditribuidos de Hadoop

TRANSCRIPT

Page 1: HDFS

HDFS

Tomás Fernández Pena

Máster en Computación de Altas Prestaciones

Universidade de Santiago de Compostela

Computación en Sistemas Distribuidos

Material bajo licencia Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)citius.usc.es

Page 2: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 3: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 4: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Filesystems en Hadoop

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:

hadoop fs -ls file:///home/pepe

Ayuda:

hadoop fs -help

HDFS, CSD 1/21

Page 5: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Interactuar con HDFS

Tres modos principales:

1. Usando línea de comandos: comando hadoop fs. Permite cargar, descargar y acceder a los ficheros desde línea de

comandos

. Vale para todos los filesystems soportados

2. Usando el interfaz web

. Puerto 50070 del Namenode

3. Programáticamente: interfaz Java

4. Mediante otras interfaces: WebHDFS, HFTP, Fuse-DFS

HDFS, CSD 2/21

Page 6: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 7: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Interfaz en línea de comandos (I)

Comandos de manejo de ficheros

Comando Significado

hadoop fs -ls <path> Lista ficheros

hadoop fs -lsr <path> Lista recursivamente

hadoop fs -cp <src> <dst> Copia ficheros HDFS a HDFS

hadoop fs -mv <src> <dst> Mueve ficheros HDFS a HDFS

hadoop fs -rm <path> Borra ficheros en HDFS

hadoop fs -rmr <path> Borra recursivamente

hadoop fs -cat <path> Muestra fichero en HDFS

hadoop fs -tail <path> Muestra el final del fichero

hadoop fs -stat <path> Muestra estadísticas del fichero

hadoop fs -mkdir <path> Crea directorio en HDFS

hadoop fs -chmod ... Cambia permisos de fichero

hadoop fs -chown ... Cambia propietario/grupo de fichero

hadoop fs -du <path> Espacio en bytes ocupado por ficheros

hadoop fs -dus <path> Espacio ocupado acumulado

hadoop fs -count <paths> Cuenta nº dirs/ficheros/bytes

HDFS, CSD 3/21

Page 8: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Interfaz en línea de comandos (II)

Movimiento de ficheros del sistema local al HDFS:

Comando Significado

hadoop fs -put <local> <dst> Copia de local a HDFS

hadoop fs -copyFromLocal ... Igual que -put

hadoop fs -moveFromLocal ... Mueve de local a HDFS

hadoop fs -get <src> <loc> Copia de HDFS a local

hadoop fs -copyToLocal ... Copia de HDFS a local

hadoop fs -getmerge ... Copia mezclando y ordenando

hadoop fs -text <path> Muestra el fichero en texto

HDFS, CSD 4/21

Page 9: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Interfaz en línea de comandos (III)

Otros comandos:

Comando Significado

hadoop fs -setrep [-R] <path> Cambia el nivel de replicación

hadoop fs -test -[ezd] <path> Tests sobre el fichero

hadoop fs -touchz <path> Crea fichero vacío

hadoop fs -expunge Vacía la papelera

Más información:

http://hadoop.apache.org/docs/r1.2.1/file_system_shell.html

HDFS, CSD 5/21

Page 10: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 11: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Interfaz 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

HDFS, CSD 6/21

Page 12: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Lectura de ficheros

Muestra en consola un fichero en HDFS

public class FileSystemCat {

public stat ic void main( String [ ] args ) throws Exception {

String ur i = args [0] ;

/ / Configuracion por defecto

Configuration conf = new Configuration ( ) ;

/ / Objeto para acceder al filesystem HDFS

FileSystem fs = FileSystem . get (URI . create ( ur i ) , conf ) ;

/ / InputStream

FSDataInputStream in = nul l ;

try {

/ / Abre el FSDataInputStream con el PATH indicado

in = fs .open(new Path( ur i ) ) ;

/ / Copia de un stream a otro , con un buffer de 4096 bytes

/ / No cierra los buffers al terminar ( false )

IOUti ls . copyBytes( in , System. out , 4096, false ) ;

} f ina l l y {

IOUti ls . closeStream( in ) ;

}}}

Ejecución (definir correctamente la variable HADOOP_CLASSPATH

$ export HADOOP_CLASSPATH="."$ hadoop mipaquete.FileSystemCat fichero_en_HDFS

HDFS, CSD 7/21

Page 13: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

FSDataInputStream

Interfaces implementadas por FSDataInputStream:

1. Seekable: permite movernos a una posición en el fichero (métdos

seek

2. PositionedReadable: permite copiar a un buffer partes de un

fichero

HDFS, CSD 8/21

Page 14: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

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 sync() garantiza coherencia, pero supone un overhead

(deprecado en v2, reemplazado por hflush())

HDFS, CSD 9/21

Page 15: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

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

HDFS, CSD 10/21

Page 16: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

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

. Opciones: -overwrite, -update

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

HDFS, CSD 11/21

Page 17: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 18: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Herramientas para la gestión del HDFS

Hadoop proporciona un conjunto de herramientas para chequear y

optimizar el HDFS

hadoop dfsadmin: optiene información del estado del HDFS

hadoop fsck: chequeo del filesystem

start-balancer.sh: redistribuye bloques entre datanodes

HDFS, CSD 12/21

Page 19: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

hadoop dfsadmin

Algunas opciones (usar hadoop dfsadmin comando)

Comando Significado

-help Ayuda

-report Muestra estadísticas del filesystem

-setQuota Fija una cuota en el número de nombres en

el filesystem (nº de ficheros/directorios)

-clrQuota Borra la cuota de nombres

-setSpaceQuota Fija una cuota en el espacio ocupado en el filesystem

-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

HDFS, CSD 13/21

Page 20: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

hadoop 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

hadoop fsck /. Informa del número de bloques de un fichero y su localización

hadoop fsck /user/pepe/foo -files -blocks -racks

HDFS, CSD 14/21

Page 21: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 22: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Namenode principal

Ficheros en dfs.name.dir

fsimage: imagen del filesystem

. Contiene información de directorios y ficheros, incluyendo los

bloques que los forman

. La localización de los bloques en los Datanodes se guarda en

memoria

fstime: timestamp

. Instante en el que se creo el fsimage

edits: logs de edicions (edit log)

. Guarda todas las modificaciones en el filesystem desde fstime

HDFS, CSD 15/21

Page 23: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Inicio del Namenode

Cuando se inicia el Namenode:

1. Carga fsimage en memoria y aplica las modificaciones indicadas

en edits

2. Con esta imagen reconstruida, crea un nuevo fsimage y vacía

edits

3. Pone la marca de tiempo en fstime

4. Espera a que los Datanodes le envíen información de los bloquesque tienen

. Esta información se guarda en memoria

HDFS, CSD 16/21

Page 24: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Modo seguro

Durante la inicialización, el sistema está en modo seguro (safe mode)

Solo permite acceso de lectura

El modo seguro termina 30 segundos después de que el 99.9 % de

los bloques alcancen un nivel mínimo de replicación

Propiedades ajustables:

Propiedad Por defecto

dfs.replication.min 1

dfs.safemode.threshold.pct 0.99

dfs.safemode.extension 30

HDFS, CSD 17/21

Page 25: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Namenode secundario

fsimage

fstime

edits

fsimage

edits

fsimage.ckpt

fsimage.ckpt

edits.new edits

fsimage

fstime

3º 4º

Namenode

Namenode secundario

1. NN crea edits vacío

2. SNN obtiene fsimage y edits de NN

3. SNN mezcla los ficheros

4. SNN transfirere la mezcla al NN

5. NN actualiza fsimage, edits y fstime

HDFS, CSD 18/21

Page 26: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Namenode secundario

En un sistema ocupado el fichero edits crece demasiado

El Namenode secundario se ocupa de mezclar edits y fsimagepara inicializarlo

. Proceso costoso en recursos

. El SNN tiene requisitos de memoria similares a los del NN

Checkpoint realizado cada hora (fs.checkpoint.period) o si

edits alcanza 64 MB (fs.checkpoint.size)

En caso de fallo total del Namenode, se puede recuperar una versión

“vieja” del secundario

Iniciar el demonio del Namenode con la opción

-importCheckpoint

HDFS, CSD 19/21

Page 27: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Índice

1 Filesystems en Hadoop

2 Interfaz en línea de comandos

3 Interfaz Java

4 Herramientas para la gestión del HDFS

5 Namenode principal y secundario

6 Otras interfaces a HDFS

HDFS, CSD

Page 28: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

Otras interfaces a HDFS

Otros modos de acceder a HDFS

WebHDFS: proporciona una API RESful para acceder a HDFS

mediante HTTP

HFTP: acceso de solo lectura a HDFS a través de HTTP

Fuse-DFS: usa FUSE (Filesystem in Userspace) para montar HDFS en

un directorio

HDFS, CSD 20/21

Page 29: HDFS

Filesystems en Hadoop Interfaz en línea de comandos Interfaz Java Herramientas para la gestión del HDFS Namenode principal y secundario Otras interfaces a HDFS

WebHDFS

Para activar WebHDFS:

En el fichero hdfs-site.xml del Namenode, dar a la propiedad

dfs.webhdfs.enabled el valor true

Reiniciad el Namenode y los Datanodes

HDFS, CSD 21/21