Hadoop: sistema de archivos HDFS

Tabla de contenido

sistema de archivos HDFS 

1. Definición del sistema de archivos

2. En la era de los grandes datos, ¿qué desafíos enfrentarán los sistemas tradicionales de almacenamiento de archivos frente a los datos masivos?

3. Los atributos centrales y los significados funcionales de los sistemas de almacenamiento distribuido

1. Ventajas del almacenamiento distribuido

2. La función de registro de metadatos

3. Beneficios del almacenamiento en bloque

4. El papel del mecanismo de copia

4. Introducción a HDFS

Escenarios aplicables a HDFS

5. Arquitectura maestro-esclavo HDFS

almacenamiento en bloque

mecanismo de copia

gestión de metadatos

almacenamiento en bloque

6. Operación de shell HDFS

Operaciones comunes:

7. Flujo de trabajo y mecanismo de HDFS

Rol principal: NameNode

responsabilidades del nodo de nombre:

Desde el rol: nodo de datos

responsabilidades del nodo de datos

8. El proceso de lectura y escritura de datos en HDFS

Concepto central--Pipeline pipeline

Concepto central: respuesta de respuesta ACK

3 estrategias de almacenamiento de copias predeterminadas:

Todo el proceso de operación de escritura:

Todo el proceso de operación de lectura:


sistema de archivos HDFS 

1. Definición del sistema de archivos

El sistema de archivos es un método de almacenamiento y organización de datos, que realiza operaciones de almacenamiento, organización separada, acceso y adquisición de datos, lo que facilita a los usuarios el acceso y la búsqueda de archivos.

El sistema de archivos utiliza el concepto lógico abstracto de un directorio de árbol para reemplazar el concepto de bloques de datos que utilizan los dispositivos físicos, como los discos duros. Los usuarios no necesitan preocuparse por dónde se encuentran los datos subyacentes en el disco duro, solo deben recordar el directorio y el nombre de archivo del archivo.

Los sistemas de archivos suelen utilizar dispositivos de almacenamiento, como discos duros y discos ópticos, y mantienen la ubicación física de los archivos en el dispositivo.

    El llamado sistema de archivos común tradicional se refiere más al sistema de archivos de una sola máquina, es decir, la capa inferior no se implementará en varias máquinas. Por ejemplo, el sistema de archivos en el sistema operativo Windows
, el sistema de archivos en Linux, el sistema de archivos FTP, etc.
    Las características comunes de estos sistemas de archivos incluyen:
        1. Con una estructura de árbol de directorio abstracta, el árbol comienza desde el directorio raíz / y se extiende hacia abajo
        2. Los nodos en el árbol se dividen en dos categorías: directorios y archivos
        3. Inicio desde el directorio raíz, la ruta del nodo es única. 

############################################## ######## 

2. En la era de los grandes datos, ¿qué desafíos enfrentarán los sistemas tradicionales de almacenamiento de archivos frente a los datos masivos?

Alto costo:

​ El hardware de almacenamiento tradicional tiene poca versatilidad, inversión en equipos más mantenimiento posterior, y el costo de actualización y expansión es muy alto

Cómo apoyar el cálculo y el análisis eficientes:

Los métodos tradicionales de almacenamiento significan datos: el almacenamiento es almacenamiento, la computación es computación, y cuando los datos necesitan ser procesados, los datos se mueven,

El programa y el almacenamiento de datos son implementados por diferentes proveedores de tecnología y no pueden integrarse orgánicamente juntos.

Bajo rendimiento:

​ El cuello de botella de rendimiento de E/S de un solo nodo no se puede superar, y es difícil admitir escenarios de alto rendimiento simultáneo de datos masivos.

Mala escalabilidad:

No se puede lograr un despliegue rápido y una expansión elástica, expansión dinámica, alto costo de reducción y difícil implementación técnica.

############################################## ########  

3. Los atributos centrales y los significados funcionales de los sistemas de almacenamiento distribuido

Atributos básicos de un sistema de almacenamiento distribuido

• Almacenamiento distribuido

• registros de metadatos

• Almacenamiento en bloque

• Mecanismo de copia

############################################## ########  

1. Ventajas del almacenamiento distribuido

Problema: la cantidad de datos es grande y el almacenamiento independiente encuentra un cuello de botella

resolver:

Expansión vertical de una sola máquina: no hay suficientes discos para agregar discos y hay un límite superior de cuello de botella

Expansión horizontal multimáquina: la máquina no es suficiente para agregar máquinas, expansión teóricamente ilimitada

############################################## ########  

2. La función de registro de metadatos

pregunta:

Los archivos distribuidos en diferentes máquinas no son propicios para encontrar

resolver:

Los metadatos registran el archivo y su información de ubicación de almacenamiento para ubicar rápidamente la ubicación del archivo

 

############################################## ########  

 

3. Beneficios del almacenamiento en bloque

pregunta:

​ El archivo es demasiado grande para ser almacenado en una sola máquina, y la eficiencia de carga y descarga es baja

resolver:

​ Los archivos se almacenan en bloques en diferentes máquinas, lo que mejora la eficiencia de las operaciones paralelas de bloques

 ############################################## ######## 

4. El papel del mecanismo de copia

pregunta:

La falla del hardware es inevitable y los datos son fáciles de perder

resolver:

Copia de seguridad de diferentes configuraciones de la máquina, almacenamiento redundante, para garantizar la seguridad de los datos

 ############################################## ######## 

4. Introducción a HDFS

HDFS (Sistema de archivos distribuidos de Hadoop), que significa: Sistema de archivos distribuidos de Hadoop.

Es uno de los componentes centrales de Apache Hadoop y existe como el servicio de almacenamiento distribuido inferior del ecosistema de big data.También se puede decir que el primer problema que debe resolver el big data es el almacenamiento de datos masivos.

 

HDFS resuelve principalmente el problema de cómo almacenar big data Distribuido significa que HDFS es un sistema de almacenamiento que abarca múltiples computadoras.

HDFS es un sistema de archivos distribuido que puede ejecutarse en hardware común. Es altamente tolerante a fallas y adecuado para aplicaciones con grandes conjuntos de datos. Es muy adecuado para almacenar datos grandes (como TB y PB).

HDFS utiliza varias computadoras para almacenar archivos y proporciona la misma interfaz de acceso, utilizando un sistema de archivos distribuido como acceder a un sistema de archivos normal.

 

Escenarios aplicables a HDFS

############################################## ########  

5. Arquitectura maestro-esclavo HDFS

El clúster HDFS es un clúster de arquitectura estándar maestro/esclavo maestro-esclavo

Generalmente, un clúster HDFS consiste en un Namenode y una cierta cantidad de Datanodes.

Namenode es el nodo maestro de HDSF y Datanode es el nodo esclavo de HDFS. Los dos roles realizan sus propias funciones y se coordinan para completar el servicio de almacenamiento de archivos distribuidos.

El diagrama de arquitectura oficial es un modo maestro-cinco-esclavo, en el que cinco funciones de esclavo se ubican en diferentes servidores en dos bastidores (RACK).

 

almacenamiento en bloque

Los archivos en HDFS se almacenan físicamente en bloques y el tamaño predeterminado es 128 M. Si es inferior a 128 M, es un bloque en sí mismo.

El tamaño del bloque se puede especificar mediante parámetros de configuración, que se encuentran en hdfs-default.xml: dfs.blocksize

mecanismo de copia

Todos los bloques del archivo tendrán una copia, el coeficiente de copia se puede especificar cuando se crea el archivo o se puede cambiar más tarde mediante un comando

El número de copias lo controla el parámetro dfs.replication, y el valor por defecto es 3, es decir, se copiarán 2 copias adicionales, junto con él mismo un total de 3 copias

gestión de metadatos

En HDFS, hay dos tipos de metadatos administrados por Namenode.

información de atributos de archivo

​ Nombre de archivo, permiso, tiempo de modificación, tamaño de archivo, factor de replicación, tamaño de bloque de datos.

Información de asignación de ubicación de bloques de archivos

Registre la información de mapeo entre bloques de archivos y nodos de datos, es decir, qué bloque se encuentra en qué nodo.

almacenamiento en bloque

La gestión de almacenamiento específica de cada bloque del archivo es gestionada por el nodo DataNode

Cada bloque se puede almacenar en múltiples DataNodes

############################################## ########  

6. Operación de shell HDFS

introducir:

La interfaz de línea de comandos se refiere a una forma de interacción humana cuando el usuario ingresa instrucciones a través del teclado y la computadora ejecuta las instrucciones después de recibirlas.

​ Hadoop proporciona un cliente de línea de comandos de shell para el sistema de archivos: hadoop fs [opciones]

[hadoop@node1 mapreduce]$ hadoop fs
Usage: hadoop fs [generic options]
	[-appendToFile <localsrc> ... <dst>]
	[-cat [-ignoreCrc] <src> ...]
	[-checksum [-v] <src> ...]
	[-chgrp [-R] GROUP PATH...]
	[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
	[-chown [-R] [OWNER][:[GROUP]] PATH...]
	[-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] <localsrc> ... <dst>]
	[-copyToLocal [-f] [-p] [-ignoreCrc] [-crc] <src> ... <localdst>]
	[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
	[-cp [-f] [-p | -p[topax]] [-d] <src> ... <dst>]
	[-createSnapshot <snapshotDir> [<snapshotName>]]
	[-deleteSnapshot <snapshotDir> <snapshotName>]
	[-df [-h] [<path> ...]]
	[-du [-s] [-h] [-v] [-x] <path> ...]
	[-expunge [-immediate] [-fs <path>]]
[hadoop@node1 local]$ hadoop fs -ls /
[hadoop@node1 local]$ hadoop fs -mkdir /test
[hadoop@node1 local]$ hadoop fs -ls /
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2023-03-28 14:03 /test
HDFS Shell CLI 支持多种文件系统,包括本地文件系统(file:///),分布式文件系统(hdfs://)

​		具体操作的是什么文件系统取决于命令中文件路径URL中的前缀协议。

​		如果没有指定前缀,则将会读取环境变量中的fs.defaultFS属性,以该属性值作为默认文件系统。
		hadoop dfs 只能操作HDFS文件系统(包括与Local FS间的操作),不过已经Deprecated;
		hdfs dfs 只能操作HDFS文件系统相关(包括与Local FS间的操作),常用;
		hadoop fs 可操作任意文件系统,不仅仅是hdfs文件系统,使用范围更广;
		目前版本来看,官方最终推荐使用的是hadoop fs。当然hdfs dfs在市面上的使用也比较多。

Operaciones comunes:

hadoop fs -mkdir [-p] <path> ... 
	path 为待创建的目录
	-p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录
hadoop fs -ls [-h] [-R] [<path> ...] 
	path 指定目录路径
	-h 人性化显示文件size
	-R 递归查看指定目录及其子目录
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
	-f 覆盖目标文件(已存在下)
	-p 保留访问和修改时间,所有权和权限。
	localsrc 本地文件系统(客户端所在机器)
	dst 目标文件系统(HDFS)
hadoop fs -cat <src> ... 
	读取指定文件全部内容,显示在标准输出控制台。
	注意:对于大文件内容读取,慎重。
hadoop fs -get [-f] [-p] <src> ... <localdst>
	下载文件到本地文件系统指定目录,localdst必须是目录
	-f 覆盖目标文件(已存在下)
	-p 保留访问和修改时间,所有权和权限。
hadoop fs -cp [-f] <src> ... <dst> 
	-f 覆盖目标文件(已存在下)
hadoop fs -mv <src> ... <dst>
	移动文件到指定文件夹下
	可以使用该命令移动数据,重命名文件的名称

############################################## ########  

7. Flujo de trabajo y mecanismo de HDFS

Rol principal: NameNode

NameNode es el núcleo del sistema de archivos distribuido Hadoop y el papel principal en la arquitectura

NameNode mantiene y administra los metadatos del sistema de archivos, incluida la estructura del árbol del directorio del espacio de nombres, la información de ubicación de los archivos y bloques, los permisos de acceso, etc.

En base a esto, NameNode se convierte en la única entrada para acceder a HDFS

NameNode gestiona internamente los metadatos a través de la memoria y los archivos de disco.

Los archivos de metadatos en el disco incluyen archivos de imagen de metadatos de memoria Fsimage y registros de edición de registro de ediciones (Diario).

responsabilidades del nodo de nombre:

NameNode solo almacena metadatos HDFS: el árbol de directorios de todos los archivos en el sistema de archivos y realiza un seguimiento de los archivos en todo el clúster, sin almacenar datos reales

El NameNode conoce la lista de bloques y sus ubicaciones para cualquier archivo dado en HDFS, utilizando esta información, el NameNode sabe cómo construir el archivo a partir de los bloques.

NameNode no conserva la información de ubicación del nodo de datos donde se almacena cada bloque en cada archivo, y esta información se reconstruirá a partir de DataNode cuando se inicie el sistema.

NameNode es un único punto de falla en un clúster de Hadoop

Donde reside NameNode y generalmente está configurado con una gran cantidad de memoria (RAM)

Desde el rol: nodo de datos

DataNode es un rol esclavo en Hadoop HDFS, responsable del almacenamiento de bloques de datos específicos

La cantidad de DataNodes determina la capacidad general de almacenamiento de datos del clúster HDFS, y los bloques de datos se mantienen mediante la cooperación con NameNode.

responsabilidades del nodo de datos

DataNode es responsable del almacenamiento del bloque de bloque de datos final, que es el rol esclavo del clúster, también conocido como Esclavo

Cuando se inicie DataNode, se registrará en NameNode e informará la lista de bloques que es responsable de mantener.

Cuando se apaga un DataNode, no afectará la disponibilidad de los datos, y el NameNode organizará réplicas de bloques administrados por otros DataNodes.

La máquina donde se encuentra el DataNode generalmente está configurada con una gran cantidad de espacio en el disco duro, porque los datos reales se almacenan en el DataNode.

Rol principal Rol secundario: secondnamenode

SecondaryNameNode actúa como un nodo auxiliar de NameNode, pero no puede reemplazar a NameNode

Es principalmente para ayudar al rol principal a fusionar archivos de metadatos, lo que puede entenderse como el secretario del rol principal. 

############################################## ######## 

8. El proceso de lectura y escritura de datos en HDFS

Concepto central--Pipeline pipeline

Pipeline, la traducción al chino es pipeline, que es un método de transmisión de datos utilizado por HDFS en el proceso de carga de archivos y escritura de datos

El cliente escribe el bloque de datos en el primer nodo de datos, el primer nodo de datos guarda los datos y luego copia el bloque en el segundo nodo de datos, que lo guarda y luego lo copia en el tercer nodo de datos.

¿Por qué utilizar la transmisión lineal de tubería entre nodos de datos en lugar de la transmisión topológica a tres nodos de datos a la vez?

Debido a que los datos se transmiten secuencialmente en una dirección en forma de tubería, esto puede hacer un uso completo del ancho de banda de cada máquina, evitar cuellos de botella en la red y conexiones de alta latencia, y minimizar la demora en enviar todos los datos.

En el modo de inserción lineal, todo el ancho de banda de salida de cada máquina se usa para transferir datos a la velocidad más rápida, en lugar de distribuir el ancho de banda entre varios destinatarios.

Concepto central: respuesta de respuesta ACK

ACK (Carácter de reconocimiento) es el carácter de confirmación. En la comunicación de datos, un carácter de control de transmisión enviado por el receptor al remitente, que indica que se ha confirmado que los datos enviados se recibieron correctamente.

En el proceso de transmisión de datos de la tubería HDFS, se realizará una verificación ACK en la dirección opuesta de la transmisión para garantizar la seguridad de la transmisión de datos.

3 estrategias de almacenamiento de copias predeterminadas:

La primera copia del bloque: Cliente prioritario local, de lo contrario aleatorio.

Copia del segundo bloque: Un bastidor diferente al de la copia del primer bloque.

La tercera copia: la segunda copia tiene el mismo estante pero diferentes máquinas.

Todo el proceso de operación de escritura:

1. El cliente HDFS crea una instancia de objeto DistributedFileSystem, que encapsula métodos relacionados con las operaciones del sistema de archivos HDFS.

2. Llame al método create() del objeto DistributedFileSystem y solicite a NameNode que cree un archivo a través de RPC.
NameNode realiza varias comprobaciones para determinar si existe el archivo de destino, si existe el directorio principal y si el cliente tiene permiso para crear el archivo. Si se pasa la verificación
, NameNode registrará un registro para esta solicitud y devolverá el objeto de flujo de salida FSDataOutputStream al cliente para escribir datos.

3. El cliente comienza a escribir datos a través del flujo de salida FSDataOutputStream.

4. Cuando el cliente escribe datos, divide los datos en paquetes (el paquete predeterminado es 64k), y el componente interno DataStreamer solicita a NameNode que seleccione
un conjunto de direcciones de DataNode adecuadas para almacenar copias de datos. El valor predeterminado es almacenamiento de 3 copias.
DataStreamer transmite el paquete al primer DataNode de la canalización, que almacena el paquete y lo envía al segundo
DataNode de la canalización. Asimismo, el segundo DataNode almacena el paquete y lo envía al tercer (y último) DataNode.

5. En la dirección opuesta de la transmisión, el mecanismo ACK se utilizará para verificar si la transmisión del paquete de datos es exitosa;

6. Después de que el cliente termine de escribir datos, llame al método close() en el flujo de salida de FSDataOutputStream para cerrarlo.

7. DistributedFileSystem contacta a NameNode para informarle que la escritura del archivo está completa y espera la confirmación de NameNode.
Debido a que el nodo de nombre ya sabe en qué bloques consiste el archivo (DataStream solicita asignar bloques de datos), solo necesita esperar a que el bloque de replicación mínimo regrese con éxito.La replicación mínima se especifica mediante el parámetro dfs.namenode.replication.min
, y el valor predeterminado es 1.

############################################## ########  

Todo el proceso de operación de lectura:

Todo el proceso de operación de lectura:

1. El cliente HDFS crea una instancia de objeto DistributedFileSystem y llama al método open() del objeto para abrir el archivo que desea leer.

2. DistributedFileSystem usa RPC para llamar a namenode para determinar la información de posición de bloque (leer en lotes) de **los primeros bloques en el archivo**.

Para cada bloque, el nodo de nombre devuelve una lista de direcciones de ubicación de nodos de datos que tienen todas las réplicas del bloque, y la lista de direcciones se ordena, con la distancia más cercana a la topología de red del cliente ordenada primero.

3. DistributedFileSystem devuelve el flujo de entrada FSDataInputStream al cliente para que lea los datos.

4. El cliente llama al método read() en el flujo de entrada FSDataInputStream. Luego, el InputStream que ha almacenado la dirección de DataNode se conecta al archivo

El DataNode más cercano para el primer bloque en . Los datos se transmiten de regreso al cliente desde DataNode y, como resultado, el cliente puede llamar repetidamente a read() en la transmisión.

5. Cuando finalice el bloque, FSDataInputStream cerrará la conexión con DataNode y luego buscará la mejor posición de nodo de datos para el siguiente bloque. Estas operaciones son transparentes para el usuario. Entonces el usuario siente que ha estado leyendo un flujo continuo.

Cuando el cliente lee los datos de la secuencia, también le pide a NameNode, según sea necesario, que recupere la información de ubicación de DataNode para el siguiente lote de bloques de datos.

6. Una vez que el cliente termine de leer, llame al método close() en FSDataInputStream.

Supongo que te gusta

Origin blog.csdn.net/qq_48391148/article/details/129834162
Recomendado
Clasificación