Come configurare Hadoop Cluster con HDFS High Availability



Questo blog fornisce una panoramica dell'architettura HDFS High Availability e come impostare e configurare un cluster HDFS High Availability in semplici passaggi.

Architettura cluster ad alta disponibilità HDFS 2.x

In questo blog, parlerò dell'architettura del cluster ad alta disponibilità HDFS 2.x e della procedura per configurare un cluster HDFS ad alta disponibilità.Questa è una parte importante di . L'ordine in cui gli argomenti sono stati trattati in questo blog è il seguente:

  • Architettura HA HDFS
    • introduzione
    • Disponibilità NameNode
    • Architettura di HA
    • Implementazione di HA (JournalNode e archiviazione condivisa)
  • Come configurare HA (Quorum Journal Nodes) in un cluster Hadoop?

Introduzione:

Il concetto di cluster ad alta disponibilità è stato introdotto in Hadoop 2.x per risolvere il problema del singolo punto di errore in Hadoop 1.x. Come saprai dal mio precedente blog che il file segue la topologia master / slave dove NameNode funge da daemon master ed è responsabile della gestione di altri nodi slave chiamati DataNode. Questo singolo Master Daemon o NameNode diventa un collo di bottiglia. Sebbene l'introduzione di Secondary NameNode ci abbia impedito di perdere dati e di scaricare parte del carico di NameNode, ma non ha risolto il problema di disponibilità di NameNode.





Disponibilità NameNode:

Se si considera la configurazione standard del cluster HDFS, NameNode diventa un file unico punto di errore . Succede perché nel momento in cui il NameNode diventa non disponibile, l'intero cluster diventa non disponibile fino a quando qualcuno non riavvia il NameNode o ne porta uno nuovo.

I motivi di indisponibilità di NameNode possono essere:



  • Un evento pianificato come un lavoro di manutenzione come l'aggiornamento del software o dell'hardware.
  • Potrebbe anche essere dovuto a un evento non pianificato in cui il NameNode si arresta in modo anomalo per alcuni motivi.

In entrambi i casi precedenti, si verificano tempi di inattività in cui non siamo in grado di utilizzare il cluster HDFS, il che diventa una sfida.

Architettura HA HDFS:

Cerchiamo di capire come l'architettura HDFS HA ​​ha risolto questo problema critico della disponibilità di NameNode:

L'architettura HA ha risolto questo problema di disponibilità dei NameNode permettendoci di avere due NameNode in una configurazione attiva / passiva. Quindi, abbiamo due NameNode in esecuzione contemporaneamente in un cluster ad alta disponibilità:



  • NameNode attivo
  • Standby / Passive NameNode.

Architettura HA HDFS - Cluster ad alta disponibilità - Edureka

Se un NameNode non funziona, l'altro NameNode può assumersi la responsabilità e quindi ridurre il tempo di inattività del cluster. Il NameNode in standby ha lo scopo di un NameNode di backup (a differenza del NameNode secondario) che incorpora funzionalità di failover nel cluster Hadoop. Pertanto, con StandbyNode, possiamo avere un failover automatico ogni volta che un NameNode si arresta in modo anomalo (evento non pianificato) o possiamo avere un failover grazioso (avviato manualmente) durante il periodo di manutenzione.

cosa fa trim in java

Esistono due problemi nel mantenere la coerenza nel cluster HDFS ad alta disponibilità:

  • Il NameNode attivo e in standby dovrebbero essere sempre sincronizzati tra loro, ovvero dovrebbero avere gli stessi metadati. Questo ci consentirà di ripristinare il cluster Hadoop allo stesso stato dello spazio dei nomi in cui è stato arrestato in modo anomalo e, pertanto, ci fornirà un failover rapido.
  • Dovrebbe esserci un solo NameNode attivo alla volta perché due NameNode attivi porteranno alla corruzione dei dati. Questo tipo di scenario è definito come uno scenario split-brain in cui un cluster viene diviso in cluster più piccoli, ognuno credendo che sia l'unico cluster attivo. Per evitare tali scenari si fa scherma. La scherma è un processo per garantire che solo un NameNode rimanga attivo in un determinato momento.

Implementazione dell'architettura HA:

Ora, sai che nell'architettura HA HDFS, abbiamo due NameNode in esecuzione contemporaneamente. Quindi, possiamo implementare la configurazione NameNode attivo e in standby nei seguenti due modi:

  1. Utilizzo dei nodi journal quorum
  2. Archiviazione condivisa utilizzando NFS

Cerchiamo di capire questi due modi di implementazione prendendone uno alla volta:

1. Utilizzo dei nodi journal quorum:

  • Il NameNode in standby e il NameNode attivo si mantengono sincronizzati tra loro attraverso un gruppo separato di nodi o daemon, chiamato JournalNodes .JournalNodes segue la topologia ad anello in cui i nodi sono collegati tra loro per formare un anello.Il JournalNode serve la richiesta in arrivo e copia le informazioni in altri nodi nell'anello.Ciò fornisce tolleranza agli errori in caso di errore di JournalNode.
  • Il NameNode attivo è responsabile dell'aggiornamento degli EditLogs (informazioni sui metadati) presenti nei JournalNode.
  • Lo StandbyNode legge le modifiche apportate agli EditLogs nel JournalNode e le applica al proprio spazio dei nomi in modo costante.
  • Durante il failover, StandbyNode si assicura di aver aggiornato le informazioni sui metadati dai JournalNode prima di diventare il nuovo Active NameNode. Ciò rende lo stato dello spazio dei nomi corrente sincronizzato con lo stato prima del failover.
  • Gli indirizzi IP di entrambi i NameNode sono disponibili per tutti i DataNode e inviano i loro heartbeat e bloccano le informazioni sulla posizione a entrambi i NameNode. Ciò fornisce un rapido failover (meno tempo di inattività) poiché StandbyNode dispone di informazioni aggiornate sulla posizione del blocco nel cluster.

Recinzione di NameNode:

Ora, come discusso in precedenza, è molto importante assicurarsi che sia presente un solo NameNode attivo alla volta. Quindi, la scherma è un processo per garantire questa stessa proprietà in un cluster.

  • Il JournalNode esegue questa schermatura consentendo a un solo NameNode di essere l'autore alla volta.
  • Lo Standby NameNode si assume la responsabilità di scrivere ai JournalNode e proibisce a qualsiasi altro NameNode di rimanere attivo.
  • Infine, il nuovo Active NameNode può svolgere le sue attività in sicurezza.

2. Utilizzo dell'archiviazione condivisa:

  • Lo StandbyNode e il NameNode attivo si sincronizzano tra loro utilizzando un file dispositivo di archiviazione condiviso .Il NameNode attivo registra il record di qualsiasi modifica eseguita nel suo spazio dei nomi in un EditLog presente in questo archivio condiviso.Lo StandbyNode legge le modifiche apportate agli EditLogs in questa memoria condivisa e le applica al proprio spazio dei nomi.
  • Ora, in caso di failover, lo StandbyNode aggiorna le sue informazioni sui metadati utilizzando inizialmente gli EditLogs nell'archivio condiviso. Quindi, si assume la responsabilità del NameNode attivo. Ciò rende lo stato dello spazio dei nomi corrente sincronizzato con lo stato prima del failover.
  • L'amministratore deve configurare almeno un metodo di scherma per evitare uno scenario di cervello diviso.
  • Il sistema può impiegare una serie di meccanismi di recinzione. Può includere l'uccisione del processo di NameNode e la revoca del suo accesso alla directory di archiviazione condivisa.
  • Come ultima risorsa, possiamo recintare il NameNode precedentemente attivo con una tecnica nota come STONITH, o 'sparare all'altro nodo in testa'. STONITH utilizza un'unità di distribuzione dell'alimentazione specializzata per spegnere forzatamente la macchina NameNode.

Failover automatico:

Il failover è una procedura mediante la quale un sistema trasferisce automaticamente il controllo al sistema secondario quando rileva un guasto o un guasto. Esistono due tipi di failover:

Graceful Failover: In questo caso, iniziamo manualmente il failover per la manutenzione ordinaria.

Failover automatico: In questo caso, il failover viene avviato automaticamente in caso di errore di NameNode (evento non pianificato).

Apache Zookeeper è un servizio che fornisce la funzionalità di failover automatico nel cluster HDFS ad alta disponibilità. Mantiene piccole quantità di dati di coordinamento, informa i clienti delle modifiche in quei dati e monitora i client per gli errori. Zookeeper mantiene una sessione con i NameNode. In caso di errore, la sessione scadrà e lo Zookeeper informerà gli altri NameNode per avviare il processo di failover. In caso di errore di NameNode, un altro NameNode passivo può richiedere un blocco in Zookeeper affermando che vuole diventare il successivo NameNode attivo.

Lo ZookeerFailoverController (ZKFC) è un client Zookeeper che monitora e gestisce anche lo stato NameNode. Ogni NameNode esegue anche uno ZKFC. ZKFC è responsabile del monitoraggio periodico dell'integrità dei NameNode.

Ora che hai capito cos'è l'alta disponibilità in un cluster Hadoop, è il momento di configurarlo. Per impostare l'alta disponibilità nel cluster Hadoop devi utilizzare Zookeeper in tutti i nodi.

I daemon in Active NameNode sono:

  • Zookeeper
  • Controller di failover di Zookeeper
  • JournalNode
  • NameNode

I daemon in Standby NameNode sono:

  • Zookeeper
  • Controller di failover di Zookeeper
  • JournalNode
  • NameNode

I daemon in DataNode sono:

  • Zookeeper
  • JournalNode
  • DataNode

Se desideri padroneggiare HDFS e Hadoop, dai un'occhiata al corso Big Data e Hadoop di Edureka appositamente curato. Fare clic sul pulsante in basso per iniziare.

Impostazione e configurazione del cluster ad alta disponibilità in Hadoop:

È necessario prima impostare Java e i nomi host di ogni nodo.

Macchina virtuale indirizzo IP Nome host
NameNode attivo192.168.1.81nn1.cluster.com o nn1
Standby NameNode192.168.1.58nn2.cluster.com o nn2
DataNode192.168.1.82dn1.cluster.com o dn1

Scarica il file tar binario di Hadoop e Zookeeper, estrai i file per modificare i file di configurazione.

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

Diffondi il guardiano dello zoo-3.4.6.tar.gz

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

Scarica il tar binario stabile di Hadoop dal sito Apache Hadoop.

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

Estrai la palla di catrame di Hadoop.

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

Diffondi binario hadoop.

Aggiungi Hadoop, Zookeeper e percorsi al file .bashrc.

Apri il file .bashrc.

Comando : sudo gedit ~ / .bashrc

Aggiungi i seguenti percorsi:

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

Modifica il file .bashrc.

Abilita SSH in tutto il nodo.

Genera la chiave SSH in tutti i nodi.

Comando : ssh-keygen –t rsa (Questo passaggio in tutti i nodi)

Imposta la chiave SSH in tutti i nodi.

Non fornire alcun percorso al file Invio per salvare la chiave e non fornire alcuna passphrase. Premere il pulsante Invio.

Genera il processo della chiave ssh in tutti i nodi.

Una volta generata la chiave ssh, otterrai la chiave pubblica e la chiave privata.

La directory delle chiavi .ssh dovrebbe contenere l'autorizzazione 700 e tutte le chiavi all'interno della directory .ssh dovrebbero contenere le autorizzazioni 600.

Modifica l'autorizzazione della directory SSH.

Cambia la directory in .ssh e cambia l'autorizzazione dei file in 600

Modificare l'autorizzazione della chiave pubblica e privata.

Devi copiare la chiave pubblica SSH dei nodi di nome su tutti i nodi.

In Active Namenode, copia id_rsa.pub utilizzando il comando cat.

Comando : cat ~ / .ssh / id_rsa.pub >> ~ / .ssh / authorized_keys

Copia la chiave ssh Namenode nelle sue chiavi autorizzate.

Copia la chiave pubblica NameNode su tutti i nodi che utilizzano ssh-copy-id comando.

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

Copia la chiave dello scopo in Standby NameNode.

Copia la chiave pubblica NameNode nel nodo dati.

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

Copia la chiave pubblica Namenode nel nodo dati.

Riavvia il servizio sshd in tutti i nodi.

Comando : sudo service sshd restart (fai in tutti i nodi)

Riavvia il servizio SSH.

Ora puoi accedere a qualsiasi nodo da Namenode senza alcuna autenticazione.

Apri il file core-site.xml dal nodo Nome attivo e aggiungi le proprietà seguenti.

Modifica core-site.xml da Active namenode

Apri il file hdfs-site.xml in Active Namenode. Aggiungi le seguenti proprietà.

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

Cambia la directory nella directory conf del guardiano dello zoo.

Comando : cd zookeeper-3.4.6 / conf

array di oggetti nel programma di esempio Java

Directory di Zookeeper Conf.

In una directory conf hai il file zoo_sample.cfg, crea lo zoo.cfg usando il file zoo_sample.cfg.

Comando : cp zoo_sample.cfg zoo.cfg

Crea il file zoo.cfg.

Crea la directory in qualsiasi posizione e usa questa directory per archiviare i dati del guardiano dello zoo.

Comando : mkdir

Crea una directory per archiviare i dati del guardiano dello zoo.

Apri il file zoo.cfg.

Comando : gedit zoo.cfg

Aggiungere il percorso della directory creato nel passaggio precedente alla proprietà dataDir e aggiungere i dettagli di seguito relativi al nodo rimanente, nel file zoo.cfg.

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

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

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

Modifica il file zoo.cfg.

Ora copia le directory Java e Hadoop-2.6.0, zookeeper-3.4.6 e il file .bashrc su tutti i nodi (nodo nome standby, nodo dati) utilizzando il comando scp.

Comando : scp –r edureka @:

Copia il file Hadoop, Zookeeper e .bashrc su tutti i nodi.

Allo stesso modo, copia il file .bashrc e la directory zookeeper su tutti i nodi e modifica le variabili di ambiente in ciascuno in base al rispettivo nodo.

In un nodo dati, creare una directory in cui è necessario memorizzare i blocchi HDFS.

In un nodo dati, è necessario aggiungere le proprietà dfs.datanode.data.dir.

Nel mio caso, ho creato datanode directory per memorizzare i blocchi.

Crea la directory Datanode.

Modificare l'autorizzazione alla directory del nodo dati.

Modifica autorizzazione directory Datanode.

Aprire il file HDFS-site.xml, aggiungere questo percorso della directory Datanode nella proprietà dfs.datanode.data.dir.

Nota: mantenere tutte le proprietà copiate dal namenode attivo, aggiungere dfs.datanode.data.dir una proprietà di estrazione in namenode.

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

In Active namenode, modificare la directory in cui si desidera memorizzare il file di configurazione del guardiano dello zoo (percorso della proprietà dataDir).

Crea il file myid all'interno della directory e aggiungi il numero 1 al file e salva il file.

Comando : vi myid

Crea file myid.

In un namenode in standby, modificare la directory in cui si desidera memorizzare il file di configurazione del guardiano dello zoo (percorso della proprietà dataDir).

Crea il file myid all'interno della directory e aggiungi il numero 2 al file e salva il file.

In un nodo dati, modificare la directory in cui si desidera memorizzare il file di configurazione del guardiano dello zoo (percorso della proprietà dataDir).

Crea il file myid all'interno della directory e aggiungi il numero 3 al file e salva il file.

Avvia il Journalnode in tutti e tre i nodi.

Comando : hadoop-daemon.sh avvia journalnode

Avvia il Journalnode.

Quando inserisci il comando jps, vedrai il demone JournalNode in tutti i nodi.

Formatta il fileScopo attivo.

Comando : Formato HDFS previsto

Formato NameNode attivo.

Avvia il demone Namenode e Active Namedode.

Comando : hadoop-daemon.sh scopo di avvio

Avvia Namenode.

Copia i metadati HDFS dal nodo del nome attivo al nodo del nome in standby.

Comando : HDFS previsto -bootstrapStandby

Copia i metadati HDFS dal nodo del nome attivo al Namenode in standby.

Una volta eseguito questo comando, otterrai le informazioni da quale nodo e posizione vengono copiati i metadati e se vengono copiati correttamente o meno.

Informazioni sui dettagli dello scopo attivo.

Una volta copiati i metadati da Active namenode a standby namenode, verrà visualizzato il messaggio mostrato di seguito nello screenshot.

Informazioni su HDFS in Standby Namenode.

Avvia il demone namenode nella macchina namenode in standby.

Comando : hadoop-daemon.sh scopo di avvio

Ora avvia il servizio Zookeeper in tutti e tre i nodi.

Comando : zkServer.sh start (Esegui questo comando in tutti i nodi)

A scopo attivo:

Avvia il guardiano dello zoo in Active NameNode.

In Standby Namenode:

Avvia il guardiano dello zoo in standby NameNode.

Nel nodo dati:

Avvia il guardiano dello zoo in DataNode.

Dopo aver eseguito il server Zookeeper, inserisci il comando JPS. In tutti i nodi vedrai il servizio QuorumPeerMain.

Avviare il daemon del nodo dati nella macchina del nodo dati.

Comando : hadoop-daemon.sh avvia datanode

Avvia il controller di failover dello Zookeeper nel nodo del nome attivo e nel nodo del nome standby.

Formatta il controller di failover del guardiano dello zoo in Active namenode.

Comando: HDFS zkfc –formatZK

Formato ZKFC.

Avvia ZKFC in Active namenode.

Comando : hadoop-daemon.sh avvia zkfc

Immettere il comando jps per controllare i daemon DFSZkFailoverController.

Avvia ZKFC.

Formatta il controller di failover del custode dello zoo in Standby namenode.

Comando : hdfs zkfc –formatZK

Avvia ZKFC in modalità standby.

Comando : hadoop-daemon.sh avvia zkfc

Immettere il comando jps per controllare i daemon DFSZkFailoverController.

come impostare classpath in Windows 10

Ora controlla lo stato di ogni Namenode, quale nodo è Attivo o quale nodo è in Standby utilizzando il comando seguente.

Comando : hdfs haadmin –getServiceState nn1

Controlla lo stato di ogni NameNode.

Ora controlla lo stato di ogni Namenode utilizzando il browser web.

Apri il browser Web e inserisci l'URL seguente.

: 50070

Mostrerà se il nodo del nome è attivo o in standby.

NameNode attivo.

Aprire i dettagli di un altro nodo del nome utilizzando il browser Web.

Standby NameNode.

In Active namenode, uccidere il daemon namenode per cambiare il nodo del nome Standby in active namenode.

Immettere jps in Active namenode e uccidere il daemon.

Comando: sudo kill -9

ID processo demoni.

L'ID del processo Namenode è 7606, elimina il namenode.

Comando : Sudo kill -9 7606

Termina il processo Name Node

Apri i due nodi tramite browser web e controlla lo stato.

Dettagli namenode.

Stato NameNode.

Congratulazioni, hai configurato correttamente un cluster ad alta disponibilità HDFS in Hadoop.

Ora che hai compreso l'architettura del cluster ad alta disponibilità di Hadoop, controlla il da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione per la certificazione Edureka Big Data Hadoop aiuta gli studenti a diventare esperti in HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume e Sqoop utilizzando casi d'uso in tempo reale nel settore Retail, Social Media, Aviation, Tourism, Finance.

Hai domande per noi? Per favore menzionalo nella sezione commenti e ti risponderemo.

window._LQ_ = window._LQ_ || {}

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