hdfs
DESCRIPTION
Introducción al sistema de ficheros ditribuidos de HadoopTRANSCRIPT
![Page 1: HDFS](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/25.jpg)
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
1º
2º
2º
3º 4º
5º
5º
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.net/reader033/viewer/2022050804/54830d3bb47959190d8b4968/html5/thumbnails/29.jpg)
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