Jak nastavit cluster Hadoop s vysokou dostupností HDFS



Tento blog poskytuje přehled architektury vysoké dostupnosti HDFS a toho, jak v jednoduchých krocích nastavit a nakonfigurovat cluster vysoké dostupnosti HDFS.

HDFS 2.x High Availability Cluster Architecture

V tomto blogu budu hovořit o HDFS 2.x High Availability Cluster Architecture a postupu nastavení clusteru HDFS High Availability Cluster.Toto je důležitá součást . Pořadí, ve kterém se tématům tento blog věnuje, je následující:

  • HDFS HA ​​architektura
    • Úvod
    • NameNode Dostupnost
    • Architektura HA
    • Implementace HA (JournalNode a sdílené úložiště)
  • Jak nastavit HA (Quorum Journal Nodes) v klastru Hadoop?

Úvod:

Koncept clusteru High Availability byl představen v Hadoop 2.x vyřešit problém s jediným bodem selhání v Hadoop 1.x. Jak víte z mého předchozího blogu, že následuje topologii Master / Slave, kde NameNode funguje jako hlavní démon a je zodpovědný za správu dalších podřízených uzlů nazývaných DataNodes. Tento jediný hlavní démon nebo NameNode se stává překážkou. Zavedení sekundárního NameNode nám sice zabránilo ve ztrátě dat a odlehčení části zátěže NameNode, ale nevyřešilo problém dostupnosti NameNode.





NameNode Dostupnost:

Pokud vezmete v úvahu standardní konfiguraci clusteru HDFS, stane se NameNode a jediný bod selhání . Stává se to proto, že v okamžiku, kdy se NameNode stane nedostupným, bude celý cluster nedostupný, dokud někdo NameNode restartuje nebo nepřinese nový.

Důvody nedostupnosti NameNode mohou být:



  • Plánovaná událost, jako jsou údržbářské práce, zahrnuje upgrade softwaru nebo hardwaru.
  • Může to být také způsobeno neplánovanou událostí, kdy se NameNode zhroutí z nějakého důvodu.

V jednom z výše uvedených případů máme výpadek, kdy nejsme schopni použít cluster HDFS, který se stává výzvou.

HDFS HA ​​architektura:

Pochopme, že jak HDFS HA ​​Architecture vyřešila tento kritický problém dostupnosti NameNode:

Architektura HA vyřešila tento problém dostupnosti NameNode tím, že nám umožnila mít dva NameNodes v aktivní / pasivní konfiguraci. Takže máme dva běžící NameNodes současně v clusteru High Availability:



  • Aktivní název uzlu
  • Pohotovostní / pasivní název Uzel.

HDFS HA ​​Architecture - High Availability Cluster - Edureka

Pokud jeden NameNode spadne, druhý NameNode může převzít odpovědnost, a proto zkrátit dobu výpadku clusteru. Pohotovostní NameNode slouží k účelu záložního NameNode (na rozdíl od sekundárního NameNode), který zahrnuje možnosti převzetí služeb při selhání do clusteru Hadoop. Proto s StandbyNode můžeme mít automatické převzetí služeb při selhání, kdykoli dojde k chybě NameNode (neplánovaná událost), nebo můžeme mít během doby údržby ladné (ručně zahájené) převzetí služeb při selhání.

Při udržování konzistence v clusteru HDFS High Availability existují dva problémy:

  • Aktivní a pohotovostní NameNode by měly být vždy navzájem synchronizované, tj. Měly by mít stejná metadata. To nám umožní obnovit cluster Hadoop do stejného stavu oboru jmen, kde došlo k jeho havárii, a proto nám poskytne rychlé převzetí služeb při selhání.
  • Aktivní NameNode by měl být vždy jen jeden, protože dva aktivní NameNode povedou k poškození dat. Tento druh scénáře se nazývá scénář split-brain, kdy se klastr rozdělí na menší klastr, přičemž každý z nich věří, že je jediným aktivním klastrem. Aby se předešlo těmto scénářům, provádí se oplocení. Oplocení je proces zajišťující, že v určitém čase zůstane aktivní pouze jeden NameNode.

Implementace HA Architecture:

Nyní víte, že v HDFS HA ​​Architecture máme spuštěny dva NameNodes současně. Můžeme tedy implementovat aktivní a pohotovostní konfiguraci NameNode dvěma způsoby:

  1. Použití uzlů kvora deníku
  2. Sdílené úložiště pomocí NFS

Pojďme pochopit tyto dva způsoby implementace, které berou jeden po druhém:

1. Použití uzlů kvora deníku:

  • Pohotovostní NameNode a aktivní NameNode se navzájem synchronizují prostřednictvím samostatné skupiny uzlů nebo démonů JournalNodes .JournalNodes sleduje topologii prstence, kde jsou uzly navzájem spojeny a tvoří prsten.JournalNode obslouží požadavek, který na něj přijde, a zkopíruje informace do dalších uzlů v kruhu.To poskytuje odolnost proti chybám v případě selhání JournalNode.
  • Aktivní NameNode je zodpovědný za aktualizaci EditLogs (informace o metadatech) přítomných v JournalNodes.
  • StandbyNode přečte změny provedené v EditLogs v JournalNode a použije jej na svůj vlastní jmenný prostor konstantním způsobem.
  • Během převzetí služeb při selhání StandbyNode zajistí, že aktualizoval své metadata informace z JournalNodes, než se stane novým aktivním NameNode. Tím se aktuální stav oboru názvů synchronizuje se stavem před převzetím služeb při selhání.
  • IP adresy obou NameNodes jsou k dispozici všem DataNodes a odesílají své prezenční signály a informace o poloze bloku do obou NameNode. To poskytuje rychlé převzetí služeb při selhání (méně prostojů), protože StandbyNode má aktualizované informace o umístění bloku v klastru.

Oplocení NameNode:

Nyní, jak již bylo zmíněno dříve, je velmi důležité zajistit, aby existoval vždy jen jeden aktivní NameNode. Oplocení je tedy proces zajišťující právě tuto vlastnost v klastru.

  • JournalNodes provádí toto oplocení tím, že umožňuje zapisovat současně pouze jeden NameNode.
  • Pohotovostní NameNode přebírá odpovědnost za zápis do JournalNodes a zakazuje ostatním NameNode zůstat aktivní.
  • A konečně nový Active NameNode může bezpečně provádět své činnosti.

2. Používání sdíleného úložiště:

  • StandbyNode a aktivní NameNode se navzájem synchronizují pomocí a sdílené úložné zařízení .Aktivní NameNode protokoluje záznam jakékoli změny provedené v jeho oboru názvů do EditLog přítomného v tomto sdíleném úložišti.StandbyNode přečte změny provedené v EditLogs v tomto sdíleném úložišti a použije jej na svůj vlastní jmenný prostor.
  • Nyní v případě převzetí služeb při selhání StandbyNode nejprve aktualizuje své informace o metadatech pomocí EditLogs ve sdíleném úložišti. Poté přebírá odpovědnost Active NameNode. Tím se aktuální stav oboru názvů synchronizuje se stavem před převzetím služeb při selhání.
  • Správce musí nakonfigurovat alespoň jednu metodu oplocení, aby se vyhnul scénáři split-brain.
  • Systém může využívat řadu oplocovacích mechanismů. Může to zahrnovat zabití procesu NameNode a zrušení jeho přístupu k adresáři sdíleného úložiště.
  • Jako poslední možnost můžeme ohradit dříve aktivní NameNode technikou známou jako STONITH nebo „vystřelit druhý uzel do hlavy“. STONITH používá specializovanou jednotku pro distribuci energie k nucenému vypnutí stroje NameNode.

Automatické převzetí služeb při selhání:

Failover je postup, při kterém systém automaticky předá kontrolu sekundárnímu systému, když zjistí poruchu nebo poruchu. Existují dva typy převzetí služeb při selhání:

Půvabné převzetí služeb při selhání: V tomto případě ručně zahájíme převzetí služeb při selhání pro rutinní údržbu.

Automatické převzetí služeb při selhání: V tomto případě je převzetí služeb při selhání inicializováno automaticky v případě selhání NameNode (neplánovaná událost).

Apache Zookeeper je služba, která poskytuje schopnost automatického převzetí služeb při selhání v klastru HDFS High Dostupbilty. Udržuje malé množství koordinačních dat, informuje klienty o změnách v těchto datech a monitoruje klienty ohledně selhání. Zookeeper udržuje relaci s NameNodes. V případě selhání relace vyprší a Zookeeper bude informovat ostatní NameNodes o zahájení procesu převzetí služeb při selhání. V případě selhání NameNode může jiný pasivní NameNode v Zookeeper uzamknout, že se chce stát dalším aktivním NameNode.

ZookeerFailoverController (ZKFC) je klient Zookeeper, který také sleduje a spravuje stav NameNode. Každý z NameNode provozuje také ZKFC. ZKFC je zodpovědný za pravidelné monitorování stavu NameNodes.

Nyní, když jste pochopili, co je vysoká dostupnost v clusteru Hadoop, je čas to nastavit. Chcete-li nastavit vysokou dostupnost v klastru Hadoop, musíte použít Zookeeper ve všech uzlech.

Démoni v Active NameNode jsou:

  • Zookeeper
  • Zookeeper Fail Over Controller
  • JournalNode
  • NameNode

Démoni v pohotovostním NameNode jsou:

  • Zookeeper
  • Zookeeper Fail Over Controller
  • JournalNode
  • NameNode

Démoni v DataNode jsou:

  • Zookeeper
  • JournalNode
  • DataNode

Pokud si přejete zvládnout HDFS a Hadoop, podívejte se na speciálně upravený kurz Big Data a Hadoop od Edureky. Začněte kliknutím na tlačítko níže.

Nastavení a konfigurace clusteru s vysokou dostupností v Hadoopu:

Nejprve musíte nastavit názvy Java a hostitele každého uzlu.

Virtuální stroj IP adresa Název hostitele
Aktivní název uzlu192.168.1.81nn1.cluster.com nebo nn1
Pohotovostní název uzlu192.168.1.58nn2.cluster.com nebo nn2
DataNode192.168.1.82dn1.cluster.com nebo dn1

Stáhněte si binární tar soubor Hadoop a Zookeeper, extrahujte soubory a upravte konfigurační soubory.

Příkaz: wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz

Rozšiřte zookeeper-3.4.6.tar.gz

Příkaz : tar –xvf zookeeper-3.4.6.tar.gz

Stáhněte si stabilní binární tar Hadoop ze stránky Apache Hadoop.

Příkaz : wget https://archive.apache.org/dist/hadoop/core/hadoop-2.6.0/hadoop-2.6.0.tar.gz

ukončit program v Javě

Extrahujte dehtovou kouli Hadoop.

Příkaz : tar –xvf hadoop-2.6.0.tar.gz

Rozložte binární soubor hadoop.

Přidejte soubory Hadoop, Zookeeper a cesty do souboru .bashrc.

Otevřete soubor .bashrc.

Příkaz : sudo gedit ~ / .bashrc

Přidejte níže uvedené cesty:

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 / export Hadoop JAVA_HOME = export ZOOKEEPER_HOME = export PATH = $ PATH: $ JAVA_HOME / bin: $ HADOOP_HOME / bin: $ HADOOP_HOME / sbin: $ ZOOKEEPER_HOME / bin

Upravte soubor .bashrc.

Povolte SSH ve všech uzlech.

Vygenerujte klíč SSH ve všech uzlech.

Příkaz : ssh-keygen –t rsa (tento krok ve všech uzlech)

Nastavte klíč SSH ve všech uzlech.

Nezadávejte žádnou cestu k souboru Enter, abyste uložili klíč, a neuvádějte žádnou přístupovou frázi. Stiskněte tlačítko Enter.

Vygenerujte proces ssh klíče ve všech uzlech.

Jakmile je vygenerován ssh klíč, získáte veřejný klíč a soukromý klíč.

Klíčový adresář .ssh by měl obsahovat oprávnění 700 a všechny klíče v adresáři .ssh by měly obsahovat oprávnění 600.

Změňte oprávnění adresáře SSH.

Změňte adresář na .ssh a změňte oprávnění souborů na 600

Změnit oprávnění veřejného a soukromého klíče.

Veřejný klíč Name ssh musíte zkopírovat do všech uzlů.

V aktivním Namenode zkopírujte id_rsa.pub pomocí příkazu cat.

Příkaz : cat ~ / .ssh / id_rsa.pub >> ~ / .ssh / authorized_keys

Zkopírujte klíč Namenode ssh do jeho autorizovaných klíčů.

Zkopírujte veřejný klíč NameNode do všech uzlů pomocí ssh-copy-id příkaz.

Příkaz : ssh-copy-id –i .ssh / id_rsa.pub edureka@nn2.cluster.com

Zkopírujte klíč účelu do pohotovostního NameNode.

Zkopírujte veřejný klíč NameNode do datového uzlu.

Příkaz : ssh-copy-id –i .ssh / id_rsa.pub edureka@dn1.cluster.com

jak na to v Javě

Zkopírujte veřejný klíč Namenode do datového uzlu.

Restartujte službu sshd ve všech uzlech.

Příkaz : sudo service sshd restart (Proveďte ve všech uzlech)

Restartujte službu SSH.

Nyní se můžete přihlásit k libovolnému uzlu z Namenode bez jakéhokoli ověřování.

Otevřete soubor core-site.xml z uzlu Active Name a přidejte níže uvedené vlastnosti.

Upravte core-site.xml z aktivního jmenného uzlu

Otevřete soubor hdfs-site.xml v aktivním Namenode. Přidejte níže uvedené vlastnosti.

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

Změňte adresář na konfigurační adresář zookeeperu.

Příkaz : cd zookeeper-3.4.6 / conf

Adresář Zookeeper Conf.

V adresáři conf máte soubor zoo_sample.cfg, vytvořte zoo.cfg pomocí souboru zoo_sample.cfg.

Příkaz : cp zoo_sample.cfg zoo.cfg

Vytvořte soubor zoo.cfg.

Vytvořte adresář na jakémkoli místě a použijte tento adresář k uložení dat zookeeperu.

Příkaz : mkdir

Vytvořte adresář pro ukládání dat zookeeperu.

Otevřete soubor zoo.cfg.

Příkaz : gedit zoo.cfg

Přidejte cestu k adresáři, která je vytvořena v předchozím kroku, do vlastnosti dataDir a přidejte níže uvedené podrobnosti týkající se zbývajícího uzlu v souboru zoo.cfg.

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

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

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

Upravte soubor zoo.cfg.

Nyní zkopírujte adresáře Java a Hadoop-2.6.0, zookeeper-3.4.6 a soubor .bashrc do všech uzlů (uzel pohotovostního názvu, datový uzel) pomocí příkazu scp.

Příkaz : scp –r edureka @:

Zkopírujte soubory Hadoop, Zookeeper a .bashrc do všech uzlů.

Podobně zkopírujte soubor .bashrc a adresář zookeeper do všech uzlů a změňte proměnné prostředí v každém podle příslušného uzlu.

V datovém uzlu vytvořte libovolný adresář, kam potřebujete ukládat bloky HDFS.

V datovém uzlu musíte přidat vlastnosti dfs.datanode.data.dir.

V mém případě jsem vytvořil datanode adresář pro uložení bloků.

Vytvořte adresář datanode.

Změňte oprávnění k adresáři datových uzlů.

Změňte oprávnění adresáře Datanode.

Otevřete soubor HDFS-site.xml, přidejte tuto cestu k adresáři Datanode ve vlastnosti dfs.datanode.data.dir.

Poznámka: Ponechte všechny vlastnosti, které jsou zkopírovány z aktivního namenode, přidejte dfs.datanode.data.dir jednu vlastnost extraktu do namenode.

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

V aktivním namenode změňte adresář, kam chcete uložit konfigurační soubor zookeeper (cesta vlastnosti dataDir).

Vytvořte soubor myid uvnitř adresáře a přidejte do něj číselnou 1 a uložte soubor.

Příkaz : vi myid

Vytvořte soubor myid.

V pohotovostním jmenném uzlu změňte adresář, kam chcete uložit konfigurační soubor zookeeper (cesta k vlastnosti dataDir).

Vytvořte soubor myid uvnitř adresáře, přidejte do souboru číselnou hodnotu 2 a uložte soubor.

V datovém uzlu změňte adresář, kam chcete uložit konfigurační soubor zookeeper (cesta vlastnosti dataDir).

Vytvořte soubor myid uvnitř adresáře a přidejte do něj číselnou 3 a uložte soubor.

Spusťte Journalnode ve všech třech uzlech.

Příkaz : hadoop-daemon.sh start journalnode

Spusťte Journalnode.

Když zadáte příkaz jps, uvidíte démona JournalNode ve všech uzlech.

NaformátujteAktivní účel.

Příkaz : HDFS zamýšlený -formát

Aktivní formát NameNode.

Spusťte démona Namenode a Active Namedode.

Příkaz : hadoop-daemon.sh počáteční účel

Spusťte Namenode.

Zkopírujte data HDFS Meta z aktivního uzlu názvu do pohotovostního uzlu.

Příkaz : HDFS zamýšlený -bootstrapStandby

Zkopírujte data HDFS Meta z aktivního uzlu názvu do pohotovostního jmenného uzlu.

Po spuštění tohoto příkazu získáte informace, ze kterého uzlu a umístění se meta data kopírují a zda se kopírují úspěšně nebo ne.

Informace o podrobnostech aktivního účelu.

Jakmile jsou metadata zkopírována z aktivního jmenného uzlu do pohotovostního jmenného uzlu, zobrazí se zpráva zobrazená níže na snímku obrazovky.

Informace týkající se HDFS v pohotovostním namenode.

Spusťte démona namenode v pohotovostním režimu namenode.

Příkaz : hadoop-daemon.sh počáteční účel

Nyní spusťte službu Zookeeper ve všech třech uzlech.

Příkaz : zkServer.sh start (Spusťte tento příkaz ve všech uzlech)

Aktivní účel:

Spusťte zookeeper v Active NameNode.

V pohotovostním režimu Namenode:

Spusťte zookeeper v pohotovostním NameNode.

V datovém uzlu:

Spusťte zookeeper v DataNode.

Po spuštění serveru Zookeeper zadejte příkaz JPS. Ve všech uzlech uvidíte službu QuorumPeerMain.

programování soketu tcp v java

Spusťte démona datového uzlu ve stroji datového uzlu.

Příkaz : hadoop-daemon.sh start datanode

V uzlu aktivního jména a uzlu pohotovostního jména spusťte ovladač Zookeeper při selhání.

Naformátujte selhání Zookeeperu přes ovladač v aktivním namenode.

Příkaz: HDFS zkfc –formatZK

Formátovat ZKFC.

Spusťte ZKFC v aktivním namenode.

Příkaz : hadoop-daemon.sh start zkfc

Zadejte příkaz jps a zkontrolujte démony DFSZkFailoverController.

Spusťte ZKFC.

Naformátujte selhání Zookeeperu přes ovladač v pohotovostním jmenném uzlu.

Příkaz : hdfs zkfc –formatZK

Spusťte ZKFC v pohotovostním jmenném uzlu.

Příkaz : hadoop-daemon.sh start zkfc

Zadejte příkaz jps a zkontrolujte démony DFSZkFailoverController.

Nyní pomocí níže uvedeného příkazu zkontrolujte stav každého Namenode, který uzel je aktivní nebo který uzel je v pohotovostním režimu.

Příkaz : hdfs haadmin –getServiceState nn1

Zkontrolujte stav každého NameNode.

Nyní zkontrolujte stav každého Namenode pomocí webového prohlížeče.

Otevřete webový prohlížeč a zadejte níže uvedenou adresu URL.

: 50070

Ukáže, zda je uzel názvu aktivní nebo v pohotovostním režimu.

Aktivní název uzlu.

Otevřete další podrobnosti uzlu názvu pomocí webového prohlížeče.

Pohotovostní název uzlu.

V aktivním namenode zabijte démona namenode a změňte uzel Standby name na aktivní namenode.

Zadejte jps do Active namenode a zabijte démona.

Příkaz: sudo kill -9

ID zpracování démonů.

ID procesu namenode je 7606, zabijte namenode.

Příkaz : Sudo kill -9 7606

Zabijte proces Název uzlu

Otevřete dva uzly pomocí webového prohlížeče a zkontrolujte stav.

Podrobnosti o namenode.

Stav NameNode.

Gratulujeme, úspěšně jste v Hadoopu nastavili HDFS High Availability Cluster.

Nyní, když jste pochopili Hadoop High Availability Cluster Architecture, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů rozložených po celém světě. Kurz certifikace Edureka Big Data Hadoop Certification Training pomáhá studentům stát se odborníky na HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume a Sqoop pomocí případů použití v reálném čase v oblasti maloobchodu, sociálních médií, letectví, cestovního ruchu, financí.

Máte na nás dotaz? Uveďte to prosím v sekci komentáře a my se vám ozveme.

window._LQ_ = window._LQ_ || {}

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