Comment configurer un cluster Hadoop avec la haute disponibilité HDFS



Ce blog fournit une vue d'ensemble de l'architecture HDFS High Availability et explique comment installer et configurer un cluster HDFS High Availability en quelques étapes simples.

Architecture de cluster haute disponibilité HDFS 2.x

Dans ce blog, je vais parler de l'architecture de cluster haute disponibilité HDFS 2.x et de la procédure de configuration d'un cluster haute disponibilité HDFS.C'est une partie importante de la . L'ordre dans lequel les sujets ont été traités dans ce blog sont les suivants:

  • Architecture HDFS HA
    • introduction
    • Disponibilité de NameNode
    • Architecture de HA
    • Implémentation de HA (JournalNode et stockage partagé)
  • Comment configurer HA (Quorum Journal Nodes) dans un cluster Hadoop?

Introduction:

Le concept de cluster haute disponibilité a été introduit dans Hadoop 2.x pour résoudre le problème de point de défaillance unique dans Hadoop 1.x. Comme vous le savez d'après mon blog précédent, le suit la topologie maître / esclave où NameNode agit comme un démon maître et est responsable de la gestion des autres nœuds esclaves appelés DataNodes. Ce seul démon maître ou NameNode devient un goulot d'étranglement. Bien que l'introduction du NameNode secondaire nous ait empêché de perdre des données et de décharger une partie du fardeau du NameNode, cela n'a pas résolu le problème de disponibilité du NameNode.





Disponibilité de NameNode:

Si vous considérez la configuration standard du cluster HDFS, le NameNode devient un point de défaillance unique . Cela se produit parce qu'au moment où le NameNode devient indisponible, l'ensemble du cluster devient indisponible jusqu'à ce que quelqu'un redémarre le NameNode ou en apporte un nouveau.

Les raisons de l'indisponibilité de NameNode peuvent être:



  • Un événement planifié comme des travaux de maintenance tels que la mise à niveau du logiciel ou du matériel.
  • Cela peut également être dû à un événement imprévu où le NameNode se bloque pour certaines raisons.

Dans l'un ou l'autre des cas ci-dessus, nous avons un temps d'arrêt où nous ne pouvons pas utiliser le cluster HDFS, ce qui devient un défi.

Architecture HDFS HA:

Comprenons comment l'architecture HDFS HA ​​a résolu ce problème critique de disponibilité de NameNode:

L'architecture HA a résolu ce problème de disponibilité de NameNode en nous permettant d'avoir deux NameNodes dans une configuration active / passive. Nous avons donc deux NameNodes en cours d'exécution en même temps dans un cluster à haute disponibilité:



  • Nœud de nom actif
  • Nœud de nom en veille / passif.

Architecture HDFS HA ​​- Cluster haute disponibilité - Edureka

Si un NameNode tombe en panne, l'autre NameNode peut prendre en charge la responsabilité et, par conséquent, réduire le temps d'arrêt du cluster. Le NameNode de secours sert à un NameNode de sauvegarde (contrairement au NameNode secondaire) qui incorporent des capacités de basculement vers le cluster Hadoop. Par conséquent, avec le StandbyNode, nous pouvons avoir un basculement automatique chaque fois qu'un NameNode se bloque (événement non planifié) ou nous pouvons avoir un basculement progressif (lancé manuellement) pendant la période de maintenance.

Le maintien de la cohérence dans le cluster HDFS High Availability pose deux problèmes:

  • Le NameNode actif et en veille doit toujours être synchronisé l'un avec l'autre, c'est-à-dire qu'ils doivent avoir les mêmes métadonnées. Cela nous permettra de restaurer le cluster Hadoop dans le même état d'espace de noms où il s'est écrasé et, par conséquent, nous fournira un basculement rapide.
  • Il ne doit y avoir qu'un seul NameNode actif à la fois car deux NameNode actifs entraîneront une corruption des données. Ce type de scénario est qualifié de scénario fractionné dans lequel un cluster est divisé en cluster plus petit, chacun estimant qu'il s'agit du seul cluster actif. Pour éviter de tels scénarios, une clôture est effectuée. La clôture est un processus qui garantit qu'un seul NameNode reste actif à un moment donné.

Implémentation de l'architecture HA:

Maintenant, vous savez que dans l'architecture HDFS HA, nous avons deux NameNodes exécutés en même temps. Ainsi, nous pouvons implémenter la configuration de NameNode actif et en veille de deux manières:

  1. Utilisation des nœuds de journal Quorum
  2. Stockage partagé avec NFS

Comprenons ces deux modes de mise en œuvre en prenant un à la fois:

1. Utilisation des nœuds de journal Quorum:

  • Le NameNode de secours et le NameNode actif restent synchronisés l'un avec l'autre via un groupe distinct de nœuds ou de démons appelés JournalNodes .Le JournalNodes suit la topologie en anneau où les nœuds sont connectés les uns aux autres pour former un anneau.Le JournalNode sert la demande qui lui est adressée et copie les informations dans d'autres nœuds de l'anneau.Cela offre une tolérance aux pannes en cas de défaillance du JournalNode.
  • Le NameNode actif est responsable de la mise à jour des EditLogs (informations de métadonnées) présents dans les JournalNodes.
  • Le StandbyNode lit les modifications apportées aux EditLogs dans le JournalNode et l'applique à son propre espace de noms de manière constante.
  • Pendant le basculement, le StandbyNode s'assure qu'il a mis à jour ses informations de métadonnées à partir des JournalNodes avant de devenir le nouveau Active NameNode. Cela synchronise l'état actuel de l'espace de noms avec l'état avant le basculement.
  • Les adresses IP des deux NameNodes sont disponibles pour tous les DataNodes et envoient leurs pulsations et les informations d'emplacement de bloc aux deux NameNode. Cela fournit un basculement rapide (moins de temps d'arrêt) car le StandbyNode dispose d'informations mises à jour sur l'emplacement du bloc dans le cluster.

Clôture du NameNode:

Maintenant, comme indiqué précédemment, il est très important de s'assurer qu'il n'y a qu'un seul nœud de nom actif à la fois. Ainsi, l'isolement est un processus pour garantir cette propriété même dans un cluster.

  • Le JournalNodes effectue cette clôture en n'autorisant qu'un seul NameNode à être l'auteur à la fois.
  • Le Standby NameNode prend en charge la responsabilité d'écrire dans les JournalNodes et interdit à tout autre NameNode de rester actif.
  • Enfin, le nouveau Active NameNode peut effectuer ses activités en toute sécurité.

2. Utilisation du stockage partagé:

  • Le StandbyNode et le NameNode actif restent synchronisés l'un avec l'autre en utilisant un périphérique de stockage partagé .Le NameNode actif enregistre l'enregistrement de toute modification effectuée dans son espace de noms dans un EditLog présent dans ce stockage partagé.Le StandbyNode lit les modifications apportées aux EditLogs dans ce stockage partagé et les applique à son propre espace de noms.
  • Désormais, en cas de basculement, le StandbyNode met d'abord à jour ses informations de métadonnées à l'aide des EditLogs dans le stockage partagé. Ensuite, il prend la responsabilité de Active NameNode. Cela synchronise l'état actuel de l'espace de noms avec l'état avant le basculement.
  • L'administrateur doit configurer au moins une méthode de clôture pour éviter un scénario de fractionnement du cerveau.
  • Le système peut utiliser une gamme de mécanismes de clôture. Cela peut inclure la suppression du processus de NameNode et la révocation de son accès au répertoire de stockage partagé.
  • En dernier recours, nous pouvons clôturer le NameNode précédemment actif avec une technique connue sous le nom de STONITH, ou «tirer sur l'autre nœud dans la tête». STONITH utilise une unité de distribution électrique spécialisée pour mettre hors tension de force la machine NameNode.

Basculement automatique:

Le basculement est une procédure par laquelle un système transfère automatiquement le contrôle au système secondaire lorsqu'il détecte un défaut ou une panne. Il existe deux types de basculement:

Basculement progressif: Dans ce cas, nous lançons manuellement le basculement pour la maintenance de routine.

Basculement automatique: Dans ce cas, le basculement est lancé automatiquement en cas d'échec de NameNode (événement non planifié).

Apache Zookeeper est un service qui fournit la capacité de basculement automatique dans le cluster HDFS High Availabilty. Il gère de petites quantités de données de coordination, informe les clients des changements dans ces données et surveille les clients pour les échecs. Zookeeper maintient une session avec les NameNodes. En cas d'échec, la session expirera et le Zookeeper informera les autres NameNodes de lancer le processus de basculement. En cas d'échec de NameNode, un autre NameNode passif peut prendre un verrou dans Zookeeper indiquant qu'il veut devenir le prochain NameNode actif.

Le ZookeerFailoverController (ZKFC) est un client Zookeeper qui surveille et gère également l'état de NameNode. Chacun des NameNode exécute également un ZKFC. ZKFC est chargé de surveiller périodiquement la santé des NameNodes.

Maintenant que vous avez compris ce qu'est la haute disponibilité dans un cluster Hadoop, il est temps de la configurer. Pour configurer la haute disponibilité dans le cluster Hadoop, vous devez utiliser Zookeeper dans tous les nœuds.

Les démons dans Active NameNode sont:

  • Gardien de zoo
  • Contrôleur de basculement Zookeeper
  • JournalNode
  • NomNœud

Les démons de Standby NameNode sont:

  • Gardien de zoo
  • Contrôleur de basculement Zookeeper
  • JournalNode
  • NomNœud

Les démons de DataNode sont:

  • Gardien de zoo
  • JournalNode
  • DataNode

Si vous souhaitez maîtriser HDFS et Hadoop, consultez le cours Big Data et Hadoop spécialement organisé par Edureka. Cliquez sur le bouton ci-dessous pour commencer.

Configuration et configuration du cluster haute disponibilité dans Hadoop:

Vous devez d'abord configurer les noms Java et d'hôte de chaque nœud.

Machine virtuelle adresse IP Nom d'hôte
Nœud de nom actif192.168.1.81nn1.cluster.com ou nn1
Nom de veille192.168.1.58nn2.cluster.com ou nn2
DataNode192.168.1.82dn1.cluster.com ou dn1

Téléchargez le fichier tar binaire Hadoop et Zookeeper, extrayez les fichiers pour éditer les fichiers de configuration.

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

création d'un tableau d'objets

Diffusez le gardien de zoo-3.4.6.tar.gz

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

Téléchargez le tar binaire Hadoop stable sur le site Apache Hadoop.

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

Extrayez la boule de goudron Hadoop.

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

Spread hadoop binaire.

Ajoutez le Hadoop, Zookeeper et les chemins au fichier .bashrc.

Ouvrez le fichier .bashrc.

Commander : sudo gedit ~ / .bashrc

Ajoutez les chemins ci-dessous:

export HADOOP_HOME = export HADOOP_MAPRED_HOME = $ HADOOP_HOME exportation HADOOP_COMMON_HOME = $ HADOOP_HOME exportation HADOOP_HDFS_HOME = $ HADOOP_HOME exportation YARN_HOME = $ HADOOP_HOME exportation HADOOP_CONF_DIR = $ HADOOP_HOME / etc / Hadoop export 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

Modifiez le fichier .bashrc.

Activez le SSH dans tous les nœuds.

Générez la clé SSH dans tous les nœuds.

Commander : ssh-keygen –t rsa (Cette étape dans tous les nœuds)

Configurez la clé SSH dans tous les nœuds.

Ne donnez aucun chemin d'accès au fichier Enter pour enregistrer la clé et ne donnez aucune phrase de passe. Appuyez sur le bouton Entrée.

Générez le processus de clé ssh dans tous les nœuds.

Une fois la clé ssh générée, vous obtiendrez la clé publique et la clé privée.

Le répertoire de clés .ssh doit contenir l'autorisation 700 et toutes les clés du répertoire .ssh doivent contenir les autorisations 600.

Modifiez l'autorisation du répertoire SSH.

Changez le répertoire en .ssh et changez l'autorisation des fichiers en 600

Modifiez l'autorisation des clés publiques et privées.

Vous devez copier la clé publique ssh des nœuds de nom sur tous les nœuds.

Dans Active Namenode, copiez l'id_rsa.pub à l'aide de la commande cat.

Commander : chat ~ / .ssh / id_rsa.pub >> ~ / .ssh / clés_autorisées

Copiez la clé ssh Namenode dans ses clés autorisées.

Copiez la clé publique NameNode sur tous les nœuds à l'aide de ssh-copie-id commander.

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

Copiez la clé de fonction dans Standby NameNode.

Copiez la clé publique NameNode dans le nœud de données.

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

Copiez la clé publique Namenode dans le nœud de données.

Redémarrez le service sshd dans tous les nœuds.

Commander : redémarrage du service sudo sshd (à faire dans tous les nœuds)

Redémarrez le service SSH.

Vous pouvez maintenant vous connecter à n'importe quel nœud depuis Namenode sans aucune authentification.

Ouvrez le fichier core-site.xml à partir du nœud Active Name et ajoutez les propriétés ci-dessous.

Modifier core-site.xml à partir du namenode actif

Ouvrez le fichier hdfs-site.xml dans Active Namenode. Ajoutez les propriétés ci-dessous.

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

Remplacez le répertoire par le répertoire conf de zookeeper.

Commander : cd zookeeper-3.4.6 / conf

Répertoire Zookeeper Conf.

Dans un répertoire conf, vous avez le fichier zoo_sample.cfg, créez le zoo.cfg en utilisant le fichier zoo_sample.cfg.

Commander : cp zoo_sample.cfg zoo.cfg

Créez le fichier zoo.cfg.

Créez le répertoire dans n'importe quel emplacement et utilisez ce répertoire pour stocker les données du gardien de zoo.

Commander : mkdir

Créez un répertoire pour stocker les données du gardien de zoo.

Ouvrez le fichier zoo.cfg.

Commander : gedit zoo.cfg

Ajoutez le chemin du répertoire créé à l'étape ci-dessus à la propriété dataDir et ajoutez les détails ci-dessous concernant le nœud restant, dans le fichier zoo.cfg.

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

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

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

Modifiez le fichier zoo.cfg.

Copiez maintenant les répertoires Java et Hadoop-2.6.0, zookeeper-3.4.6 et le fichier .bashrc sur tous les nœuds (nœud de nom de secours, nœud de données) à l'aide de la commande scp.

Commander : scp –r edureka @:

Copiez les fichiers Hadoop, Zookeeper et .bashrc sur tous les nœuds.

De même, copiez le fichier .bashrc et le répertoire zookeeper sur tous les nœuds et modifiez les variables d'environnement dans chacun en fonction du nœud respectif.

Dans un nœud de données, créez tout répertoire dans lequel vous devez stocker les blocs HDFS.

Dans un nœud de données, vous devez ajouter les propriétés dfs.datanode.data.dir.

Dans mon cas, j'ai créé datanode répertoire pour stocker les blocs.

Créez le répertoire Datanode.

Modifiez l'autorisation d'accès au répertoire du nœud de données.

Modifier l'autorisation du répertoire Datanode.

Ouvrez le fichier HDFS-site.xml, ajoutez ce chemin d'accès au répertoire Datanode dans la propriété dfs.datanode.data.dir.

qu'est-ce que le big data hadoop

Remarque: conservez toutes les propriétés copiées à partir du namenode actif, ajoutez dfs.datanode.data.dir une propriété d'extraction dans namenode.

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

Dans Active namenode, modifiez le répertoire dans lequel vous souhaitez stocker le fichier de configuration du gardien de zoo (chemin de la propriété dataDir).

Créez le fichier myid dans le répertoire et ajoutez le chiffre 1 au fichier et enregistrez le fichier.

Commander : vi myid

Créez un fichier myid.

Dans un namenode de veille, changez le répertoire dans lequel vous souhaitez stocker le fichier de configuration du gardien de zoo (chemin de la propriété dataDir).

Créez le fichier myid dans le répertoire et ajoutez le numérique 2 au fichier et enregistrez le fichier.

Dans un nœud de données, modifiez le répertoire dans lequel vous souhaitez stocker le fichier de configuration du gardien de zoo (chemin de la propriété dataDir).

Créez le fichier myid dans le répertoire et ajoutez le chiffre 3 au fichier et enregistrez le fichier.

Démarrez le Journalnode dans les trois nœuds.

Commander : hadoop-daemon.sh démarre le nœud de journal

Démarrez le Journalnode.

Lorsque vous entrez la commande jps, vous verrez le démon JournalNode dans tous les nœuds.

Formater leObjectif actif.

Commander : Format prévu pour HDFS

Format de NameNode actif.

Démarrez le démon Namenode et Active Namedode.

Commander : hadoop-daemon.sh but de démarrage

Démarrez Namenode.

Copiez les métadonnées HDFS du nœud de nom actif vers le namenode de veille.

Commander : HDFS prévu -bootstrapStandby

Copiez les métadonnées HDFS du nœud de nom actif vers le nœud de veille.

Une fois cette commande exécutée, vous obtiendrez les informations à partir de quel nœud et emplacement les métadonnées sont copiées et si elles sont copiées avec succès ou non.

Informations sur les détails de l'objectif actif.

Une fois que les métadonnées sont copiées du namenode actif vers le namenode en veille, vous obtiendrez le message ci-dessous dans la capture d'écran.

Informations concernant HDFS dans Standby Namenode.

Démarrez le démon namenode sur la machine namenode en veille.

Commander : hadoop-daemon.sh but de démarrage

Démarrez maintenant le service Zookeeper dans les trois nœuds.

Commander : zkServer.sh start (Exécutez cette commande dans tous les nœuds)

Dans le but actif:

Démarrez zookeeper dans Active NameNode.

En veille Namenode:

Démarrez le gardien de zoo en mode veille NameNode.

Dans le nœud de données:

Démarrez zookeeper dans DataNode.

Après avoir exécuté le serveur Zookeeper, entrez la commande JPS. Dans tous les nœuds, vous verrez le service QuorumPeerMain.

Démarrez le démon du nœud de données dans la machine du nœud de données.

Commander : hadoop-daemon.sh start datanode

Démarrez le contrôleur de basculement Zookeeper dans le nœud de nom actif et le nœud de nom de secours.

Formatez le contrôleur de basculement du gardien de zoo dans Active namenode.

Commander: HDFS zkfc –formatZK

Formatez ZKFC.

Démarrez le ZKFC dans Active namenode.

Commander : hadoop-daemon.sh lance zkfc

Entrez la commande jps pour vérifier les démons DFSZkFailoverController.

Démarrez ZKFC.

Formatez le contrôleur de basculement zookeeper en mode de veille.

Commander : hdfs zkfc –formatZK

Démarrez le ZKFC en mode veille.

Commander : hadoop-daemon.sh lance zkfc

Entrez la commande jps pour vérifier les démons DFSZkFailoverController.

Vérifiez maintenant l'état de chaque Namenode, quel nœud est actif ou quel nœud est en veille à l'aide de la commande ci-dessous.

Commander : hdfs haadmin –getServiceState nn1

Vérifiez l'état de chaque NameNode.

Vérifiez maintenant l'état de chaque Namenode à l'aide du navigateur Web.

Ouvrez le navigateur Web et entrez l'URL ci-dessous.

: 50070

Il montrera si le nœud de nom est actif ou en veille.

Nœud de nom actif.

programme de tri par sélection en java

Ouvrez les détails d'un autre nœud de nom à l'aide du navigateur Web.

NameNode de veille.

Dans le namenode actif, supprimez le démon namenode pour changer le nœud de nom de veille en namenode actif.

Entrez jps dans Active namenode et tuez le démon.

Commander: sudo tuer -9

ID de processus des démons.

L'ID de processus Namenode est 7606, tuez le namenode.

Commander : Sudo kill -9 7606

Tuez le processus de nœud de nom

Ouvrez les deux nœuds via le navigateur Web et vérifiez l'état.

Détails Namenode.

État de NameNode.

Félicitations, vous avez configuré avec succès un cluster HDFS High Availability dans Hadoop.

Maintenant que vous avez compris l'architecture de cluster haute disponibilité Hadoop, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation à la certification Edureka Big Data Hadoop aide les apprenants à devenir des experts dans les domaines HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume et Sqoop en utilisant des cas d'utilisation en temps réel sur le commerce de détail, les médias sociaux, l'aviation, le tourisme et la finance.

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires et nous vous recontacterons.

window._LQ_ = window._LQ_ || {}

lqQuizModal (fenêtre, document, {quizId: ’XAIVp8 ′, baseUrl:’ https: //quiz.leadquizzes.com/’, déclencheur: ’exit’}, _LQ_)