Cómo configurar el clúster de Hadoop con alta disponibilidad HDFS
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 plan de estudios del curso Big Data & Hadoop . El orden en el que se han cubierto los temas en este blog es el siguiente:
- Arquitectura HDFS HA
- 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, la arquitectura HDFS 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ó perder 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 único punto de falla. 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 un 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.
Arquitectura HDFS HA:
Entendamos cómo la arquitectura HDFS HA resolvió este problema crítico de disponibilidad de NameNode:
La arquitectura HA resolvió este problema de disponibilidad de NameNode al permitirnos tener dos NameNodes en una configuración activa / pasiva. Entonces, 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.
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 elegante (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 del 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, y cada uno cree que es el único grupo activo. Para evitar tales escenarios se realiza vallado. El cercado es un proceso para garantizar que solo un NameNode permanezca activo en un momento determinado.
Implementación de Arquitectura HA:
Ahora, ya sabe que en HDFS HA Architecture, 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:
- Uso de nodos de diario de quórum
- Almacenamiento compartido usando NFS
Entendamos estas dos formas de implementación de una en una:
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 llamados JournalNodes . JournalNodes sigue la topología de anillo donde los nodos están conectados entre sí para formar un anillo. JournalNode atiende la solicitud que recibe 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 que haya 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.
- JournalNodes realiza este cercado permitiendo que solo un NameNode sea el escritor a la vez.
- El NameNode en espera 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.
Uso de almacenamiento compartido:
- El StandbyNode y el NameNode activo se mantienen sincronizados entre sí mediante el uso de 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 vallar 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.
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, el cercado es un proceso para garantizar esta propiedad en un clúster.
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:
Conmutación por error 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 en busca de fallas. Zookeeper mantiene una sesión con NameNodes. En caso de falla, la sesión caducará 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:
- Guardián del zoológico
- Controlador Zookeeper Fail Over
- JournalNode NameNode
Los demonios en Standby NameNode son:
- Guardián del zoológico
- Controlador Zookeeper Fail Over
- JournalNode
- NameNode
Los demonios en DataNode son:
- Guardián del zoológico
- JournalNode
- DataNode
Si desea dominar HDFS y Hadoop, consulte el curso de Big Data y Hadoop especialmente seleccionado por Pentademy. 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.
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 el guardián del zoológico-3.4.6.tar.gz
Comando: tar –xvf zookeeper-3.4.6.tar.gz
Descargue el tar binario estable de Hadoop desde el sitio de Apache Hadoop.
Comando: 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.
Comando: tar –xvf hadoop-2.6.0.tar.gz
Untar hadoop binario.
Agregue Hadoop, Zookeeper y rutas al archivo .bashrc.
Abra el archivo .bashrc.
Comando: sudo gedit ~ / .bashrc
Agregue las siguientes rutas:
< export HADOOP_HOME => < exportar HADOOP_MAPRED_HOME = $ HADOOP_HOME > < exportar HADOOP_COMMON_HOME = $ HADOOP_HOME > < exportar HADOOP_HDFS_HOME = $ HADOOP_HOME > < exportar YARN_HOME = $ HADOOP_HOME > < exportar HADOOP_CONF_DIR = $ HADOOP_HOME / etc / hadoop > < YARN_CONF_DIR = $ HADOOP_HOME / etc / hadoop > < export JAVA_HOME = > < export ZOOKEEPER_HOME = > < export PATH = $ PATH: $ 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.
Comando: 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 los nodos de nombre a todos los nodos.
En Active Namenode, copie id_rsa.pub usando el comando cat.
Comando: gato ~ / .ssh / id_rsa.pub >> ~ / .ssh / claves_autorizadas
Copie la clave ssh de Namenode en sus claves autorizadas.
Copie la clave pública de NameNode en todos los nodos mediante el comando ssh-copy-id .
Comando: ssh-copy-id –i .ssh / id_rsa.pub [email protected]
Copie la clave de namenode en Standby NameNode.
Copie la clave pública de NameNode en el nodo de datos.
Comando:ssh-copy-id –i .ssh / id_rsa.pub [email protected]
Copie la clave pública de Namenode en el nodo de datos.
Reinicie el servicio sshd en todos los nodos.
Comando: sudo service sshd restart (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 Active Name 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.
<propiedad>> <nombre> dfs.namenode.name.dir > <value> / home / Pentademy / HA / data / namenode > < /property>> <propiedad>> <nombre> dfs.replication > <valor> 1 > </property>> <propiedad>> <nombre> dfs.permissions > <valor> falso > </property>> <propiedad>> <nombre> dfs.nameservices > <valor> ha-cluster > </property>> <propiedad>> <nombre> dfs.ha.namenodes.ha-cluster > <valor> nn1, nn2 > </property>> <propiedad>> <nombre> dfs.namenode.rpc-address.ha-cluster.nn1 > <value> nn1.cluster.com:9000 > </property>> <propiedad>> <nombre> dfs.namenode.rpc-address.ha-cluster.nn2 > <value> nn2.cluster.com:9000 > </property>> <propiedad>> <nombre> dfs.namenode.http-address.ha-cluster.nn1 > value> nn1.cluster.com:50070 > </property>> <propiedad>> <nombre> dfs.namenode.http-address.ha-cluster.nn2 > <value> nn2.cluster.com:50070 > </property>> <propiedad>> <nombre> dfs.namenode.shared.edits.dir > <value> qjournal: //nn1.cluster.com: 8485; nn2.cluster.com: 8485; dn1.cluster.com: 8485 / ha-cluster > </property>> <propiedad>> <nombre> dfs.client.failover.proxy.provider.ha-cluster > <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider /value>> < /property>> < propiedad>> < nombre> dfs.ha.automatic-failover.enabled > < value> verdadero > < /property>> < propiedad>> < nombre> ha.zookeeper.quorum > <valor>nn1.cluster.com:2181,nn2.cluster.com:2181,dn1.cluster.com:2181> < /property>> < propiedad>> < nombre> dfs.ha.fencing.methods > < value> sshfence > < /property>> < propiedad>> < nombre> dfs.ha.fencing.ssh.archivos-clave-privada > < value> /home/Pentademy/.ssh/id_rsa > < /property>>
Cambie el directorio al directorio conf de zookeeper.
Comando: 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.
Comando : 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.
Comando : mkdir
Cree un directorio para almacenar los datos del cuidador del zoológico.
Abra el archivo zoo.cfg.
Comando: 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) utilizando el comando scp.
Comando: scp –r
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é el directorio de nodo de datos para almacenar los bloques.
Cree el directorio 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: Conserve todas las propiedades que se copian del nodo de nombre activo; agregue dfs.datanode.data.dir una propiedad de extracción en namenode.
propiedad>
nombre> dfs.datanode.data.dir
value> / home / Pentademy / HA / data / datanode
/property>
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.
Comando: 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.
Comando : hadoop-daemon.sh iniciar journalnode
Inicie el Journalnode.
Cuando ingrese el comando jps, verá el demonio JournalNode en todos los nodos.
Formatee el nodo de nombre activo.
Comando: HDFS namenode -format
Formatee el nodo de nombre activo.
Inicie el demonio de Namenode en el nodo de nombre activo.
Comando: hadoop-daemon.sh start namenode
Inicie Namenode.
Copie los metadatos de HDFS del nodo de nombre activo al nodo de nombre en espera.
Comando: HDFS namenode -bootstrapStandby
Copie los metadatos de 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 los detalles del nodo de nombre activo.
Una vez que los metadatos se copian desde el nodo de nombre activo al nodo de nombre en espera, aparecerá 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.
Comando: hadoop-daemon.sh start namenode
Ahora inicie el servicio Zookeeper en los tres nodos.
Comando: zkServer.sh start (Ejecute este comando en todos los nodos)
En el nodo de nombre activo:
Inicie zookeeper en Active NameNode.
En modo de espera Namenode:
Inicie zookeeper en el NameNode en espera.
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.
Comando: 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.
Comando: HDFS zkfc –formatZK
Formatee ZKFC.
Inicie el ZKFC en el nodo de nombre activo.
Comando: 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 de nombre en espera.
Comando: hdfs zkfc –formatZK
Inicie el ZKFC en el nodo de nombre en espera.
Comando : 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.
Comando: 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.
< Dirección IP del nodo de nombre activo > : 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.
Detalles del nodo de nombre.
Estado de NameNode.
Enhorabuena, 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 formación de Hadoop impartida por Pentademy, 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 Pentademy 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ónelo en la sección de comentarios y nos comunicaremos con usted.
ventana._LQ_ = ventana._LQ_ || {};
lqQuizModal (ventana, documento, {quizId: 'XAIVp8 ′, baseUrl:' https: //quiz.leadquizzes.com/',trigger: 'salir'}, _LQ_);
Comentarios
Los comentarios han sido cerrados