Hadoop-cluster instellen met hoge beschikbaarheid van HDFS



Deze blog geeft een overzicht van de HDFS High Availability-architectuur en hoe je in eenvoudige stappen een HDFS High Availability-cluster instelt en configureert.

HDFS 2.x Clusterarchitectuur met hoge beschikbaarheid

In deze blog ga ik het hebben over HDFS 2.x High Availability Cluster Architecture en de procedure om een ​​HDFS High Availability-cluster op te zetten.Dit is een belangrijk onderdeel van de . De volgorde waarin de onderwerpen in deze blog zijn behandeld, is als volgt:

  • HDFS HA-architectuur
    • Invoering
    • NameNode Beschikbaarheid
    • Architectuur van HA
    • Implementatie van HA (JournalNode en gedeelde opslag)
  • Hoe HA (Quorum Journal Nodes) in te stellen in een Hadoop-cluster?

Invoering:

Het concept van een High Availability-cluster is geïntroduceerd in Hadoop 2.x om het single point of failure-probleem in Hadoop 1.x op te lossen. Zoals je weet uit mijn vorige blog dat de volgt Master / Slave-topologie waarbij NameNode fungeert als een master-daemon en verantwoordelijk is voor het beheer van andere slaafknooppunten genaamd DataNodes. Deze enkele Master Daemon of NameNode wordt een bottleneck. Hoewel de introductie van Secondary NameNode ons gegevensverlies verhinderde en een deel van de last van de NameNode ontlastte, loste het het beschikbaarheidsprobleem van de NameNode niet op.





NameNode Beschikbaarheid:

Als u de standaardconfiguratie van een HDFS-cluster in overweging neemt, wordt de NameNode een enkel punt van mislukking . Het gebeurt omdat op het moment dat de NameNode niet meer beschikbaar is, het hele cluster onbeschikbaar wordt totdat iemand de NameNode opnieuw start of een nieuwe brengt.

De redenen voor het niet beschikbaar zijn van NameNode kunnen zijn:



  • Een geplande gebeurtenis, zoals onderhoudswerkzaamheden, heeft een upgrade van software of hardware.
  • Het kan ook te wijten zijn aan een niet-geplande gebeurtenis waarbij de NameNode om een ​​of andere reden crasht.

In elk van de bovenstaande gevallen hebben we een downtime waarbij we het HDFS-cluster niet kunnen gebruiken, wat een uitdaging wordt.

HDFS HA-architectuur:

Laten we begrijpen hoe HDFS HA ​​Architecture dit kritieke probleem van de beschikbaarheid van NameNode heeft opgelost:

De HA-architectuur loste dit probleem van de beschikbaarheid van NameNode op door ons twee NameNodes in een actieve / passieve configuratie te laten hebben. We hebben dus twee actieve NameNodes tegelijkertijd in een cluster met hoge beschikbaarheid:



  • Actieve NameNode
  • Stand-by / passieve NameNode.

HDFS HA-architectuur - Cluster met hoge beschikbaarheid - Edureka

Als een NameNode uitvalt, kan de andere NameNode de verantwoordelijkheid overnemen en daardoor de downtime van het cluster verminderen. De standby NameNode dient als back-up NameNode (in tegenstelling tot de Secondary NameNode) die failover-mogelijkheden voor het Hadoop-cluster bevat. Daarom kunnen we met de StandbyNode automatische failover hebben wanneer een NameNode crasht (ongeplande gebeurtenis) of we kunnen een sierlijke (handmatig geïnitieerde) failover hebben tijdens de onderhoudsperiode.

Er zijn twee problemen bij het handhaven van de consistentie in het HDFS-cluster met hoge beschikbaarheid:

  • Active en Standby NameNode moeten altijd met elkaar gesynchroniseerd zijn, d.w.z. ze moeten dezelfde metadata hebben. Dit zal ons in staat stellen om het Hadoop-cluster te herstellen naar dezelfde naamruimtestatus waarin het is gecrasht en daarom hebben we een snelle failover.
  • Er mag slechts één actieve NameNode tegelijk zijn, omdat twee actieve NameNode tot beschadiging van de gegevens zullen leiden. Dit soort scenario wordt een split-brain-scenario genoemd, waarbij een cluster wordt opgedeeld in kleinere clusters, waarbij elk ervan gelooft dat dit het enige actieve cluster is. Om dergelijke scenario's te voorkomen, wordt hekwerk gedaan. Schermen is een proces om ervoor te zorgen dat slechts één NameNode op een bepaald moment actief blijft.

Implementatie van HA-architectuur:

Nu weet u dat we in HDFS HA-architectuur twee NameNodes tegelijkertijd hebben uitgevoerd. We kunnen dus de Active en Standby NameNode-configuratie op de volgende twee manieren implementeren:

  1. Quorum Journal Nodes gebruiken
  2. Gedeelde opslag met behulp van NFS

Laten we deze twee manieren van implementatie een voor een begrijpen:

1. Quorumjournaalknooppunten gebruiken:

  • De standby NameNode en de actieve NameNode blijven met elkaar gesynchroniseerd via een aparte groep knooppunten of daemons - genaamd JournalNodes .De JournalNodes volgt de ringtopologie waarbij de knooppunten met elkaar zijn verbonden om een ​​ring te vormen.De JournalNode bedient het verzoek dat eraan komt en kopieert de informatie naar andere knooppunten in de ring.Dit zorgt voor fouttolerantie in het geval van een JournalNode-storing.
  • De actieve NameNode is verantwoordelijk voor het bijwerken van de EditLogs (metadata-informatie) aanwezig in de JournalNodes.
  • De StandbyNode leest de wijzigingen die zijn aangebracht in de EditLogs in de JournalNode en past deze op een constante manier toe op zijn eigen naamruimte.
  • Tijdens een failover zorgt de StandbyNode ervoor dat het zijn metagegevensinformatie van de JournalNodes heeft bijgewerkt voordat hij de nieuwe Active NameNode wordt. Hierdoor wordt de huidige status van de naamruimte gesynchroniseerd met de status vóór de failover.
  • De IP-adressen van beide NameNodes zijn beschikbaar voor alle DataNodes en ze sturen hun hartslagen en bloklocatie-informatie naar zowel de NameNode. Dit zorgt voor een snelle failover (minder uitvaltijd) omdat de StandbyNode bijgewerkte informatie heeft over de bloklocatie in het cluster.

Schermen van NameNode:

Nu, zoals eerder besproken, is het erg belangrijk om ervoor te zorgen dat er slechts één Active NameNode tegelijk is. Hekwerk is dus een proces om deze eigenschap in een cluster te verzekeren.

  • De JournalNodes voert deze afrastering uit door slechts één NameNode tegelijk de schrijver te laten zijn.
  • De Standby NameNode neemt de verantwoordelijkheid over om naar de JournalNodes te schrijven en verbiedt elke andere NameNode actief te blijven.
  • Eindelijk kan de nieuwe Active NameNode zijn activiteiten veilig uitvoeren.

2. Gedeelde opslag gebruiken:

  • De StandbyNode en de actieve NameNode blijven met elkaar gesynchroniseerd door een gedeeld opslagapparaat .De actieve NameNode registreert het record van elke wijziging die in zijn naamruimte is aangebracht in een EditLog die aanwezig is in deze gedeelde opslag.De StandbyNode leest de wijzigingen die zijn aangebracht in de EditLogs in deze gedeelde opslag en past deze toe op zijn eigen naamruimte.
  • Nu, in het geval van een failover, werkt de StandbyNode eerst zijn metadata-informatie bij met behulp van de EditLogs in de gedeelde opslag. Vervolgens neemt het de verantwoordelijkheid van de Active NameNode. Hierdoor wordt de huidige status van de naamruimte gesynchroniseerd met de status vóór de failover.
  • De beheerder moet ten minste één schermmethode configureren om een ​​split-brain-scenario te voorkomen.
  • Het systeem kan een reeks afrasteringsmechanismen gebruiken. Het kan het beëindigen van het proces van de NameNode en het intrekken van de toegang tot de gedeelde opslagmap inhouden.
  • Als laatste redmiddel kunnen we de voorheen actieve NameNode omheinen met een techniek die bekend staat als STONITH, of 'de andere knoop in het hoofd schieten'. STONITH gebruikt een gespecialiseerde stroomverdeeleenheid om de NameNode-machine met geweld uit te schakelen.

Automatische failover:

Failover is een procedure waarbij een systeem automatisch de besturing overdraagt ​​aan een secundair systeem wanneer het een fout of storing detecteert. Er zijn twee soorten failover:

Sierlijke failover: In dit geval starten we handmatig de failover voor routineonderhoud.

Automatische failover: In dit geval wordt de failover automatisch gestart in het geval van een NameNode-storing (ongeplande gebeurtenis).

Apache Zookeeper is een service die de automatische failover-mogelijkheid biedt in het HDFS High Availability-cluster. Het houdt kleine hoeveelheden coördinatiegegevens bij, informeert klanten over wijzigingen in die gegevens en controleert klanten op fouten. Zookeeper onderhoudt een sessie met de NameNodes. In het geval van een mislukking, zal de sessie verlopen en zal de dierenverzorger andere NameNodes informeren om het failover-proces te starten. In het geval van een NameNode-fout, kan een andere passieve NameNode een vergrendeling krijgen in Zookeeper en aangeven dat het de volgende actieve NameNode wil worden.

De ZookeerFailoverController (ZKFC) is een Zookeeper-client die ook de NameNode-status bewaakt en beheert. Elk van de NameNode voert ook een ZKFC uit. ZKFC is verantwoordelijk voor het periodiek monitoren van de gezondheid van de NameNodes.

Nu u weet wat hoge beschikbaarheid is in een Hadoop-cluster, is het tijd om het op te zetten. Om hoge beschikbaarheid in Hadoop-cluster in te stellen, moet u Zookeeper in alle knooppunten gebruiken.

De daemons in Active NameNode zijn:

  • Dierentuinmedewerker
  • Zookeeper Fail Over-controller
  • JournalNode
  • NameNode

De daemons in Standby NameNode zijn:

  • Dierentuinmedewerker
  • Zookeeper Fail Over-controller
  • JournalNode
  • NameNode

De daemons in DataNode zijn:

  • Dierentuinmedewerker
  • JournalNode
  • DataNode

Als je HDFS en Hadoop onder de knie wilt krijgen, bekijk dan de speciaal samengestelde Big Data en Hadoop-cursus van Edureka. Klik op onderstaande knop om aan de slag te gaan.

Cluster met hoge beschikbaarheid instellen en configureren in Hadoop:

U moet eerst de Java- en hostnamen van elk knooppunt instellen.

Virtuele machine IP adres Hostnaam
Actieve NameNode192.168.1.81nn1.cluster.com of nn1
Stand-by NameNode192.168.1.58nn2.cluster.com of nn2
DataNode192.168.1.82dn1.cluster.com of dn1

Download het binaire tar-bestand van Hadoop en Zookeeper, pak de bestanden uit om configuratiebestanden te bewerken.

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

Verspreid de dierenverzorger-3.4.6.tar.gz

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

Download de stabiele Hadoop binaire tar van de Apache Hadoop-site.

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

Pak de Hadoop-teerbal uit.

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

Verspreid hadoop binair.

Voeg de Hadoop, Zookeeper en paden toe aan het .bashrc-bestand.

Open het .bashrc-bestand.

Opdracht : sudo gedit ~ / .bashrc

Voeg de onderstaande paden toe:

export HADOOP_HOME = export HADOOP_MAPRED_HOME = $ HADOOP_HOME export HADOOP_COMMON_HOME = $ HADOOP_HOME export HADOOP_HDFS_HOME = $ HADOOP_HOME export YARN_HOME = $ HADOOP_HOME export 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

Bewerk .bashrc-bestand.

Schakel de SSH in alle knooppunten in.

Genereer de SSH-sleutel in alle knooppunten.

Opdracht : ssh-keygen –t rsa (deze stap in alle knooppunten)

Stel de SSH-sleutel in alle knooppunten in.

Geef geen pad op naar het Enter-bestand om de sleutel op te slaan en geef geen wachtwoordzin. Druk op de enter-knop.

Genereer het SSH-sleutelproces in alle knooppunten.

Zodra de ssh-sleutel is gegenereerd, krijgt u de openbare sleutel en de privésleutel.

De .ssh-directory moet de machtiging 700 bevatten en alle sleutels in de .ssh-directory moeten de machtigingen 600 bevatten.

Wijzig de SSH-directorymachtiging.

Verander de directory in .ssh en verander de toestemming van bestanden in 600

Wijzig de toestemming voor openbare en persoonlijke sleutels.

U moet de openbare sleutel Name nodes ssh naar alle nodes kopiëren.

Kopieer in Active Namenode de id_rsa.pub met de opdracht cat.

Opdracht : cat ~ / .ssh / id_rsa.pub >> ~ / .ssh / geautoriseerde_sleutels

Kopieer de Namenode SSH-sleutel naar de geautoriseerde sleutels.

Kopieer de openbare sleutel NameNode naar alle knooppunten met ssh-kopie-id opdracht.

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

html-tag voor regeleinde

Kopieer de doelsleutel naar Standby NameNode.

Kopieer de openbare sleutel van NameNode naar het gegevensknooppunt.

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

Kopieer de openbare sleutel van Namenode naar het gegevensknooppunt.

Start de sshd-service opnieuw op alle knooppunten.

Opdracht : sudo service sshd herstart (doe in alle knooppunten)

Start de SSH-service opnieuw.

Nu kunt u inloggen op elk knooppunt vanuit Namenode zonder enige authenticatie.

Open het core-site.xml-bestand vanuit het Active Name-knooppunt en voeg de onderstaande eigenschappen toe.

Bewerk core-site.xml vanuit Active namenode

Open het hdfs-site.xml-bestand in Active Namenode. Voeg de onderstaande eigenschappen toe.

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-adres .ha-cluster.nn1 nn1.cluster.com:9000 dfs.namenode.rpc-adres.ha-cluster.nn2 nn2.cluster.com:9000 dfs.namenode.http-adres.ha-cluster.nn1 nn1.cluster. com: 50070 dfs.namenode.http-adres.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.ingeschakeld 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

Verander de directory naar de conf directory van de dierenverzorger.

Opdracht : cd zookeeper-3.4.6 / conf

De map Zookeeper Conf.

In een conf directory heb je zoo_sample.cfg bestand, maak het zoo.cfg aan met zoo_sample.cfg bestand.

Opdracht : cp zoo_sample.cfg zoo.cfg

Maak een zoo.cfg-bestand.

Maak de map op een willekeurige locatie en gebruik deze map om de gegevens van de dierenverzorger op te slaan.

Opdracht : mkdir

Maak een map om de gegevens van de dierenverzorger op te slaan.

Open het bestand zoo.cfg.

Opdracht : gedit zoo.cfg

Voeg het directorypad dat in de bovenstaande stap is gemaakt toe aan de eigenschap dataDir en voeg de onderstaande details over het resterende knooppunt toe in het zoo.cfg-bestand.

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

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

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

Bewerk het bestand zoo.cfg.

Kopieer nu de Java- en Hadoop-2.6.0, zookeeper-3.4.6-mappen en het .bashrc-bestand naar alle knooppunten (stand-bynaamknooppunt, gegevensknooppunt) met de opdracht scp.

Opdracht : scp –r edureka @:

Kopieer het Hadoop-, Zookeeper- en .bashrc-bestand naar alle knooppunten.

Kopieer op dezelfde manier het .bashrc-bestand en de zookeeper-directory naar alle knooppunten en verander de omgevingsvariabelen in elk volgens het respectieve knooppunt.

Maak in een dataknooppunt een directory waar u de HDFS-blokken moet opslaan.

In een gegevensknooppunt moet u de eigenschappen dfs.datanode.data.dir toevoegen.

In mijn geval heb ik gemaakt datanode directory om de blokken op te slaan.

Maak een Datanode-map.

Wijzig de toestemming voor de gegevensknooppuntdirectory.

Wijzig de machtiging voor de Datanode-directory.

Open het bestand HDFS-site.xml en voeg dit Datanode-mappad toe aan de eigenschap dfs.datanode.data.dir.

Opmerking: bewaar alle eigenschappen die zijn gekopieerd van de actieve namenode add dfs.datanode.data.dir één extracteigenschap in namenode.

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

Wijzig in Actieve namenode de map waarin u het configuratiebestand van de dierenverzorger wilt opslaan (pad dataDir-eigenschap).

Maak het myid-bestand in de map en voeg numeriek 1 toe aan het bestand en sla het bestand op.

Opdracht : vi myid

Maak een myid-bestand.

Wijzig in een stand-by namenode de map waarin u het configuratiebestand van de dierenverzorger (dataDir-eigenschappenpad) wilt opslaan.

Maak het myid-bestand in de directory en voeg numeriek 2 toe aan het bestand en sla het bestand op.

Wijzig in een dataknooppunt de map waarin u het configuratiebestand van de dierenverzorger (dataDir-eigenschappenpad) wilt opslaan.

Maak het myid-bestand in de directory en voeg cijfer 3 toe aan het bestand en sla het bestand op.

Start de Journalnode in alle drie de knooppunten.

Opdracht : hadoop-daemon.sh start journalnode

Start de Journalnode.

Wanneer u het jps-commando invoert, ziet u de JournalNode-daemon in alle knooppunten.

Formatteer hetActief doel.

Opdracht : HDFS bedoeld -formaat

Active NameNode-indeling.

hoe je een dynamische array in java maakt

Start de Namenode-daemon en de Active Namedode.

Opdracht : hadoop-daemon.sh startdoel

Start Namenode.

Kopieer de HDFS-metagegevens van het actieve naamknooppunt naar de standby-namenode.

Opdracht : HDFS bedoeld -bootstrapStandby

Kopieer de HDFS-metagegevens van het actieve naamknooppunt naar de stand-byknooppunt.

Nadat u deze opdracht hebt uitgevoerd, krijgt u de informatie van welk knooppunt en van welke locatie de metagegevens worden gekopieerd en of het succesvol is gekopieerd of niet.

Informatie over details van actieve doeleinden.

Zodra de metagegevens zijn gekopieerd van Active namenode naar standby namenode, krijgt u het onderstaande bericht in de schermafbeelding.

Informatie over HDFS in Standby Namenode.

Start de namenode-daemon in de standby-namenode-machine.

Opdracht : hadoop-daemon.sh startdoel

Start nu de Zookeeper-service in alle drie de knooppunten.

Opdracht : zkServer.sh start (voer deze opdracht uit in alle knooppunten)

In actief doel:

Start dierenverzorger in Active NameNode.

In stand-by Namenode:

Start de dierenverzorger in standby NameNode.

In dataknooppunt:

Start dierenverzorger in DataNode.

Voer na het uitvoeren van de Zookeeper-server de JPS-opdracht in. In alle knooppunten ziet u de QuorumPeerMain-service.

Start de Data node-daemon in de Data node-machine.

Opdracht : hadoop-daemon.sh start datanode

Start de Zookeeper-failovercontroller in het actieve naamknooppunt en het standby-naamknooppunt.

Formatteer de failover-controller van de dierenverzorger in Actieve namenode.

Opdracht: HDFS zkfc –formatZK

Formatteer ZKFC.

Start de ZKFC in Actieve namenode.

Opdracht : hadoop-daemon.sh start zkfc

Voer het jps-commando in om de DFSZkFailoverController-daemons te controleren.

Start ZKFC.

Formatteer de Zookeeper-failovercontroller in Standby-namenode.

Opdracht : hdfs zkfc –formatZK

Start de ZKFC in stand-by namenode.

Opdracht : hadoop-daemon.sh start zkfc

Voer het jps-commando in om de DFSZkFailoverController-daemons te controleren.

Controleer nu de status van elke Namenode, welk knooppunt actief is of welk knooppunt op stand-by staat door het onderstaande commando te gebruiken.

Opdracht : hdfs haadmin –getServiceState nn1

Controleer de status van elke NameNode.

Controleer nu de status van elke Namenode met behulp van de webbrowser.

Open de webbrowser en voer de onderstaande URL in.

: 50070

Het zal laten zien of het naamknooppunt actief of stand-by is.

Actieve NameNode.

Open de details van een ander naamknooppunt met de webbrowser.

Stand-by NameNode.

Dood in de actieve namenode de namenode-daemon om het stand-by-naamknooppunt te wijzigen in actieve namenode.

Typ jps in Active namenode en kill de daemon.

Opdracht: sudo kill -9

Daemons-proces-ID.

De Namenode-proces-ID is 7606, kill de namenode.

Opdracht : Sudo kill -9 7606

Dood het Name Node-proces

Open de twee knooppunten via een webbrowser en controleer de status.

Namenode details.

NameNode-status.

Gefeliciteerd, u heeft met succes een HDFS-cluster voor hoge beschikbaarheid in Hadoop ingesteld.

Nu u Hadoop High Availability Cluster Architecture begrijpt, kunt u het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De Edureka Big Data Hadoop-certificeringstraining helpt leerlingen expert te worden in HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume en Sqoop met behulp van real-time use cases op het gebied van Retail, Social Media, Aviation, Tourism, Finance.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen contact met u op.

window._LQ_ = window._LQ_ || {}

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