Cum se configurează Hadoop Cluster cu disponibilitate ridicată HDFS



Acest blog oferă o prezentare generală a arhitecturii HDFS High Availability și a modului de configurare și configurare a unui cluster HDFS High Availability în pași simpli.

HDFS 2.x High Availability Cluster Architecture

În acest blog, voi vorbi despre HDFS 2.x High Availability Cluster Architecture și despre procedura de configurare a unui HDFS High Availability Cluster.Aceasta este o parte importantă a . Ordinea în care subiectele au fost tratate în acest blog sunt următoarele:

  • Arhitectură HDFS HA
    • Introducere
    • NumeNod Disponibilitate
    • Arhitectura HA
    • Implementarea HA (JournalNode și stocare partajată)
  • Cum se configurează HA (Quorum Journal Nodes) într-un cluster Hadoop?

Introducere:

Conceptul de cluster High Availability a fost introdus în Hadoop 2.x pentru a rezolva problema punctului unic de eșec din Hadoop 1.x. După cum știți din blogul meu anterior că urmează Topologia Master / Slave unde NameNode acționează ca un demon master și este responsabil pentru gestionarea altor noduri slave numite DataNodes. Acest singur Master Daemon sau NameNode devine un blocaj. Deși, introducerea secundarului NameNode ne-a împiedicat să pierdem datele și să descărcăm o parte din sarcina NameNode, dar nu a rezolvat problema disponibilității NameNode.





NumeNod Disponibilitate:

Dacă luați în considerare configurația standard a clusterului HDFS, NameNode devine un punct unic de eșec . Se întâmplă deoarece în momentul în care NameNode devine indisponibil, întregul cluster devine indisponibil până când cineva repornește NameNode sau aduce unul nou.

Motivele pentru indisponibilitatea NameNode pot fi:



  • Un eveniment planificat, cum ar fi lucrările de întreținere, are actualizarea software-ului sau hardware-ului.
  • Se poate datora și unui eveniment neplanificat în care NameNode se blochează din anumite motive.

În oricare dintre cazurile de mai sus, avem o perioadă de nefuncționare în care nu putem folosi clusterul HDFS, ceea ce devine o provocare.

Arhitectură HDFS HA:

Să înțelegem că modul în care HDFS HA ​​Architecture a rezolvat această problemă critică a disponibilității NameNode:

Arhitectura HA a rezolvat această problemă a disponibilității NameNode permițându-ne să avem două NameNodes într-o configurație activă / pasivă. Deci, avem două NameNodes care rulează în același timp într-un cluster High Availability:



  • Nume activ Nod
  • Standby / Passive NameNode.

Arhitectură HDFS HA ​​- Cluster de înaltă disponibilitate - Edureka

Dacă un NameNode cade, celălalt NameNode poate prelua responsabilitatea și, prin urmare, reduce timpul de oprire al clusterului. NameNode-ul de așteptare servește scopului unui NameNode de rezervă (spre deosebire de SecondName NameNode), care încorporează capabilități de failover în clusterul Hadoop. Prin urmare, cu StandbyNode, putem avea failover automat ori de câte ori un NameNode se blochează (eveniment neplanificat) sau putem avea un failover grațios (inițiat manual) în perioada de întreținere.

Există două probleme în menținerea consistenței în clusterul HDFS High Availability:

  • Active și Standby NameNode ar trebui să fie întotdeauna sincronizate între ele, adică ar trebui să aibă aceleași metadate. Acest lucru ne va permite să restabilim clusterul Hadoop în aceeași stare a spațiului de nume în care s-a prăbușit și, prin urmare, ne va oferi un failover rapid.
  • Ar trebui să existe un singur NameNode activ la un moment dat, deoarece două NameNode active vor duce la corupția datelor. Acest tip de scenariu este denumit un scenariu split-brain în care un cluster se împarte în cluster mai mic, fiecare crezând că este singurul cluster activ. Pentru a evita astfel de scenarii se face împrejmuire. Împrejmuirea este un proces care asigură faptul că doar un singur NameNode rămâne activ la un moment dat.

Implementarea arhitecturii HA:

Acum, știți că în HDFS HA ​​Architecture, avem două NameNodes care rulează în același timp. Deci, putem implementa configurația ActiveName și Standby NameNode în următoarele două moduri:

  1. Utilizarea nodurilor jurnalului Quorum
  2. Stocare partajată utilizând NFS

Să înțelegem aceste două moduri de implementare luând unul câte unul:

1. Utilizarea nodurilor jurnalului Quorum:

  • Numele de așteptare NameNode și NameNode activ se mențin sincronizate între ele printr-un grup separat de noduri sau daemons - numite JournalNodes .JournalNodes urmează topologia inelului în care nodurile sunt conectate între ele pentru a forma un inel.JournalNode servește solicitarea care îi vine și copiază informațiile în alte noduri din ring.Aceasta oferă toleranță la erori în caz de defecțiune JournalNode.
  • NameNode activ este responsabil pentru actualizarea EditLogs (informații despre metadate) prezente în JournalNodes.
  • StandbyNode citește modificările aduse EditLogs în JournalNode și le aplică propriului spațiu de nume într-o manieră constantă.
  • În timpul reluării la eșec, StandbyNode se asigură că și-a actualizat informațiile de meta date din JournalNodes înainte de a deveni noul Active NameNode. Acest lucru face ca starea curentă a spațiului de nume să fie sincronizată cu starea înainte de reluare.
  • Adresele IP ale ambelor noduri de nume sunt disponibile pentru toate nodurile de date și își trimit bătăile inimii și blochează informații despre locație atât la numele de nume. Aceasta oferă o trecere rapidă la eșec (mai puțin timp de oprire), deoarece StandbyNode are informații actualizate despre locația blocului din cluster.

Împrejmuirea NameNode:

Acum, așa cum am discutat mai devreme, este foarte important să vă asigurați că există doar un singur nume activ la un moment dat. Deci, împrejmuirea este un proces care asigură această proprietate într-un cluster.

  • JournalNodes efectuează această împrejmuire permițând ca un singur NameNode să fie scriitor la un moment dat.
  • Standby NameNode preia responsabilitatea de a scrie în JournalNodes și interzice oricărui alt NameNode să rămână activ.
  • În cele din urmă, noul Active NameNode își poate desfășura activitățile în siguranță.

2. Utilizarea stocării partajate:

  • StandbyNode și NameNode activ se mențin sincronizate între ele folosind un dispozitiv de stocare partajat .NameNode activ înregistrează înregistrarea oricărei modificări efectuate în spațiul său de nume într-un EditLog prezent în această stocare partajată.StandbyNode citește modificările aduse EditLogs în acest spațiu de stocare partajat și îl aplică propriului spațiu de nume.
  • Acum, în caz de failover, StandbyNode își actualizează la început informațiile de metadate folosind EditLogs în spațiul de stocare partajat. Apoi, își asumă responsabilitatea Active NameNode. Acest lucru face ca starea curentă a spațiului de nume să fie sincronizată cu starea înainte de reluare.
  • Administratorul trebuie să configureze cel puțin o metodă de împrejmuire pentru a evita un scenariu de creier divizat.
  • Sistemul poate folosi o serie de mecanisme de împrejmuire. Poate include eliminarea procesului NameNode și revocarea accesului acestuia la directorul de stocare partajată.
  • În ultimă instanță, putem îngrădi NameNode activ anterior cu o tehnică cunoscută sub numele de STONITH sau „împușca celălalt nod în cap”. STONITH folosește o unitate specială de distribuție a energiei pentru a opri forțat mașina NameNode.

Failover automat:

Failover este o procedură prin care un sistem transferă automat controlul către sistemul secundar atunci când detectează o defecțiune sau o defecțiune. Există două tipuri de failover:

Failover grațios: În acest caz, inițiem manual trecerea la eroare pentru întreținerea de rutină.

Failover automat: În acest caz, reluarea este inițiată automat în caz de eșec NameNode (eveniment neplanificat).

Apache Zookeeper este un serviciu care oferă capacitatea de failover automat în clusterul HDFS High Availability. Păstrează cantități mici de date de coordonare, informează clienții cu privire la modificările acestor date și monitorizează clienții pentru eșecuri. Zookeeper menține o sesiune cu NameNodes. În caz de eșec, sesiunea va expira și Zookeeper va informa alte NameNodes să inițieze procesul de failover. În caz de eșec NameNode, alt NameNode pasiv poate bloca în Zookeeper afirmând că vrea să devină următorul NameNode activ.

ZookeerFailoverController (ZKFC) este un client Zookeeper care monitorizează și gestionează starea NameNode. Fiecare dintre NameNode rulează și un ZKFC. ZKFC este responsabil pentru monitorizarea periodică a stării nodurilor Name.

Acum că ați înțeles ce este High Availability într-un cluster Hadoop, este timpul să îl configurați. Pentru a configura High Availability în clusterul Hadoop, trebuie să utilizați Zookeeper în toate nodurile.

Demonii din Active NameNode sunt:

  • Ingrijitor zoo
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Demonii din Standby NameNode sunt:

  • Ingrijitor zoo
  • Zookeeper Fail Over controller
  • JournalNode
  • NameNode

Demonii din DataNode sunt:

  • Ingrijitor zoo
  • JournalNode
  • DataNode

Dacă doriți să stăpâniți HDFS și Hadoop, consultați cursul special Big Data și Hadoop de Edureka. Faceți clic pe butonul de mai jos pentru a începe.

Configurarea și configurarea clusterului de înaltă disponibilitate în Hadoop:

Mai întâi trebuie să configurați numele Java și gazdele fiecărui nod.

Mașină virtuală adresa IP Numele gazdei
Nume activ Nod192.168.1.81nn1.cluster.com sau nn1
Nume nume de așteptare192.168.1.58nn2.cluster.com sau nn2
DataNode192.168.1.82dn1.cluster.com sau dn1

Descărcați fișierul tar binar Hadoop și Zookeeper, extrageți fișierele pentru a edita fișierele de configurare.

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

Răspândiți zookeeper-3.4.6.tar.gz

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

Descărcați tarul binar stabil Hadoop de pe site-ul Apache Hadoop.

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

Extrage mingea de gudron Hadoop.

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

Răspândiți binarul hadoop.

Adăugați Hadoop, Zookeeper și căi în fișierul .bashrc.

Deschideți fișierul .bashrc.

Comanda : sudo gedit ~ / .bashrc

Adăugați căile de mai jos:

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

Editați fișierul .bashrc.

Activați SSH în tot nodul.

Generați cheia SSH în toate nodurile.

Comanda : ssh-keygen –t rsa (Acest pas în toate nodurile)

Configurați cheia SSH în toate nodurile.

Nu dați nicio cale către fișierul Enter pentru a salva cheia și nu dați nicio expresie de acces. Apăsați butonul Enter.

Generați procesul de cheie ssh în toate nodurile.

Odată generată cheia ssh, veți obține cheia publică și cheia privată.

Directorul cheii .ssh ar trebui să conțină permisiunea 700 și toate cheile din directorul .ssh ar trebui să conțină permisiunile 600.

Schimbați permisiunea directorului SSH.

Schimbați directorul în .ssh și modificați permisiunea fișierelor în 600

Modificați permisiunea cheii publice și private.

Trebuie să copiați cheia publică Name nodes ssh în toate nodurile.

În Namenode activ, copiați id_rsa.pub folosind comanda cat.

Comanda : cat ~ / .ssh / id_rsa.pub >> ~ / .ssh / autorizate_chei

Copiați cheia samen Namenode în cheile autorizate.

Copiați cheia publică NameNode pe toate nodurile folosind ssh-copy-id comanda.

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

Copiați cheia de scop în Standby NameNode.

Copiați cheia publică NameNode în nodul de date.

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

Copiați cheia publică Namenode în nodul de date.

Reporniți serviciul sshd în toate nodurile.

Comanda : sudo service sshd restart (Faceți în toate nodurile)

Reporniți serviciul SSH.

Acum vă puteți conecta la orice nod din Namenode fără nicio autentificare.

Deschideți fișierul core-site.xml din nodul Active Name și adăugați proprietățile de mai jos.

Editați core-site.xml din namenode activ

Deschideți fișierul hdfs-site.xml în Active Namenode. Adăugați Proprietățile de mai jos.

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

Schimbați directorul în directorul conf al zookeeper.

Comanda : cd zookeeper-3.4.6 / conf

Director Zookeeper Conf.

Într-un director conf aveți fișierul zoo_sample.cfg, creați zoo.cfg folosind fișierul zoo_sample.cfg.

Comanda : cp zoo_sample.cfg zoo.cfg

Creați fișierul zoo.cfg.

Creați directorul în orice locație și utilizați acest director pentru a stoca datele zoologului.

Comanda : mkdir

Creați un director pentru a stoca datele zooeeper.

Deschideți fișierul zoo.cfg.

Comanda : gedit zoo.cfg

Adăugați calea directorului care este creată în pasul de mai sus la proprietatea dataDir și adăugați detaliile de mai jos referitoare la nodul rămas, în fișierul zoo.cfg.

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

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

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

Editați fișierul zoo.cfg.

Acum copiați directoarele Java și Hadoop-2.6.0, zookeeper-3.4.6 și fișierul .bashrc pe toate nodurile (nodul de așteptare, nodul de date) folosind comanda scp.

Comanda : scp –r edureka @:

Copiați fișierele Hadoop, Zookeeper și .bashrc pe toate nodurile.

În mod similar, copiați fișierul .bashrc și directorul zookeeper în toate nodurile și modificați variabilele de mediu din fiecare în funcție de nodul respectiv.

Într-un nod de date, creați orice director în care trebuie să stocați blocurile HDFS.

Într-un nod de date, trebuie să adăugați proprietățile dfs.datanode.data.dir.

În cazul meu, am creat datanode director pentru a stoca blocurile.

Creați directorul Datanode.

Schimbați permisiunea în directorul nodului de date.

Modificați permisiunea directorului Datanode.

Deschideți fișierul HDFS-site.xml, adăugați această cale a directorului Datanode în proprietatea dfs.datanode.data.dir.

Notă: Păstrați toate proprietățile care sunt copiate din Active namenode add dfs.datanode.data.dir o proprietate extract în namenode.

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

În Namenode activ, schimbați directorul în care doriți să stocați fișierul de configurare a zookeeper (calea proprietății dataDir).

Creați fișierul myid în director și adăugați numărul 1 la fișier și salvați fișierul.

Comanda : vi myid

Creați fișierul myid.

Într-un namenode de așteptare, schimbați directorul în care doriți să stocați fișierul de configurare a zookeeper (calea proprietății dataDir).

Creați fișierul myid în director și adăugați numărul 2 în fișier și salvați fișierul.

Într-un nod de date, schimbați directorul în care doriți să stocați fișierul de configurare zookeeper (calea proprietății dataDir).

Creați fișierul myid în director și adăugați numeric 3 în fișier și salvați fișierul.

Porniți Journalnode în toate cele trei noduri.

Comanda : hadoop-daemon.sh start journalnode

Porniți Journalnode.

Când introduceți comanda jps, veți vedea daemonul JournalNode în toate nodurile.

FormatațiScop activ.

Comanda : HDFS intenționat -format

Formatul Active NameNode.

Porniți demonul Namenode și Active Namedode.

Comanda : hadoop-daemon.sh scopul de început

Porniți Namenode.

Copiați metadatele HDFS din nodul de nume activ în nodul de așteptare.

Comanda : HDFS destinat -bootstrapStandby

Copiați metadatele HDFS din nodul Active name în Namenode Standby.

Odată ce ați executat această comandă, veți obține informațiile de la ce nod și locație copieză metadatele și dacă se copiază cu succes sau nu.

Informații despre detalii cu scop activ.

Odată ce metadatele sunt copiate de la namenode activ la namenode de așteptare, veți primi mesajul afișat mai jos în captura de ecran.

Informații referitoare la HDFS în standby Namenode.

Porniți demonul namenode în mașina namenode Standby.

Comanda : hadoop-daemon.sh scopul de început

Acum porniți serviciul Zookeeper în toate cele trei noduri.

Comanda : zkServer.sh start (Rulați această comandă în toate nodurile)

În scop activ:

Porniți zookeeper în Active NameNode.

În standby Namenode:

Porniți zoolog în standby NameNode.

În nodul de date:

Porniți zookeeper în DataNode.

După ce rulați serverul Zookeeper, introduceți comanda JPS. În toate nodurile veți vedea serviciul QuorumPeerMain.

Porniți demonul nodului de date în mașina nodului de date.

Comanda : hadoop-daemon.sh start datanode

Porniți Zookeeper fail over controller în nodul nume activ și nodul nume de așteptare.

Formatați zookeeper fail over controller în Active namenode.

Comanda: HDFS zkfc –formatZK

Formatează ZKFC.

Porniți ZKFC în namenode activ.

Comanda : hadoop-daemon.sh începe zkfc

Introduceți comanda jps pentru a verifica daemonii DFSZkFailoverController.

Porniți ZKFC.

Formatați zookeeper fail over controller în namenode Standby.

Comanda : hdfs zkfc –formatZK

Porniți ZKFC în namenode Standby.

Comanda : hadoop-daemon.sh începe zkfc

Introduceți comanda jps pentru a verifica daemonii DFSZkFailoverController.

Acum verificați starea fiecărui Namenode, care nod este activ sau care nod este în standby folosind comanda de mai jos.

Comanda : hdfs haadmin –getServiceState nn1

Verificați starea fiecărui NameNode.

Acum Verificați starea fiecărui Namenode folosind browserul web.

Deschideți browserul web și introduceți adresa URL de mai jos.

: 50070

Va arăta dacă nodul de nume este activ sau în regim de așteptare.

Nume activ Nod.

Deschideți alt detaliu nod nod folosind browserul web.

Nume nume de așteptare.

cum se convertește dublu în int

În namenodul activ, ucideți daemonul namenod pentru a schimba nodul nume de așteptare în namenod activ.

Introduceți jps în namenode activ și ucideți daemonul.

Comanda: sudo kill -9

ID proces demoni.

ID-ul procesului Namenode este 7606, ucideți namenode-ul.

Comanda : Sudo kill -9 7606

Omoară procesul Name Node

Deschideți cele două noduri prin browserul web și verificați starea.

Detalii Namenode.

Stare NameNode.

Felicitări, ați configurat cu succes un cluster HDFS de înaltă disponibilitate în Hadoop.

Acum că ați înțeles Hadoop High Availability Cluster Architecture, verificați de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul Edureka Big Data Hadoop Certification Training îi ajută pe cursanți să devină experți în HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume și Sqoop folosind cazuri de utilizare în timp real în domeniul Retail, Social Media, Aviație, Turism, Finanțe.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.

window._LQ_ = window._LQ_ || {}

lqQuizModal (fereastră, document, {quizId: 'XAIVp8', baseUrl: 'https: //quiz.leadquizzes.com/',trigger:' exit '}, _LQ_)