Esquema de optimización de alto nivel de Hadoop HDFS

Tabla de contenido

1. Lecturas locales de cortocircuito: Lecturas locales de cortocircuito

1.1 Antecedentes

1.2 El diseño e implementación de la versión anterior.

​1.3 Diseño e implementación de versión de seguridad mejorada 

1.4 Configuración de lectura local de cortocircuito

1.4.1 libhadoop.so

1.4.2 sitio-hdfs.xml

1.4.3 Ver registros de Datanode 

2. Balanceador de carga de bloques HDFS: Balanceador

2.1 Antecedentes 

2.2 Configuración de la línea de comando 

2.3 Cómo ejecutar Balancer 

2.3.1 Configuración del carrusel de datos equilibrados

2.3.2 Ejecutar el equilibrador 

3. Ecualizador de disco: HDFS Disk Balancer

3.1 Antecedentes 

3.2 Introducción al equilibrador de discos HDFS 

3.3 Función de equilibrador de disco HDFS 

3.3.1 Informe de difusión de datos

3.3.1.1 Cálculo de la métrica de densidad de datos de volumen (densidad de datos de volumen)

3.3.1.2 Proceso de cálculo de la densidad de datos del nodo

3.3.2 Equilibrio de disco

3.4 Habilitar el equilibrador de disco HDFS 

3.5 Comandos relacionados con HDFS Disk Balancer 

3.5.1 planificar planificar 

3.5.2 Ejecutar 

3.5.3 Consulta de consulta 

3.5.4 Cancelar 

3.5.5 Informe

4. Tecnología de codificación de borrado: codificación de borrado 

4.1 Antecedentes: 3 desventajas de la estrategia de copia

​4.2 Introducción a la codificación de borrado (CE) 

4.3 Códigos Reed-Solomon (RS) 

4.4 Arquitectura Hadoop EC 

4.5 Método de implementación de codificación de borrado 

4.5.1 Configuración de clúster y hardware 

4.5.2 Configuración de la política de código de borrado 

4.5.3 Habilitar Intel ISA-L (Biblioteca de aceleración de almacenamiento inteligente) 

4.5.3.1 Instalar yasm y nasm  

4.5.3.2 Compilar e instalar isa-l-2.28.0

4.5.3.3 Comprobar si isa-l está habilitado en Hadoop 

4.5.4 Comandos EC 


1. Lecturas locales de cortocircuito : Lecturas locales de cortocircuito

1.1 Antecedentes

        En HDFS  , ya sean  lecturas locales ( DFSClient  Datanode  están en el mismo nodo) o  lecturas ( DFSClient  Datanode  no están en el mismo nodo), el método de procesamiento subyacente es el mismo y  Datanode  lee primero los datos , y luego a través de  RPC (Basado en  TCP ) Pasar datos a  DFSClient . Este procesamiento es relativamente simple, pero el rendimiento se verá afectado porque  el Datanode  necesita realizar una transferencia en el medio. 

        Especialmente para  las lecturas locales  , dado que  DFSClient  y los datos están en la misma máquina, la idea natural es permitir que  DFSClient  omita  Datanode  para leer los datos por sí mismo . Las llamadas lecturas de "cortocircuito" omiten  el DataNode , lo que permite a los clientes leer el archivo directamente. Obviamente esto sólo funciona si el cliente está en la misma máquina que los datos. Las lecturas de cortocircuito proporcionan importantes mejoras de rendimiento para muchas aplicaciones. 

1.2  El diseño e implementación de la versión anterior.

        HDFS-2246  En este JIRA, la idea de los ingenieros es que dado que los datos leídos  DFSClient  y los datos están en la misma máquina,  el Datanode  leerá la ruta de los datos en el sistema de archivos, dónde comenzar a leer (desplazamiento ) y cuánto leer (longitud) y otra información para decirle  a DFSClient , y luego  a DFSClient  para abrir el archivo y leerlo por sí mismo .

La idea es buena, el problema radica en la compleja configuración y cuestiones de seguridad.

        El primero es el problema de configuración, debido a que DFSClient debe  abrir el archivo para leer datos por sí solo, por lo que es necesario configurar una lista blanca para definir qué usuarios tienen acceso al  directorio de datos de Datanode  .

        Si se une un nuevo usuario, se debe modificar la lista blanca. Cabe señalar que este es el directorio de datos que permite al cliente acceder al Datanode , lo que significa que cualquier usuario con este permiso puede acceder a otros datos del directorio, lo que genera un agujero de seguridad .

Por lo tanto, esta implementación está en desuso .

1.3  Diseño e implementación de versión de seguridad mejorada 

        En HDFS-347, se propone una nueva solución para hacer que la lectura de datos locales en cortocircuito sea más segura . En Linux  , existe una tecnología llamada  Unix Domain Socket . Unix Domain Socket  es un método de comunicación entre procesos que permite que dos procesos en la misma máquina se comuniquen en forma de Socket . Otro gran beneficio que aporta es que dos procesos pueden usarlo para transferir descriptores de archivos entre procesos además de los datos ordinarios .

Supongamos que hay dos usuarios A y  B         en la máquina  , tiene permiso para acceder a un determinado archivo pero  no, y  necesita acceder a este archivo . Con la ayuda de Unix Domain Socket , puede  abrir el archivo para obtener un descriptor de archivo y luego pasar el descriptor de archivo a  B , y B  puede leer el contenido del archivo incluso si no tiene el permiso correspondiente .

        En el  escenario HDFS, es  Datanode , es  DFSClient y el archivo a leer es  un archivo en el directorio de datos de Datanode  .

1.4 Configuración de lectura local de cortocircuito

1.4.1  libhadoop.so

        Debido a que Java  no puede operar directamente  el socket de dominio Unix ,  es necesario instalar el paquete nativo  libhadoop.so de  Hadoop  . Se puede obtener compilando  el módulo nativo  al compilar  el código fuente de Hadoop  . Puede utilizar el siguiente comando para comprobar si el paquete nativo  está instalado . 

1.4.2  sitio-hdfs.xml

[root@hadoop01 ~]# vim /bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/hdfs-site.xml 
<property>
  <name>dfs.client.read.shortcircuit</name>
  <value>true</value>
</property>
<property>
  <name>dfs.domain.socket.path</name>
  <value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
  • dfs.client.read.shortcircuit es un interruptor para habilitar la función de lectura local de cortocircuito .
  • dfs.domain.socket.path es  la ruta local del Socket  comunicado entre  Dtanode  DFSClient  .

También asegúrese de que  la ruta local del Socket  se haya creado de antemano (es necesario crear cada nodo del clúster):

[root@hadoop01 ~]# mkdir -p /var/lib/hadoop-hdfs

Nota: La carpeta hadoop -hdfs se crea aquí  , y el dn_socket  en la configuración anterior  lo  crea el propio datanode  , no una carpeta. 

Finalmente, envíe el archivo de configuración a otros nodos y reinicie el clúster HDFS.

1.4.3 Ver registros de Datanode 

En el registro de inicio de         Datanode  , los siguientes registros relacionados muestran que  Unix Domain Socket  está habilitado y confirman que la configuración surte efecto. 

[root@hadoop01 ~]# cd /bigdata/hadoop/server/hadoop-3.2.4/logs/
[root@hadoop01 /bigdata/hadoop/server/hadoop-3.2.4/logs]# tail -100 hadoop-root-datanode-hadoop01.log 

2. Balanceador de carga de bloques HDFS  : Balanceador

2.1 Antecedentes 

        Es posible que los datos HDFS no siempre se distribuyan uniformemente entre los DataNodes. Una causa común es agregar nuevos  DataNodes a un clúster existente . HDFS  proporciona un  programa Balancer  que analiza  la información de ubicación  de bloques  y equilibra los datos entre DataNodes hasta que se  consideran equilibrados .

        El llamado equilibrio significa que la diferencia entre la tasa de utilización de cada  DataNode  ( la relación entre el espacio utilizado de la máquina y la capacidad total de la máquina ) y la tasa de utilización del clúster ( la relación entre el espacio utilizado total de HDFS  la capacidad total del clúster HDFS  ) no excede el porcentaje de umbral dado . Un equilibrador no puede  equilibrar volúmenes individuales (discos) en un único DataNode  .

2.2 Configuración de la línea de comando 

[root@hadoop01 ~]# hdfs balancer --help
Usage: hdfs balancer
	[-policy <policy>]	the balancing policy: datanode or blockpool
	[-threshold <threshold>]	Percentage of disk capacity
	[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]	Excludes the specified datanodes.
	[-include [-f <hosts-file> | <comma-separated list of hosts>]]	Includes only the specified datanodes.
	[-source [-f <hosts-file> | <comma-separated list of hosts>]]	Pick only the specified datanodes as source nodes.
	[-blockpools <comma-separated list of blockpool ids>]	The balancer will only run on blockpools included in this list.
	[-idleiterations <idleiterations>]	Number of consecutive idle iterations (-1 for Infinite) before exit.
	[-runDuringUpgrade]	Whether to run the balancer during an ongoing HDFS upgrade.This is usually not desired since it will not affect used space on over-utilized machines.
  • -threshold  10                     La condición del equilibrio del clúster el umbral de la diferencia de uso del disco entre los nodos de datos , selección de intervalo : 0 ~ 100

  • -política Política de equilibrio del nodo de datos                 , el valor predeterminado es  el nodo de datos. Si  el nodo de datos  está equilibrado , el clúster está equilibrado .

  • -exclude  -f /tmp/ip1.txt      está vacío de forma predeterminada , especifica que esta parte de  ip  no participa en el  equilibrio y -f  especifica que la entrada es un archivo

  • -include  -f /tmp/ip2.txt       está vacío de forma predeterminada , solo permite que esta parte de  ip  participe en  el equilibrio, -f  especifica la entrada como un archivo

  • -idleiteraciones  5                  iteraciones 5

2.3  Cómo ejecutar  Balancer 

2.3.1  Configuración de una cinta de transferencia de datos equilibrada

hdfs dfsadmin -setBalancerBandwidth newbandwidth

        donde nuevo ancho de banda  es la cantidad máxima de ancho de banda de red que cada  DataNode  puede usar durante una operación de equilibrio, en bytes por segundo .

Por ejemplo: hdfs dfsadmin - setBalancerBandwidth 104857600 ( 100M )

2.3.2  ejecutar  balanceador 

Ejecutar con parámetros predeterminados: hdfs balancer

Especifique el umbral a ejecutar: hdfs balancer -threshold 5 El balanceador  se ejecutará al 5 % del umbral  ( predeterminado  10% ) .

        Esto significa que el programa garantizará que el uso del disco en cada  DataNode  no difiera en más del 5 % del uso general en el clúster  . Por ejemplo, si el uso agregado de todos los DataNodes  en el clúster  es el 40 de la capacidad total de almacenamiento en disco del clúster  , el programa garantizará que el uso del disco de  cada DataNode  esté entre el 35 % y  el 45 % de la capacidad de almacenamiento en disco  de ese DataNode  . .

3. Equilibrador de disco: Equilibrador de disco HDFS

3.1 Antecedentes 

        En comparación con las PC personales, los servidores generalmente pueden ampliar la capacidad de almacenamiento de una sola máquina montando varios discos. En Hadoop HDFS  , DataNode  es responsable del almacenamiento del  bloque  de datos final y distribuye los bloques de datos entre los discos de la máquina host. Al escribir un nuevo  bloque  , DataNodes  elegirá  el disco (volumen) del bloque  de acuerdo con la política de selección ( política de operación por turnos o política de espacio libre ) .

  • Estrategia de round robin : distribuye nuevos  bloques  de manera uniforme entre los discos disponibles. Esta política es la predeterminada.
  • Política de espacio libre : esta política escribe datos en los discos que tienen más espacio libre (por porcentaje).

Pero con una estrategia de operación por turnos         en un clúster de larga duración , los DataNodes  a veces llenan sus directorios de almacenamiento (discos / volúmenes) de manera desigual , lo que lleva a situaciones en las que algunos discos están llenos y otros rara vez se usan. Esto puede suceder debido a operaciones intensas de escritura y eliminación, o debido a un reemplazo de disco.

        Además, si utilizamos una estrategia de selección basada en el espacio libre , cada nueva escritura irá al disco vacío recién agregado, dejando otros discos libres durante ese período. Esto creará un cuello de botella en el nuevo disco . Por lo tanto, se necesita un  equilibrio intra-DataNode ( distribución uniforme de bloques de datos dentro de un DataNode  ) para abordar  el sesgo intra-DataNode  (distribución desigual de bloques en el disco), que se produce debido al reemplazo del disco o a escrituras y eliminaciones aleatorias.

        Por lo tanto, en Hadoop 3.0 se introdujo  una herramienta  llamada Disk Balancer  , que se enfoca en distribuir datos dentro de DataNodes  .

3.2  Introducción al equilibrador de discos  HDFS 

        El equilibrador de disco HDFS  es  una herramienta de línea de comandos introducida en Hadoop 3  , que se utiliza para equilibrar  la distribución desigual de datos en DataNodes  entre discos . Preste especial atención aquí, el equilibrador de disco HDFS  es diferente de  HDFS Balancer  :

  • El equilibrador de disco HDFS opera en un DataNode determinado  y mueve bloques de un disco a otro , que son  los datos internos del DataNode  que se equilibran entre diferentes discos;
  • HDFS Balancer equilibra  la distribución entre los nodos DataNode  .

3.3  Función de equilibrador de disco HDFS  

3.3.1  Informe de difusión de datos

        Para medir qué computadoras en el clúster sufren una distribución desigual de los datos , Disk Balancer define la métrica de densidad de datos de volumen  ( métrica de densidad de datos de volumen / disco) la métrica de densidad de datos de nodo (métrica de densidad de datos de nodo) .

  • Densidad de datos de volumen (disco): compare la distribución de datos en diferentes volúmenes en la misma máquina .
  • Densidad de datos del nodo : la comparación se realiza entre diferentes máquinas.

3.3.1.1 Cálculo de la métrica de densidad de datos de volumen (densidad de datos de volumen)

        Un valor positivo para la densidad de datos del volumen  indica que el disco está subutilizado , mientras que un valor negativo indica que el disco está sobreutilizado .

Suponiendo una computadora con cuatro volúmenes / discos : Disco1 , Disco2 , Disco3 , Disco4 , uso de disco individual:

Capacidad total = 200 + 300 + 350 + 500 = 1350 GB

Total utilizado = 100 + 76 + 300 + 475 = 951 GB

Entonces, el almacenamiento ideal en cada volumen / disco sería :

Almacenamiento ideal = Total utilizado ÷ Capacidad total = 951÷1350 = 0,70

Es decir, cada disco debe mantenerse al 70 % de la capacidad de almacenamiento ideal.

Densidad de datos de volumen = Almacenamiento ideal – Proporción utilizada de dfs

Por ejemplo,  la densidad de datos del volumen de Disk1  = 0,70 - 0,50 = 0,20 . Otros y así sucesivamente .

3.3.1.2  Proceso de cálculo de la densidad de datos del nodo

        Densidad de datos del nodo (densidad de datos del nodo) = la suma del valor absoluto de la densidad de datos de todos los volúmenes de densidad de datos (discos ) en el nodo .

Densidad de datos de nodo en el ejemplo anterior =|0,20|+|0,45|+|-0,15|+|-0,24| =1,04

        Un  valor de densidad de datos del nodo  más bajo indica que el nodo de la máquina tiene una mejor escalabilidad, mientras que un valor más alto indica que el nodo tiene una distribución de datos más sesgada.

        Una vez que tenga el volumen Data Density  el nodo Data Density , puede encontrar los nodos donde la distribución de datos en el clúster está sesgada y los discos donde los datos están sesgados paso a paso en la máquina.

3.3.2  Equilibrio de disco

Cuando se designa          un nodo DataNode  para el equilibrio de datos del disco  , primero se puede calcular o leer la densidad de datos del volumen actual  ( densidad de datos del volumen del disco ) . Con esta información, podemos determinar fácilmente qué volúmenes están sobreaprovisionados y cuáles están insuficientemente aprovisionados .

        Para mover datos de un volumen a  otro en DataNode  , el desarrollo de Hadoop  implementa  Disk Balancer basado en el protocolo RPC  .

3.4  Abrir el equilibrador  de disco HDFS 

        HDFS Disk Balancer funciona creando un plan, que es un conjunto de declaraciones que describen cuántos datos se deben mover entre dos discos y luego  ejecutando ese conjunto de declaraciones en los DataNodes. El plan contiene múltiples pasos en movimiento. Cada paso de movimiento en el plan tiene el disco de destino, la dirección del disco de origen. El paso de movimiento también tiene la cantidad de bytes a mover. El plan se ejecuta contra DataNodes  operativos .

De forma predeterminada, la función Disk Balancer          está habilitada en los clústeres de Hadoop  . Al  ajustar el valor del parámetro  dfs.disk.balancer.enabled  en hdfs-site.xml  , elija si desea habilitar el equilibrador de disco en Hadoop  .

3.5  Comandos relacionados con HDFS Disk Balancer  

3.5.1 planificar planificar 

Comando: hdfs diskbalancer -plan <nodo de datos> 

  • -out                                    controla la ubicación de salida del archivo del plan

  • -bandwidth establece                         el ancho de banda máximo para ejecutar Disk Balancer  , el ancho de banda predeterminado es  10 MB/s.

  • -thresholdPercentage          define el valor en el que el disco comienza a participar en operaciones de redistribución o equilibrio de datos . El valor  predeterminado de porcentaje de umbral  es 10 %, lo que significa que el disco sólo se utiliza para operaciones de equilibrio si contiene un 10 % o menos de datos de los almacenados idealmente .

  • -maxerror                            que permite al usuario especificar el número de errores a ignorar para una operación de movimiento entre dos discos antes de cancelar el paso de movimiento .

  • -v Modo           detallado                              .

  • -fs                                         Esta opción especifica el NameNode que se utilizará  . Si no se especifica, Disk  Balancer  utilizará el NameNode predeterminado de la configuración  .

3.5.2  Ejecutar  _ 

Ejemplo: hdfs diskbalancer -ejecutar <ruta del archivo JSON>

El comando de ejecución ejecuta el plan contra el DataNode para el cual se generó el plan.

3.5.3  Consulta de consulta  

Comando: hdfs diskbalancer -query <nodo de datos>

El comando de consulta obtiene el estado actual del equilibrador de disco HDFS del DataNode que ejecuta la programación. 

3.5.4  Cancelar  _ 

Instrucción: hdfs diskbalancer -cancel <ruta del archivo JSON>      

           hdfs diskbalancer - cancelar el nodo ID del plan <nombre de nodo>

El comando cancelar cancela un plan de ejecución. 

3.5.5  Informe  _

Comando: hdfs diskbalancer -fs hdfs://nn_host:8020 -report 

4. Tecnología de codificación de borrado: codificación de borrado 

4.1 Antecedentes: desventajas de la estrategia de copia

        Para proporcionar tolerancia a fallas, HDFS replicará  bloques de archivos en diferentes  DataNodes  de acuerdo con el factor de replicación (factor de replicación) .

        El factor de replicación predeterminado es 3 (tenga en cuenta que aquí  se refiere a  1+2=3 , no a un  3  adicional ), por lo que habrá dos copias adicionales excepto el bloque original. Cada copia utiliza  el 100 % de la sobrecarga de almacenamiento, lo que da como resultado  una sobrecarga de almacenamiento del 200 %. Estas copias también consumen otros recursos, como el ancho de banda de la red .

Cuando el factor de replicación es N  , existen  capacidades de tolerancia a fallas N-1  , pero la eficiencia del almacenamiento es solo  1/N .

4.2  Introducción a la codificación de borrado ( EC ) 

        La tecnología de codificación de borrado (  EC para abreviar) es una tecnología tolerante a errores de codificación. Se utilizó por primera vez en la industria de las comunicaciones y la recuperación de datos en la transmisión de datos. Divide los datos en bloques y luego calcula los datos de verificación, de modo que los datos de cada parte estén correlacionados . Cuando se pierde una parte de los bloques de datos, los bloques de datos perdidos se pueden calcular a través de los bloques de datos restantes y los bloques de verificación .

Después de Hadoop 3.0, se introdujo          la tecnología de codificación de borrado (Erasure Coding ), que puede aumentar la utilización del almacenamiento en más del 50%  y garantizar la confiabilidad de los datos.

4.3  Código Reed-Solomon ( RS ) 

El código Reed-Solomon ( RS ) es un código de borrado de uso común, tiene dos parámetros  m , registrados como  RS(k , m) .

        Un vector compuesto por k bloques de datos se multiplica por una matriz generadora (Generator Matrix ) GT  para obtener un vector de palabra en clave ( codeword ), que consta de  bloques de datos ( d0,d1..d3 ) bloques de verificación ( c0,c1 ). forma.

Si el bloque de datos se pierde,  el bloque de datos perdido se puede recuperar multiplicando la matriz inversa GT por el vector de palabra código.

Por ejemplo, hay tres datos originales de 7 , 8 y 9 , y dos datos de verificación 50 y 122 se calculan mediante la multiplicación de matrices .

        En este momento, los datos originales más los datos de verificación, un total de cinco datos: 7 , 8 , 9 , 50 , 122 , dos se pueden perder a voluntad y luego el algoritmo los recupera.

4.4  Arquitectura Hadoop EC 

Para admitir la codificación de borrado, la arquitectura HDFS  ha sufrido algunos cambios y ajustes. 

  • Extensiones de nodo de nombre

Un archivo HDFS          seccionado  está compuesto lógicamente por  grupos de bloques (grupos de bloques) , y cada grupo de bloques contiene una cierta cantidad de bloques internos. Esto permite la gestión de archivos a nivel de grupo de bloques en lugar de a nivel de bloque.

  • extensión de cliente

Las rutas de lectura y escritura del cliente se han mejorado para procesar múltiples bloques internos dentro de un grupo de bloques en paralelo.

  • Extensión de nodo de datos

Los DataNodes ejecutan una tarea         adicional  ErasureCodingWorker ( ECWorker ) para la recuperación en segundo plano de bloques de codificación de borrado fallidos . El NameNode  detecta el  bloque EC  fallido y luego  elige un  DataNode  para  realizar el trabajo de recuperación.

  • Estrategia de codificación de borrado

        Para adaptarse a cargas de trabajo heterogéneas,  los archivos y directorios en clústeres HDFS  pueden tener diferentes estrategias de codificación de replicación y borrado. Las políticas de codificación de borrado resumen cómo se codifican / decodifican los archivos. De forma predeterminada  , la política RS-6-3-1024k  está habilitada, RS  representa el algoritmo codificador  Reed-Solomon , 6 y representan el número de bloques de datos y bloques de paridad, y 1024k  representa el tamaño de la unidad de división.

El esquema de REPLICACIÓN          predeterminado  también se admite en directorios. Solo se puede configurar en directorios para obligar al directorio a adoptar  un esquema de replicación 3x  y no heredar la política de codificación de borrado de sus antepasados. Esta estrategia permite intercalar directorios de esquemas de replicación 3x con directorios codificados para borrar. La REPLICACIÓN  siempre está habilitada.

        Además, los usuarios también pueden  definir sus propias  políticas EC  a través de archivos XML  . Hay un archivo XML  de política  EC  de muestra  llamado user_ec_policies.xml.template  en el directorio conf  de Hadoop . Los usuarios pueden consultar este archivo.

  • Intel ISA-L

        Intel ISA-L  significa Biblioteca de aceleración de almacenamiento inteligente Intel . ISA-L  es una colección de código abierto de funciones de bajo nivel optimizadas para aplicaciones de almacenamiento. Incluye código de borrado tipo Reed-Solomon  de bloqueo rápido optimizado  para  los conjuntos de instrucciones Intel AVX  AVX2  . Los códigos de borrado HDFS  pueden utilizar  ISA-L  para acelerar los cálculos de codificación y decodificación.

4.5  Método de implementación de codificación  de borrado 

4.5.1  Configuración de clúster y hardware 

El trabajo de codificación y decodificación consume CPU adicional en  clientes HDFS y DataNodes .

        Los archivos codificados por borrado también se distribuyen por todo el bastidor para lograr tolerancia a fallos. Esto significa que al leer y escribir archivos seccionados, la mayoría de las operaciones se realizan en el bastidor. Por tanto, el ancho de banda de la red también es muy importante.

        Para la tolerancia a fallas del bastidor, también es importante tener una cantidad suficiente de bastidores , cada uno de los cuales no contenga más bloques que  el número de bloques de paridad EC  . Número de bastidores = (bloque de datos + bloque de paridad) / bloque de paridad después del redondeo .

        Digamos que para  la estrategia  EC  RS ( 6,3 ), esto significa un mínimo  de 3  bastidores (calculados por ( 6+3 ) /3=3 ), idealmente  o más, para manejar el tiempo de inactividad planificado y no planificado. Para los clústeres con menos bastidores que unidades de paridad, HDFS  no puede mantener la tolerancia a fallos del bastidor, pero seguirá intentando distribuir archivos seccionados entre varios nodos para preservar la tolerancia a fallos a nivel de nodo. Por lo tanto, se recomienda configurar racks con una cantidad similar de  DataNodes  .

4.5.2  Configuración de la política de código de borrado 

        La política de código de borrado se especifica mediante el parámetro  dfs.namenode.ec.system.default.policy  , el valor predeterminado es  RS-6-3-1024k y otras políticas están deshabilitadas de forma predeterminada .

Se puede habilitar un conjunto de políticas mediante  el comando hdfs ec [-enablePolicy -policy <policyName>]  .

4.5.3  Habilitar Intel  ISA-L (Biblioteca de aceleración de almacenamiento inteligente) 

La implementación nativa HDFS  del códec          RS predeterminado  utiliza  la biblioteca Intel ISA-L  para mejorar los cálculos de codificación y decodificación. Para habilitar y utilizar  Intel ISA-L , se requieren tres pasos.

  1. Construya  la biblioteca ISA-L  ;
  2. Construya  Hadoop con  soporte ISA-L  ;
  3. Utilice  -Dbundle.isal para  copiar el contenido del directorio isal.lib  en  el archivo tar  final  . Implemente Hadoop usando  un archivo tar  . Asegúrese de que  ISA-L  esté disponible en  clientes HDFS  DataNodes  .

Software requerido: 

software Versión
Hadoop 3.2.4
uno-l 2.28.0
nombre 2.14.02
Yasm 1.2.0

4.5.3.1 Instalar yasm y nasm  

# 在Hadoop集群所有节点上安装yasm和nasm。
yum install -y yasm
yum install -y nasm

# 注意:isa-l-2.28.0 对 nasm 和 yasm 有版本要求,低版本在安装时会报错。

4.5.3.2  Compilar e instalar isa-l-2.28.0

# 在 Hadoop集群所有节点上编译安装 isa-l-2.28.0。
tar -zxvf isa-l-2.28.0.tar.gz
cd isa-l-2.28.0
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
 
make -f Makefile.unx

# 检查 libisal.so* 是否成功
ll /lib64/libisal.so*
 
############如果有,则跳过##############
############如果没有有,则复制##############
cp bin/libisal.so bin/libisal.so.2 /lib64

4.5.3.3 Comprobar si isa-l está habilitado en Hadoop 

[root@hadoop01 ~]# hadoop checknative
Native library checking:
hadoop:  true /usr/hdp/3.0.0.0-1634/hadoop/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
zstd  :  false
snappy:  true /usr/hdp/3.0.0.0-1634/hadoop/lib/native/libsnappy.so.1
lz4:     true revision:10301
bzip2:   true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
ISA-L:   true /lib64/libisal.so.2     ------------->  Shows that ISA-L is loaded.

4.5.4  Comandos EC  

[root@hadoop01 ~]# hdfs ec
Usage: bin/hdfs ec [COMMAND]
          [-listPolicies]
          [-addPolicies -policyFile <file>]
          [-getPolicy -path <path>]
          [-removePolicy -policy <policy>]
          [-setPolicy -path <path> [-policy <policy>] [-replicate]]
          [-unsetPolicy -path <path>]
          [-listCodecs]
          [-enablePolicy -policy <policy>]
          [-disablePolicy -policy <policy>]
          [-verifyClusterSetup [-policy <policy>...<policy>]]
          [-help <command-name>]

[-setPolicy -path <ruta> [ -policy < política > ] [-replicate ]]

  • Establece la política de codificación de borrado en el directorio en la ruta especificada.

  • ruta : directorio en HDFS  . Este es un parámetro requerido. La configuración de una política solo afecta a los archivos recién creados, no a los archivos existentes.

  • política : la política de codificación de borrado que se utilizará para los archivos de este directorio. La política predeterminada  RS-6-3-1024k  .

  • -replicate aplica el  esquema de REPLICACIÓN  predeterminado en el directorio, lo que obliga al directorio a adoptar  un  esquema de replicación 3x  . replicate -policy <policy>  son parámetros opcionales . No se pueden especificar al mismo tiempo. 

[ -getPolicy -ruta <ruta> ]

Obtenga los detalles de la política de codificación de borrado para el archivo o directorio en la ruta especificada.

[-unsetPolicy -path <ruta> ] Anula la política de codificación de borrado establecida por una llamada anterior a         setPolicy en el  directorio . unsetPolicy  no funciona si  el directorio hereda una política de codificación de borrado de un directorio  ancestral . Cancelar una política en un directorio sin un conjunto de políticas explícito no devolverá un error.
 

[-listPolicies]
        Enumera  todas (habilitar, deshabilitar y eliminar) las políticas de codificación de borrado registradas en HDFS. Sólo las políticas habilitadas son adecuadas para su uso con el comando   setPolicy  .
[-addPolicies -policyFile <archivo> ] Agrega una lista de políticas de codificación de borrado definidas por el usuario. [-listCodecs] Obtenga una lista de códecs y codificadores de codificación de borrado admitidos en el sistema. [-removePolicy -policy < nombreDePolítica > ] Elimina una política de codificación de borrado definida por el usuario. [-enablePolicy -policy < nombreDePolítica > ] Habilitar la política de codificación de borrado. [-disablePolicy -policy < nombreDePolítica > ] Desactiva la política de codificación de borrado .








Supongo que te gusta

Origin blog.csdn.net/weixin_46560589/article/details/132624510
Recomendado
Clasificación