Cómo configurar el clúster de Hadoop con alta disponibilidad HDFS



Este blog proporciona una descripción general de la arquitectura de alta disponibilidad de HDFS y cómo instalar y configurar un clúster de alta disponibilidad de HDFS en pasos simples.

Arquitectura de clúster de alta disponibilidad HDFS 2.x

En este blog, voy a hablar sobre la arquitectura de clúster de alta disponibilidad HDFS 2.x y el procedimiento para configurar un clúster de alta disponibilidad HDFS.Esta es una parte importante del . El orden en el que se han tratado los temas en este blog es el siguiente:

  • HDFS HA Architecture
    • Introducción
    • Disponibilidad de NameNode
    • Arquitectura de HA
    • Implementación de HA (JournalNode y almacenamiento compartido)
  • ¿Cómo configurar HA (Quorum Journal Nodes) en un clúster de Hadoop?

Introducción:

El concepto de clúster de alta disponibilidad se introdujo en Hadoop 2.x para resolver el problema del punto único de falla en Hadoop 1.x. Como saben por mi blog anterior, el sigue la topología maestro / esclavo donde NameNode actúa como un demonio maestro y es responsable de administrar otros nodos esclavos llamados DataNodes. Este único Master Daemon o NameNode se convierte en un cuello de botella. Aunque, la introducción de Secondary NameNode nos impidió la pérdida de datos y descargar parte de la carga del NameNode, pero no resolvió el problema de disponibilidad del NameNode.





Disponibilidad de NameNode:

Si considera la configuración estándar del clúster HDFS, NameNode se convierte en un punto único de fallo . Sucede porque en el momento en que el NameNode deja de estar disponible, todo el clúster deja de estar disponible hasta que alguien reinicia el NameNode o trae uno nuevo.

Las razones de la indisponibilidad de NameNode pueden ser:



  • Un evento planificado como el trabajo de mantenimiento tiene una actualización de software o hardware.
  • También puede deberse a un evento no planificado en el que NameNode se bloquea debido a algunas razones.

En cualquiera de los casos anteriores, tenemos un tiempo de inactividad en el que no podemos usar el clúster HDFS, lo que se convierte en un desafío.

HDFS HA Architecture:

Entendamos cómo la arquitectura HDFS HA ​​resolvió este problema crítico de disponibilidad de NameNode:

def __init __ (auto) python

La arquitectura HA resolvió este problema de disponibilidad de NameNode al permitirnos tener dos NameNodes en una configuración activa / pasiva. Por lo tanto, tenemos dos NameNodes en ejecución al mismo tiempo en un clúster de alta disponibilidad:



  • Nodo de nombre activo
  • Nodo de nombre en espera / pasivo.

Arquitectura HDFS HA ​​- Clúster de alta disponibilidad - Edureka

Si un NameNode deja de funcionar, el otro NameNode puede asumir la responsabilidad y, por lo tanto, reducir el tiempo de inactividad del clúster. El NameNode en espera sirve como un NameNode de respaldo (a diferencia del NameNode secundario) que incorpora capacidades de conmutación por error al clúster de Hadoop. Por lo tanto, con StandbyNode, podemos tener una conmutación por error automática cada vez que un NameNode falla (evento no planificado) o podemos tener una conmutación por error ordenada (iniciada manualmente) durante el período de mantenimiento.

Hay dos problemas para mantener la coherencia en el clúster de alta disponibilidad de HDFS:

  • El NameNode activo y en espera siempre deben estar sincronizados entre sí, es decir, deben tener los mismos metadatos. Esto nos permitirá restaurar el clúster de Hadoop al mismo estado de espacio de nombres en el que se bloqueó y, por lo tanto, nos proporcionará una conmutación por error rápida.
  • Debe haber solo un NameNode activo a la vez porque dos NameNode activos conducirán a la corrupción de los datos. Este tipo de escenario se denomina escenario de cerebro dividido en el que un grupo se divide en un grupo más pequeño, cada uno de los cuales cree que es el único grupo activo. Para evitar tales escenarios se realiza vallado. La cerca es un proceso para garantizar que solo un NameNode permanezca activo en un momento determinado.

Implementación de la arquitectura HA:

Ahora, ya sabe que en la arquitectura HDFS HA, tenemos dos NameNodes ejecutándose al mismo tiempo. Por lo tanto, podemos implementar la configuración de NameNode activo y en espera de las siguientes dos maneras:

  1. Uso de nodos de diario de quórum
  2. Almacenamiento compartido usando NFS

Entendamos estas dos formas de implementación tomando una a la vez:

1. Uso de nodos de diario de quórum:

  • El NameNode en espera y el NameNode activo se mantienen sincronizados entre sí a través de un grupo separado de nodos o demonios, llamado JournalNodes .JournalNodes sigue la topología de anillo en la que los nodos están conectados entre sí para formar un anillo.El JournalNode atiende la solicitud que le llega y copia la información en otros nodos del anillo..Esto proporciona tolerancia a fallos en caso de fallo de JournalNode.
  • El NameNode activo es responsable de actualizar los EditLogs (información de metadatos) presentes en los JournalNodes.
  • StandbyNode lee los cambios realizados en EditLogs en JournalNode y los aplica a su propio espacio de nombres de manera constante.
  • Durante la conmutación por error, StandbyNode se asegura de haber actualizado su información de metadatos de los JournalNodes antes de convertirse en el nuevo Active NameNode. Esto hace que el estado actual del espacio de nombres esté sincronizado con el estado antes de la conmutación por error.
  • Las direcciones IP de ambos NameNodes están disponibles para todos los DataNodes y envían sus latidos y bloquean la información de ubicación a ambos NameNode. Esto proporciona una conmutación por error rápida (menos tiempo de inactividad), ya que StandbyNode tiene información actualizada sobre la ubicación del bloque en el clúster.

Cercado de NameNode:

Ahora, como se discutió anteriormente, es muy importante asegurarse de que solo haya un NameNode activo a la vez. Por lo tanto, la cerca es un proceso para asegurar esta propiedad en un clúster.

  • JournalNodes realiza este cercado permitiendo que solo un NameNode sea el escritor a la vez.
  • El Standby NameNode asume la responsabilidad de escribir en los JournalNodes y prohíbe que cualquier otro NameNode permanezca activo.
  • Finalmente, el nuevo Active NameNode puede realizar sus actividades de forma segura.

2. Uso de almacenamiento compartido:

  • El StandbyNode y el NameNode activo se mantienen sincronizados entre sí mediante un dispositivo de almacenamiento compartido .El NameNode activo registra el registro de cualquier modificación realizada en su espacio de nombres en un EditLog presente en este almacenamiento compartido.StandbyNode lee los cambios realizados en EditLogs en este almacenamiento compartido y los aplica a su propio espacio de nombres.
  • Ahora, en caso de conmutación por error, StandbyNode actualiza su información de metadatos utilizando los EditLogs en el almacenamiento compartido al principio. Luego, asume la responsabilidad del Active NameNode. Esto hace que el estado actual del espacio de nombres esté sincronizado con el estado antes de la conmutación por error.
  • El administrador debe configurar al menos un método de cercado para evitar un escenario de cerebro dividido.
  • El sistema puede emplear una variedad de mecanismos de vallado. Puede incluir la eliminación del proceso de NameNode y la revocación de su acceso al directorio de almacenamiento compartido.
  • Como último recurso, podemos cercar el NameNode previamente activo con una técnica conocida como STONITH, o “disparar al otro nodo en la cabeza”. STONITH utiliza una unidad de distribución de energía especializada para apagar por la fuerza la máquina NameNode.

Conmutación por error automática:

La conmutación por error es un procedimiento mediante el cual un sistema transfiere automáticamente el control al sistema secundario cuando detecta una falla o falla. Hay dos tipos de conmutación por error:

Failover elegante: En este caso, iniciamos manualmente la conmutación por error para el mantenimiento de rutina.

Conmutación por error automática: En este caso, la conmutación por error se inicia automáticamente en caso de falla de NameNode (evento no planificado).

Apache Zookeeper es un servicio que proporciona la capacidad de conmutación por error automática en el clúster de alta disponibilidad HDFS. Mantiene pequeñas cantidades de datos de coordinación, informa a los clientes de los cambios en esos datos y monitorea a los clientes para detectar fallas. Zookeeper mantiene una sesión con NameNodes. En caso de falla, la sesión expirará y el Zookeeper informará a otros NameNodes para que inicien el proceso de conmutación por error. En caso de falla de NameNode, otro NameNode pasivo puede bloquear en Zookeeper indicando que quiere convertirse en el próximo NameNode activo.

ZookeerFailoverController (ZKFC) es un cliente de Zookeeper que también supervisa y gestiona el estado de NameNode. Cada uno de los NameNode también ejecuta un ZKFC. ZKFC es responsable de monitorear el estado de los NameNodes periódicamente.

Ahora que ha entendido qué es la alta disponibilidad en un clúster de Hadoop, es hora de configurarlo. Para configurar la alta disponibilidad en el clúster de Hadoop, debe usar Zookeeper en todos los nodos.

Los demonios en Active NameNode son:

  • Zookeeper
  • Controlador Zookeeper Fail Over
  • JournalNode
  • NameNode

Los demonios en Standby NameNode son:

  • Zookeeper
  • Controlador Zookeeper Fail Over
  • JournalNode
  • NameNode

Los demonios en DataNode son:

  • Zookeeper
  • JournalNode
  • DataNode

Si desea dominar HDFS y Hadoop, consulte el curso de Big Data y Hadoop especialmente seleccionado por Edureka. Haga clic en el botón de abajo para comenzar.

Configuración y configuración del clúster de alta disponibilidad en Hadoop:

Primero debe configurar Java y los nombres de host de cada nodo.

Máquina virtual dirección IP Nombre de host
Nodo de nombre activo192.168.1.81nn1.cluster.com o nn1
Standby NameNode192.168.1.58nn2.cluster.com o nn2
DataNode192.168.1.82dn1.cluster.com o dn1

Descargue el archivo tar binario de Hadoop y Zookeeper, extraiga los archivos para editar los archivos de configuración.

Comando: wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

Untar the zookeeper-3.4.6.tar.gz

Mando : tar –xvf zookeeper-3.4.6.tar.gz

Descargue el tar binario estable de Hadoop desde el sitio de Apache Hadoop.

Mando : wget https://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz

Extrae la bola de alquitrán de Hadoop.

Mando : tar –xvf hadoop-2.6.0.tar.gz

Untar hadoop binary.

Agregue Hadoop, Zookeeper y rutas al archivo .bashrc.

Abra el archivo .bashrc.

Mando : sudo gedit ~ / .bashrc

Agregue las siguientes rutas:

exportación HADOOP_HOME = exportación HADOOP_MAPRED_HOME = $ HADOOP_HOME exportación HADOOP_COMMON_HOME = $ HADOOP_HOME exportación HADOOP_HDFS_HOME = $ HADOOP_HOME exportación YARN_HOME = $ HADOOP_HOME exportación HADOOP_CONF_DIR = $ HADOOP_HOME / etc / hadoop exportación YARN_CONF_DIR = $ HADOOP_HOME / etc / exportación hadoop JAVA_HOME = exportación ZOOKEEPER_HOME = export PATH = $ RUTA: $ JAVA_HOME / bin: $ HADOOP_HOME / bin: $ HADOOP_HOME / sbin: $ ZOOKEEPER_HOME / bin

Edite el archivo .bashrc.

Habilite SSH en todo el nodo.

Genere la clave SSH en todos los nodos.

Mando : ssh-keygen –t rsa (este paso en todos los nodos)

Configure la clave SSH en todos los nodos.

No dé ninguna ruta al archivo Enter para guardar la clave y no dé ninguna frase de contraseña. Presione el botón enter.

Genere el proceso de clave ssh en todos los nodos.

Una vez que se genera la clave ssh, obtendrá la clave pública y la clave privada.

El directorio de claves .ssh debe contener el permiso 700 y todas las claves dentro del directorio .ssh deben contener los permisos 600.

Cambie el permiso del directorio SSH.

Cambie el directorio a .ssh y cambie el permiso de los archivos a 600

Cambiar el permiso de la clave pública y privada.

Tienes que copiar la clave pública ssh de Name nodes en todos los nodos.

En Active Namenode, copie id_rsa.pub usando el comando cat.

Mando : gato ~ / .ssh / id_rsa.pub >> ~ / .ssh / claves_autorizadas

Copie la clave ssh de Namenode en sus claves autorizadas.

Copie la clave pública NameNode a todos los nodos usando ssh-copy-id mando.

Mando : ssh-copy-id –i .ssh / id_rsa.pub edureka@nn2.cluster.com

Copie la clave de propósito en Standby NameNode.

diferencia entre css y css3

Copie la clave pública de NameNode en el nodo de datos.

Mando : ssh-copy-id –i .ssh / id_rsa.pub edureka@dn1.cluster.com

Copie la clave pública de Namenode en el nodo de datos.

Reinicie el servicio sshd en todos los nodos.

Mando : reinicio del sshd del servicio sudo (hacer en todos los nodos)

Reinicie el servicio SSH.

Ahora puede iniciar sesión en cualquier nodo desde Namenode sin ninguna autenticación.

Abra el archivo core-site.xml desde el nodo Nombre activo y agregue las siguientes propiedades.

Edite core-site.xml desde Active namenode

Abra el archivo hdfs-site.xml en Active Namenode. Agregue las propiedades siguientes.

dfs.namenode.name.dir / home / edureka / HA / data / namenode dfs.replication 1 dfs.permissions false dfs.nameservices ha-cluster dfs.ha.namenodes.ha-cluster nn1, nn2 dfs.namenode.rpc-address .ha-cluster.nn1 nn1.cluster.com:9000 dfs.namenode.rpc-address.ha-cluster.nn2 nn2.cluster.com:9000 dfs.namenode.http-address.ha-cluster.nn1 nn1.cluster. com: 50070 dfs.namenode.http-address.ha-cluster.nn2 nn2.cluster.com:50070 dfs.namenode.shared.edits.dir qjournal: //nn1.cluster.com: 8485nn2.cluster.com: 8485dn1. cluster.com:8485/ha-cluster dfs.client.failover.proxy.provider.ha-cluster org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider dfs.ha.automatic-failover.enabled true ha.zookeeper .quorum nn1.cluster.com:2181,nn2.cluster.com:2181,dn1.cluster.com:2181 dfs.ha.fencing.methods sshfence dfs.ha.fencing.ssh.private-key-files / home / edureka /.ssh/id_rsa

Cambie el directorio al directorio conf del guardián del zoológico.

Mando : cd zookeeper-3.4.6 / conf

Directorio de configuración de Zookeeper.

En un directorio conf tiene el archivo zoo_sample.cfg, cree el zoo.cfg usando el archivo zoo_sample.cfg.

Mando : cp zoo_sample.cfg zoo.cfg

Cree el archivo zoo.cfg.

Cree el directorio en cualquier ubicación y utilice este directorio para almacenar los datos del cuidador del zoológico.

Mando : mkdir

Cree un directorio para almacenar los datos del cuidador del zoológico.

Abra el archivo zoo.cfg.

Mando : gedit zoo.cfg

Agregue la ruta del directorio que se creó en el paso anterior a la propiedad dataDir y agregue los detalles a continuación con respecto al nodo restante, en el archivo zoo.cfg.

Servidor.1 = nn1.cluster.com: 2888: 3888

Servidor.2 = nn2.cluster.com: 2888: 3888

Servidor.3 = dn1.cluster.com: 2888: 3888

Edite el archivo zoo.cfg.

Ahora copie los directorios Java y Hadoop-2.6.0, zookeeper-3.4.6 y el archivo .bashrc en todos los nodos (nodo de nombre en espera, nodo de datos) usando el comando scp.

Mando : scp –r edureka @:

Copie el archivo Hadoop, Zookeeper y .bashrc en todos los nodos.

De manera similar, copie el archivo .bashrc y el directorio zookeeper en todos los nodos y cambie las variables de entorno en cada uno de acuerdo con el nodo respectivo.

En un nodo de datos, cree cualquier directorio donde necesite almacenar los bloques HDFS.

En un nodo de datos, debe agregar las propiedades dfs.datanode.data.dir.

En mi caso creé nodo de datos directorio para almacenar los bloques.

Cree el directorio de Datanode.

Cambie el permiso al directorio del nodo de datos.

Cambiar el permiso del directorio de Datanode.

Abra el archivo HDFS-site.xml, agregue esta ruta del directorio Datanode en la propiedad dfs.datanode.data.dir.

Nota: Mantenga todas las propiedades copiadas del nodo de nombre activo y agregue dfs.datanode.data.dir una propiedad de extracción en el nodo de nombre.

dfs.datanode.data.dir /home/edureka/HA/data/datanode

En Active namenode, cambie el directorio donde desea almacenar el archivo de configuración del zookeeper (ruta de la propiedad dataDir).

Cree el archivo myid dentro del directorio y agregue el número 1 al archivo y guarde el archivo.

Mando : vi myid

Cree el archivo myid.

En un namenode en espera, cambie el directorio donde desea almacenar el archivo de configuración del guardián del zoológico (ruta de la propiedad dataDir).

Cree el archivo myid dentro del directorio y agregue el número 2 al archivo y guarde el archivo.

En un nodo de datos, cambie el directorio donde desea almacenar el archivo de configuración del guardián del zoológico (ruta de la propiedad dataDir).

Cree el archivo myid dentro del directorio y agregue el número 3 al archivo y guarde el archivo.

Inicie el Journalnode en los tres nodos.

Mando : hadoop-daemon.sh iniciar journalnode

Inicie el Journalnode.

Cuando ingrese el comando jps, verá el demonio JournalNode en todos los nodos.

Formatee elPropósito activo.

Mando : Formato previsto para HDFS

Formato de NameNode activo.

Inicie el demonio Namenode y el Namedode activo.

Mando : propósito de inicio de hadoop-daemon.sh

Inicie Namenode.

Copie los metadatos HDFS del nodo de nombre activo al nodo de nombre en espera.

Mando : HDFS previsto -bootstrapStandby

Copie los metadatos HDFS del nodo de nombre activo al nodo de nombre en espera.

Una vez que ejecute este comando, obtendrá la información de qué nodo y ubicación se están copiando los metadatos y si se está copiando correctamente o no.

Información de detalles del propósito activo.

Una vez que los metadatos se copian desde el nodo de nombre activo al nodo de nombre en espera, obtendrá el mensaje que se muestra a continuación en la captura de pantalla.

Información sobre HDFS en el nodo de nombre en espera.

Inicie el demonio namenode en la máquina namenode en espera.

Mando : propósito de inicio de hadoop-daemon.sh

Ahora inicie el servicio Zookeeper en los tres nodos.

Mando : zkServer.sh start (Ejecute este comando en todos los nodos)

En propósito activo:

Inicie zookeeper en Active NameNode.

En modo de espera Namenode:

Inicie zookeeper en el NameNode en espera.

c ++ ordenar matriz de ints

En el nodo de datos:

Inicie zookeeper en DataNode.

Después de ejecutar el servidor Zookeeper, ingrese el comando JPS. En todos los nodos verá el servicio QuorumPeerMain.

Inicie el demonio del nodo de datos en la máquina del nodo de datos.

Mando : hadoop-daemon.sh iniciar datanode

Inicie el controlador de conmutación por error de Zookeeper en el nodo de nombre activo y el nodo de nombre en espera.

Formatee el controlador de conmutación por error del guardián del zoológico en el nodo de nombre activo.

Mando: HDFS zkfc –formatZK

Formatee ZKFC.

Inicie el ZKFC en el nodo de nombre activo.

Mando : hadoop-daemon.sh iniciar zkfc

Ingrese el comando jps para verificar los demonios DFSZkFailoverController.

Inicie ZKFC.

Formatee el controlador de conmutación por error del guardián del zoológico en el nodo Nombre en espera.

Mando : hdfs zkfc –formatZK

Inicie ZKFC en el nodo de nombre en espera.

Mando : hadoop-daemon.sh iniciar zkfc

Ingrese el comando jps para verificar los demonios DFSZkFailoverController.

Ahora verifique el estado de cada Namenode, qué nodo está activo o qué nodo está en espera usando el siguiente comando.

Mando : hdfs haadmin –getServiceState nn1

Verifique el estado de cada NameNode.

Ahora verifique el estado de cada Namenode usando el navegador web.

Abra el navegador web e ingrese la siguiente URL.

:50070

Mostrará si el nombre del nodo está activo o en espera.

Active NameNode.

Abra los detalles del nodo de otro nombre utilizando el navegador web.

Standby NameNode.

En el nodo de nombre activo, elimine el demonio de nodo de nombre para cambiar el nodo de nombre en espera a nodo de nombre activo.

Ingrese jps en Active namenode y elimine el demonio.

Mando: sudo kill -9

ID de proceso de los demonios.

El ID de proceso de Namenode es 7606, elimine el nombre de nodo.

Mando : Sudo kill -9 7606

Mata el proceso de Name Node

Abra los dos nodos a través del navegador web y verifique el estado.

Detalles de Namenode.

Estado de NameNode.

Felicitaciones, ha configurado correctamente un clúster de alta disponibilidad HDFS en Hadoop.

Ahora que ha entendido la arquitectura de clúster de alta disponibilidad de Hadoop, consulte la por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso de formación de certificación de Edureka Big Data Hadoop ayuda a los alumnos a convertirse en expertos en HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume y Sqoop utilizando casos de uso en tiempo real en el dominio de comercio minorista, redes sociales, aviación, turismo y finanzas.

Tienes una pregunta para nosotros? Menciónalo en la sección de comentarios y nos comunicaremos contigo.

ventana._LQ_ = ventana._LQ_ || {}

lqQuizModal (ventana, documento, {quizId: ’XAIVp8 ′, baseUrl:’ https: //quiz.leadquizzes.com/’,trigger: ’exit’}, _LQ_)