1. Einführung in HochverfügbarkeitHadoop High Availability ist in HDFS High Availability und YARN High Availability unterteilt. Die Implementierung der beiden ist grundsätzlich ähnlich, aber der HDFS NameNode hat viel höhere Anforderungen an Datenspeicherung und Konsistenz als der YARN ResourceManager, sodass seine Implementierung auch komplizierter ist. Daher erklären wir es zunächst: 1.1 Hochverfügbare GesamtarchitekturDie HDFS-Hochverfügbarkeitsarchitektur sieht wie folgt aus: Bildquelle: https://www.edureka.co/blog/how-to-set-up-hadoop-cluster-with-hdfs-high-availability/ Die HDFS-Hochverfügbarkeitsarchitektur besteht hauptsächlich aus den folgenden Komponenten: Aktiver NameNode und Standby-NameNode: Zwei NameNodes bilden ein gemeinsames Backup, einer befindet sich im aktiven Zustand und ist der primäre NameNode, der andere befindet sich im Standby-Zustand und ist der Backup-NameNode. Nur der primäre NameNode kann Lese- und Schreibdienste für die Außenwelt bereitstellen.
1.2 Analyse des Datensynchronisierungsmechanismus eines gemeinsam genutzten Speichersystems basierend auf QJMDerzeit unterstützt Hadoop die Verwendung von Quorum Journal Manager (QJM) oder Network File System (NFS) als gemeinsam genutztes Speichersystem. Hier wird der QJM-Cluster als Beispiel verwendet: Der Active NameNode übermittelt das EditLog zuerst an den JournalNode-Cluster, und dann synchronisiert der Standby NameNode das EditLog in regelmäßigen Abständen vom JournalNode-Cluster. Wenn der Active NameNode ausfällt, kann der Standby NameNode externe Dienste bereitstellen, nachdem bestätigt wurde, dass die Metadaten vollständig synchronisiert sind. Es ist zu beachten, dass das Schreiben von EditLog in den JournalNode-Cluster der Strategie „Erfolg, wenn mehr als die Hälfte der Einträge geschrieben sind“ folgt, sodass Sie mindestens 3 JournalNode-Knoten haben müssen. Natürlich können Sie die Anzahl der Knoten weiter erhöhen, aber die Gesamtzahl der Knoten sollte eine ungerade Zahl sein. Wenn gleichzeitig 2N+1 JournalNodes vorhanden sind, kann gemäß dem Prinzip des Mehrheitsschreibens ein Ausfall von höchstens N JournalNodes toleriert werden. 1.3 NameNode Aktiv/Standby UmschaltungDer Vorgang, mit dem NameNode die Aktiv/Standby-Umschaltung implementiert, ist in der folgenden Abbildung dargestellt: Nachdem HealthMonitor initialisiert wurde, startet er einen internen Thread, um regelmäßig die Methode der HAServiceProtocol RPC-Schnittstelle aufzurufen, die dem NameNode entspricht, um den Integritätsstatus des NameNode zu ermitteln. Wenn der HealthMonitor feststellt, dass sich der Integritätsstatus des NameNode geändert hat, ruft er zur Verarbeitung die entsprechende vom ZKFailoverController registrierte Methode zurück. Wenn ZKFailoverController feststellt, dass eine Aktiv/Standby-Umschaltung erforderlich ist, verwendet es zunächst ActiveStandbyElector, um die Aktiv/Standby-Knoten automatisch auszuwählen. ActiveStandbyElector interagiert mit Zookeeper, um die automatische Master-Slave-Wahl durchzuführen. Nachdem die Master/Slave-Wahl abgeschlossen ist, ruft ActiveStandbyElector die entsprechende Methode von ZKFailoverController zurück, um den aktuellen NameNode zu benachrichtigen, dass er zum Master-NameNode oder zum Standby-NameNode werden soll. ZKFailoverController ruft die Methode der HAServiceProtocol RPC-Schnittstelle des entsprechenden NameNode auf, um den NameNode in den aktiven oder Standby-Zustand zu versetzen. 1.4 Hohe YARN-VerfügbarkeitDie hohe Verfügbarkeit von YARN ResourceManager ist mit der von HDFS NameNode vergleichbar, aber im Gegensatz zu NameNode muss ResourceManager nicht so viele Metadateninformationen verwalten, sodass seine Statusinformationen direkt in Zookeeper geschrieben werden können und sich bei der Master-Slave-Wahl auf Zookeeper verlassen können. 2. ClusterplanungGemäß dem Entwurfsziel der hohen Verfügbarkeit müssen mindestens zwei NameNodes (einer aktiv und einer im Standby-Modus) und zwei ResourceManager (einer aktiv und einer im Standby-Modus) sichergestellt werden. Gleichzeitig müssen mindestens 3 JournalNode-Knoten vorhanden sein, um das Prinzip „mehr als die Hälfte der Schreibvorgänge sind erfolgreich“ zu erfüllen. Für den Aufbau werden hier drei Hosts verwendet und die Clusterplanung sieht wie folgt aus: 3. Voraussetzungen Auf allen Servern ist JDK installiert. Installationsschritte finden Sie unter: JDK-Installation unter Linux ; Einrichten des ZooKeeper-Clusters. Aufbauschritte finden Sie unter: Aufbau einer Zookeeper-Standalone-Umgebung und einer Clusterumgebung . Zwischen allen Servern ist eine passwortfreie SSH-Anmeldung konfiguriert.4. Cluster-Konfiguration4.1 Herunterladen und entpacken Laden Sie Hadoop herunter. Hier habe ich die CDH-Version von Hadoop heruntergeladen, die Download-Adresse lautet: http://archive.cloudera.com/cdh5/cdh/5/
4.2 Umgebungsvariablen konfigurieren Bearbeiten Sie die Fügen Sie die folgende Konfiguration hinzu: Führen Sie den 4.3 Konfiguration ändern Gehen Sie zum Verzeichnis 1. hadoop-env.sh 2. core-site.xml <Konfiguration> <Eigenschaft> <!-- Geben Sie die Kommunikationsadresse des HDFS-Protokolldateisystems des Namenodes an --> <name>fs.defaultFS</name> <Wert>hdfs://hadoop001:8020</Wert> </Eigenschaft> <Eigenschaft> <!-- Geben Sie das Verzeichnis an, in dem der Hadoop-Cluster temporäre Dateien speichert --> <name>hadoop.tmp.dir</name> <Wert>/home/hadoop/tmp</Wert> </Eigenschaft> <Eigenschaft> <!-- Adresse des ZooKeeper-Clusters --> <name>ha.zookeeper.quorum</name> <Wert>hadoop001:2181,hadoop002:2181,hadoop002:2181</Wert> </Eigenschaft> <Eigenschaft> <!-- ZKFC verbindet sich mit ZooKeeper, Timeout --> <name>ha.zookeeper.session-timeout.ms</name> <Wert>10000</Wert> </Eigenschaft> </Konfiguration> 3. hdfs-site.xml <Konfiguration> <Eigenschaft> <!-- Geben Sie die Anzahl der HDFS-Replikate an --> <name>dfs.replikation</name> <Wert>3</Wert> </Eigenschaft> <Eigenschaft> <!-- Der Speicherort der Namenode-Knotendaten (d. h. Metadaten). Sie können mehrere Verzeichnisse angeben, um Fehlertoleranz zu erreichen. Mehrere Verzeichnisse werden durch Kommas getrennt. --> <name>dfs.namenode.name.dir</name> <Wert>/home/hadoop/namenode/data</Wert> </Eigenschaft> <Eigenschaft> <!-- Speicherort der Datanode-Knotendaten (d. h. Datenblöcke) --> <name>dfs.datanode.data.dir</name> <Wert>/home/hadoop/datanode/data</Wert> </Eigenschaft> <Eigenschaft> <!-- Logischer Name des Clusterdienstes --> <name>dfs.nameservices</name> <Wert>meinCluster</Wert> </Eigenschaft> <Eigenschaft> <!-- NameNode-ID-Liste --> <name>dfs.ha.namenodes.mycluster</name> <Wert>nn1,nn2</Wert> </Eigenschaft> <Eigenschaft> <!-- nn1s RPC-Kommunikationsadresse --> <name>dfs.namenode.rpc-adresse.mycluster.nn1</name> <Wert>hadoop001:8020</Wert> </Eigenschaft> <Eigenschaft> <!-- nn2s RPC-Kommunikationsadresse --> <name>dfs.namenode.rpc-adresse.mycluster.nn2</name> <Wert>hadoop002:8020</Wert> </Eigenschaft> <Eigenschaft> <!-- nn1s HTTP-Kommunikationsadresse --> <name>dfs.namenode.http-adresse.mycluster.nn1</name> <Wert>hadoop001:50070</Wert> </Eigenschaft> <Eigenschaft> <!-- nn2s HTTP-Kommunikationsadresse --> <name>dfs.namenode.http-adresse.mycluster.nn2</name> <Wert>hadoop002:50070</Wert> </Eigenschaft> <Eigenschaft> <!-- Gemeinsam genutztes Speicherverzeichnis für NameNode-Metadaten auf JournalNode --> <name>dfs.namenode.shared.edits.dir</name> <Wert>qjournal://hadoop001:8485;hadoop002:8485;hadoop003:8485/mycluster</Wert> </Eigenschaft> <Eigenschaft> <!-- Speicherverzeichnis für Journal-Editierdateien --> <name>dfs.journalnode.edits.dir</name> <Wert>/home/hadoop/journalnode/data</Wert> </Eigenschaft> <Eigenschaft> <!-- Konfigurieren Sie den Isolationsmechanismus, um sicherzustellen, dass immer nur ein NameNode aktiv ist --> <name>dfs.ha.fencing.methods</name> <Wert>sshfence</Wert> </Eigenschaft> <Eigenschaft> <!-- Bei Verwendung des SSHfence-Mechanismus ist eine passwortfreie SSH-Anmeldung erforderlich--> <name>dfs.ha.fencing.ssh.private-key-files</name> <Wert>/root/.ssh/id_rsa</Wert> </Eigenschaft> <Eigenschaft> <!-- SSH-Zeitüberschreitung --> <name>dfs.ha.fencing.ssh.connect-timeout</name> <Wert>30000</Wert> </Eigenschaft> <Eigenschaft> <!-- Zugriffsproxyklasse, die verwendet wird, um den NameNode zu bestimmen, der sich derzeit im aktiven Status befindet --> <name>dfs.client.failover.proxy.provider.mycluster</name> <Wert>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</Wert> </Eigenschaft> <Eigenschaft> <!-- Automatisches Failover aktivieren --> <name>dfs.ha.automatic-failover.enabled</name> <Wert>wahr</Wert> </Eigenschaft> </Konfiguration> 4. yarn-site.xml <Konfiguration> <Eigenschaft> <!--Konfigurieren Sie die auf dem NodeManager ausgeführten Hilfsdienste. MapReduce-Programme können auf Yarn erst ausgeführt werden, nachdem mapreduce_shuffle konfiguriert wurde. --> <name>yarn.nodemanager.aux-services</name> <Wert>mapreduce_shuffle</Wert> </Eigenschaft> <Eigenschaft> <!-- Ob die Protokollaggregation aktiviert werden soll (optional) --> <name>yarn.log-aggregation-enable</name> <Wert>wahr</Wert> </Eigenschaft> <Eigenschaft> <!-- Aggregierte Protokollspeicherzeit (optional) --> <name>yarn.log-aggregation.retain-seconds</name> <Wert>86400</Wert> </Eigenschaft> <Eigenschaft> <!-- RM HA aktivieren --> <name>yarn.resourcemanager.ha.aktiviert</name> <Wert>wahr</Wert> </Eigenschaft> <Eigenschaft> <!-- RM-Clusterkennung --> <name>Garn.Resourcemanager.Cluster-ID</name> <Wert>mein-Garn-Cluster</Wert> </Eigenschaft> <Eigenschaft> <!-- RM logische ID-Liste --> <name>garn.resourcemanager.ha.rm-ids</name> <Wert>rm1,rm2</Wert> </Eigenschaft> <Eigenschaft> <!-- RM1-Serviceadresse --> <name>garn.resourcemanager.hostname.rm1</name> <Wert>hadoop002</Wert> </Eigenschaft> <Eigenschaft> <!-- RM2-Serviceadresse --> <name>yarn.resourcemanager.hostname.rm2</name> <Wert>hadoop003</Wert> </Eigenschaft> <Eigenschaft> <!-- Adresse der RM1-Webanwendung --> <name>yarn.resourcemanager.webapp.address.rm1</name> <Wert>hadoop002:8088</Wert> </Eigenschaft> <Eigenschaft> <!-- Adresse der RM2-Webanwendung --> <name>yarn.resourcemanager.webapp.address.rm2</name> <Wert>hadoop003:8088</Wert> </Eigenschaft> <Eigenschaft> <!-- Adresse des ZooKeeper-Clusters --> <name>yarn.resourcemanager.zk-Adresse</name> <Wert>hadoop001:2181,hadoop002:2181,hadoop003:2181</Wert> </Eigenschaft> <Eigenschaft> <!-- Automatische Wiederherstellung aktivieren --> <name>yarn.resourcemanager.recovery.aktiviert</name> <Wert>wahr</Wert> </Eigenschaft> <Eigenschaft> <!-- Klasse für persistenten Speicher--> <name>Garn.ResourceManager.Store.Klasse</name> <Wert>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</Wert> </Eigenschaft> </Konfiguration> 5. mapred-site.xml <Konfiguration> <Eigenschaft> <!--Geben Sie den MapReduce-Job an, der auf YARN ausgeführt werden soll--> <name>mapreduce.framework.name</name> <value>Garn</value> </Eigenschaft> </Konfiguration> 5. Sklaven Konfigurieren Sie die Hostnamen oder IP-Adressen aller Slave-Knoten, einen pro Zeile.
4.4 VerteilungsverfahrenVerteilen Sie das Hadoop-Installationspaket auf die beiden anderen Server. Nach der Verteilung wird empfohlen, die Hadoop-Umgebungsvariablen auf den beiden Servern zu konfigurieren. # Verteilen Sie das Installationspaket an hadoop002 scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop002:/usr/app/ # Verteilen Sie das Installationspaket an hadoop003 scp -r /usr/app/hadoop-2.6.0-cdh5.15.2/ hadoop003:/usr/app/ 5.1 ZooKeeper startenStarten Sie den ZooKeeper-Dienst jeweils auf den drei Servern:
5.2 Journalnode starten Gehen Sie zum Verzeichnis 5.3 NameNode initialisieren Führen Sie den Nach der Ausführung des Initialisierungsbefehls müssen Sie den Inhalt des
5.4 HA-Status initialisieren Verwenden Sie den folgenden Befehl auf einem beliebigen 5.5 HDFS starten Gehen Sie zum Verzeichnis 5.6 YARN starten Gehen Sie zum Verzeichnis Es ist zu beachten, dass der 6. Den Cluster anzeigen6.1 Prozess anzeigenNach einem erfolgreichen Start sollte der Ablauf auf jedem Server wie folgt ablaufen: [root@hadoop001 sbin]# jps 4512 DFSZKFailoverController 3714 Journalknoten 4114 NameNode 3668 QuorumPeerMain 5012 Datenknoten 4639 KnotenManager [root@hadoop002 sbin]# jps 4499 RessourcenManager 4595 KnotenManager 3465 QuorumPeerMain 3705 NameNode 3915 DFSZKFailoverController 5211 Datenknoten 3533 Journalknoten [root@hadoop003 sbin]# jps 3491 Journalknoten 3942 KnotenManager 4102 RessourcenManager 4201 Datenknoten 3435 QuorumPeerMain 6.2 Web-Benutzeroberfläche anzeigen Die Portnummern von HDFS und YARN sind Zu diesem Zeitpunkt befindet sich Gleichzeitig verfügt die Schnittstelle auch über relevante Informationen zum 7. Sekundärstart des ClustersDer erste Start des oben genannten Clusters erfordert einige notwendige Initialisierungsvorgänge, daher ist der Vorgang etwas umständlich. Sobald der Cluster jedoch erstellt ist, ist es praktisch, ihn wieder zu aktivieren. Die Schritte sind wie folgt (stellen Sie zunächst sicher, dass der ZooKeeper-Cluster gestartet ist): Starten Sie HDFS in Starten Sie YARN in Zu diesem Zeitpunkt ist der Verweise Die oben genannten Konstruktionsschritte sind hauptsächlich aus der offiziellen Dokumentation entnommen: Hohe Verfügbarkeit von HDFS mithilfe des Quorum Journal Managers Hohe Verfügbarkeit von ResourceManager Zusammenfassen Das Obige ist ein Tutorial zum Erstellen eines Hadoop-Hochverfügbarkeitsclusters basierend auf ZooKeeper. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
>>: Detaillierte Erklärung der jQuery-Kettenaufrufe
Inhaltsverzeichnis 1. Was ist Array-Flattening? 2...
Fragen zu Select-Elementen in HTML wurden an viel...
Vorwort In diesem Artikel werden einige Implement...
1. Überprüfen und installieren Sie pssh, yum list...
Vorwort Es gibt die folgenden Möglichkeiten, gepl...
In diesem Artikelbeispiel wird der spezifische Ja...
Weil ich in diesem Fall das Wort Übergang falsch ...
Inhaltsverzeichnis Was ist Docker Compose Anforde...
SQL UNIQUE-Einschränkung Die UNIQUE-Einschränkung...
In letzter Zeit besteht der Bedarf, automatisch n...
1. Ersetzen Sie die Adresse Ihrer .js-Bibliotheks...
Mysql5.5 Dual-Maschine-Hot-Standby Durchführung I...
Inhaltsverzeichnis 1. Docker ermöglicht Fernzugri...
Es gibt viele Unterschiede zwischen IE6 und IE7 in...
Inhaltsverzeichnis 1. Einleitung 2. Haupttext 2.1...