Dieser Artikel beschreibt, wie man einen hochverfügbaren Hadoop 2.10-Cluster in CentOS 7 erstellt. Bereiten Sie zunächst 6 Maschinen vor: 2 NN (Namenode); 4 DN (Datanode); 3 JNS (Journalnodes)
Jps-Prozess jeder Maschine: Da ich virtuelle VMware-Maschinen verwende, verwende ich nach der Konfiguration einer Maschine Clone, um die verbleibenden Maschinen zu klonen und den Hostnamen und die IP zu ändern, sodass die Konfiguration jeder Maschine vereinheitlicht ist. Fügen Sie jeder Maschinenkonfiguration HDFS-Benutzer und Benutzergruppen hinzu, konfigurieren Sie die JDK-Umgebung und installieren Sie Hadoop. Dieses Mal wird ein Hochverfügbarkeitscluster unter dem HDFS-Benutzer erstellt. Weitere Informationen finden Sie unter: CentOS 7 erstellt Hadoop 2.10 im pseudoverteilten Modus Hier sind einige Schritte und Details zur Installation eines Hochverfügbarkeitsclusters: 1. Legen Sie den Hostnamen und die Hosts für jede Maschine fest Ändern Sie die Hosts-Datei. Nachdem die Hosts festgelegt sind, können Sie den Hostnamen verwenden, um auf den Computer zuzugreifen. Das ist bequemer. Ändern Sie die Datei wie folgt: 127.0.0.1 locahost 192.168.30.141 s141 192.168.30.142 s142 192.168.30.143 s143 192.168.30.144 s144 192.168.30.145 s145 192.168.30.146 s146 2. Richten Sie eine passwortfreie SSH-Anmeldung ein. Da s141 und s146 beides Namenodes sind, müssen Sie sich von diesen beiden Maschinen aus ohne Passwörter bei allen Maschinen anmelden. Am besten richten Sie eine passwortfreie Anmeldung sowohl für HDFS-Benutzer als auch für Root-Benutzer ein. Wir setzen s141 auf nn1 und s146 auf nn2. Wir benötigen s141 und s146, um uns ohne Passwort über ssh bei anderen Maschinen anmelden zu können. Dazu müssen wir unter dem hdfs-Benutzer auf den Maschinen s141 und s146 ein Schlüsselpaar generieren, die öffentlichen Schlüssel s141 und s146 an andere Maschinen senden und sie in die Datei ~/.ssh/authorized_keys einfügen. Genauer gesagt müssen wir die öffentlichen Schlüssel zu allen Maschinen hinzufügen (einschließlich uns selbst). Generieren Sie ein Schlüsselpaar auf den Maschinen s141 und s146: ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa Hängen Sie den Inhalt der Datei id_rsa.pub an /home/hdfs/.ssh/authorized_keys auf den Maschinen s141-s146 an. Da andere Maschinen keine authorized_keys-Dateien haben, können wir id_rsa.pub in authorized_keys umbenennen. Wenn andere Maschinen bereits authorized_keys-Dateien haben, können wir den Inhalt von id_rsa.pub an die Datei anhängen. Zum Remote-Kopieren können wir den scp-Befehl verwenden: Kopieren Sie den öffentlichen Schlüssel des S141-Rechners auf andere Rechner. scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_141.pub scp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_141.pub Kopieren Sie den öffentlichen Schlüssel des S146-Rechners auf andere Rechner. scp id_rsa.pub hdfs@s141:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s142:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s143:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s144:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s145:/home/hdfs/.ssh/id_rsa_146.pub scp id_rsa.pub hdfs@s146:/home/hdfs/.ssh/id_rsa_146.pub Auf jedem Rechner können Sie mit cat den Schlüssel an die Datei authorized_keys anhängen. cat id_rsa_141.pub >> autorisierte Schlüssel cat id_rsa_146.pub >> autorisierte Schlüssel Zu diesem Zeitpunkt müssen die Berechtigungen der Datei authorized_keys auf 644 geändert werden (beachten Sie, dass die kennwortlose SSH-Anmeldung aufgrund dieses Berechtigungsproblems häufig fehlschlägt). chmod 644 autorisierte Schlüssel 3. Konfigurieren Sie die Hadoop-Konfigurationsdatei (${hadoop_home}/etc/hadoop/) Konfigurationsdetails: Hinweis: s141 und s146 haben genau die gleiche Konfiguration, insbesondere ssh. 1) Nameservice konfigurieren [hdfs-site.xml] <Eigenschaft> <name>dfs.nameservices</name> <Wert>meinCluster</Wert> </Eigenschaft>
[hdfs-site.xml] <!-- Zwei IDs des Name-Knotens unter myucluster --> <Eigenschaft> <name>dfs.ha.namenodes.mycluster</name> <Wert>nn1,nn2</Wert> </Eigenschaft> 3) dfs.namenode.rpc-address.[Nameservice-ID].[Namensknoten-ID] [hdfs-site.xml] Konfigurieren Sie die RPC-Adresse jedes NN. <Eigenschaft> <name>dfs.namenode.rpc-adresse.mycluster.nn1</name> <Wert>s141:8020</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.rpc-adresse.mycluster.nn2</name> <Wert>s146:8020</Wert> </Eigenschaft> 4) dfs.namenode.http-address.[Nameservice-ID].[Namensknoten-ID] [hdfs-site.xml] <Eigenschaft> <name>dfs.namenode.http-adresse.mycluster.nn1</name> <Wert>s141:50070</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.http-adresse.mycluster.nn2</name> <Wert>s146:50070</Wert> </Eigenschaft> 5) dfs.namenode.shared.edits.dir [hdfs-site.xml] <Eigenschaft> <name>dfs.namenode.shared.edits.dir</name> <Wert>qjournal://s142:8485;s143:8485;s144:8485/mycluster</Wert> </Eigenschaft> 6) dfs.client.failover.proxy.provider.[Nameservice-ID] [hdfs-site.xml] <Eigenschaft> <name>dfs.client.failover.proxy.provider.mycluster</name> <Wert>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</Wert> </Eigenschaft> 7) dfs.ha.fencing.methods [hdfs-site.xml] <Eigenschaft> <name>dfs.ha.fencing.methods</name> <Wert>sshfence</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.ha.fencing.ssh.private-key-files</name> <Wert>/home/hdfs/.ssh/id_rsa</Wert> </Eigenschaft> 8) fs.defaultFS [core-site.xml] <Eigenschaft> <name>fs.defaultFS</name> <Wert>hdfs://mycluster</Wert> </Eigenschaft> 9) dfs.journalnode.edits.dir [hdfs-site.xml] <Eigenschaft> <name>dfs.journalnode.edits.dir</name> <Wert>/home/hdfs/hadoop/journal</Wert> </Eigenschaft> Vollständige Konfigurationsdatei: core-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="konfiguration.xsl"?> <Konfiguration> <Eigenschaft> <name>fs.defaultFS</name> <Wert>hdfs://mycluster/</Wert> </Eigenschaft> <Eigenschaft> <name>hadoop.tmp.dir</name> <Wert>/home/hdfs/hadoop</Wert> </Eigenschaft> </Konfiguration> hdfs-site.xml <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="konfiguration.xsl"?> <Konfiguration> <Eigenschaft> <name>dfs.replikation</name> <Wert>3</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.hosts</name> <Wert>/opt/soft/hadoop/etc/dfs.include.txt</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.hosts.exclude</name> <Wert>/opt/soft/hadoop/etc/dfs.hosts.exclude.txt</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.nameservices</name> <Wert>meinCluster</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.ha.namenodes.mycluster</name> <Wert>nn1,nn2</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.rpc-adresse.mycluster.nn1</name> <Wert>s141:8020</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.rpc-adresse.mycluster.nn2</name> <Wert>s146:8020</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.http-adresse.mycluster.nn1</name> <Wert>s141:50070</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.http-adresse.mycluster.nn2</name> <Wert>s146:50070</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.namenode.shared.edits.dir</name> <Wert>qjournal://s142:8485;s143:8485;s144:8485/mycluster</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.client.failover.proxy.provider.mycluster</name> <Wert>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.ha.fencing.methods</name> <Wert>sshfence</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.ha.fencing.ssh.private-key-files</name> <Wert>/home/hdfs/.ssh/id_rsa</Wert> </Eigenschaft> <Eigenschaft> <name>dfs.journalnode.edits.dir</name> <Wert>/home/hdfs/hadoop/journal</Wert> </Eigenschaft> </Konfiguration> mapred-site.xml <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="konfiguration.xsl"?> <Konfiguration> <Eigenschaft> <name>mapreduce.framework.name</name> <value>Garn</value> </Eigenschaft> </Konfiguration> yarn-site.xml <?xml version="1.0"?> <Konfiguration> <!-- Sitespezifische YARN-Konfigurationseigenschaften --> <Eigenschaft> <name>garn.resourcemanager.hostname</name> <Wert>s141</Wert> </Eigenschaft> <Eigenschaft> <name>yarn.nodemanager.aux-services</name> <Wert>mapreduce_shuffle</Wert> </Eigenschaft> </Konfiguration> 4. Bereitstellungsdetails 1) Starten Sie die jn-Prozesse (s142, s143, s144) jeweils auf den jn-Knoten hadoop-daemon.sh startet Journalnode 2) Synchronisieren Sie nach dem Starten von jn die Festplattenmetadaten zwischen den beiden NNs a) Wenn es sich um einen brandneuen Cluster handelt, formatieren Sie zuerst das Dateisystem. Dies muss nur auf einem NN ausgeführt werden. Hadoop-Namensknoten -Format b) Wenn Sie einen Nicht-HA-Cluster in einen HA-Cluster konvertieren, kopieren Sie die Metadaten des ursprünglichen NN in ein anderes NN. 1. Schritt 1 Kopieren Sie auf der Maschine s141 die Hadoop-Daten in das Verzeichnis, das s146 entspricht scp -r /home/hdfs/hadoop/dfs hdfs@s146:/home/hdfs/hadoop/ 2. Schritt 2: Führen Sie den folgenden Befehl auf dem neuen nn (unformatiertes nn, meines ist s146) aus, um im Standby-Modus zu booten. Hinweis: s141namenode muss gestartet werden (Sie können ausführen: hadoop-daemon.sh start namenode). hdfs-Namensknoten -BootstrapStandby Wenn der Nameknoten s141 nicht gestartet wird, schlägt er fehl, wie in der Abbildung dargestellt: Nach dem Starten des s141-Namensknotens führen Sie den Befehl auf s141 aus hadoop-daemon.sh startet Namenode Führen Sie dann den Standby-Boot-Befehl aus. Hinweis: Wenn Sie gefragt werden, ob eine Formatierung erfolgen soll, wählen Sie N, wie in der Abbildung gezeigt: 3. Schritt 3 Führen Sie den folgenden Befehl auf einem der NNs aus, um die Übertragung des Bearbeitungsprotokolls an den jn-Knoten abzuschließen. hdfs namenode -initializeSharedEdits Wenn während der Ausführung der Fehler java.nio.channels.OverlappingFileLockException gemeldet wird: Zeigt an, dass der Namenode gestartet wird und gestoppt werden muss (hadoop-daemon.sh stop namenode) Überprüfen Sie nach der Ausführung, ob s142, s143 und s144 Bearbeitungsdaten haben. Überprüfen Sie hier, ob das Verzeichnis mycluster erstellt wurde, das Bearbeitungsprotokolldaten enthält, wie folgt: 4. Schritt 4 Starten Sie alle Knoten. Starten Sie den Namensknoten und alle Datenknoten auf s141: hadoop-daemon.sh startet Namenode hadoop-daemons.sh startet Datanode Starten Sie den Namensknoten auf s146 hadoop-daemon.sh startet Namenode Besuchen Sie jetzt http://192.168.30.141:50070/ und http://192.168.30.146:50070/ im Browser und Sie werden feststellen, dass beide Namenodes im Standby-Modus sind. Zu diesem Zeitpunkt müssen Sie den Befehl manuell verwenden, um einen von ihnen in den aktiven Zustand zu versetzen. Setzen Sie hier s141 (nn1) auf aktiv hdfs haadmin -transitionToActive nn1 Zu diesem Zeitpunkt ist s141 aktiv Allgemeine Befehle von hdfs haadmin: Zu diesem Zeitpunkt ist die manuelle Konfiguration der hohen Verfügbarkeit für die Notfallwiederherstellung abgeschlossen. Diese Methode ist jedoch nicht intelligent und kann die Notfallwiederherstellung nicht automatisch erkennen. Im Folgenden wird daher die automatische Konfiguration der Notfallwiederherstellung vorgestellt. 5. Automatische Notfallwiederherstellungskonfiguration Zwei Komponenten müssen eingeführt werden: Zookeeperquarum und ZK Disaster Recovery Controller (ZKFC). Erstellen Sie einen Zookeeper-Cluster, wählen Sie die drei Maschinen s141, s142 und s143 aus und laden Sie Zookeeper herunter: http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.5.6 1) Zookeeper entpacken: tar -xzvf apache-zookeeper-3.5.6-bin.tar.gz -C /opt/soft/zookeeper-3.5.6 2) Konfigurieren Sie Umgebungsvariablen, fügen Sie zk-Umgebungsvariablen in /etc/profile hinzu und kompilieren Sie die Datei /etc/profile neu Kopieren Sie den Code wie folgt: Quelle /etc/Profil 3) Konfigurieren Sie die zk-Konfigurationsdatei und vereinheitlichen Sie die Konfigurationsdateien der drei Maschinen # Die Anzahl der Millisekunden jedes Ticks tickZeit=2000 # Die Anzahl der Ticks, die der anfängliche # Die Synchronisationsphase kann dauern initLimit=10 # Die Anzahl der Ticks, die zwischen # Senden einer Anfrage und Erhalten einer Bestätigung syncLimit=5 # das Verzeichnis, in dem der Snapshot gespeichert ist. # benutze /tmp nicht zur Speicherung, /tmp ist hier nur # Beispiel sei Dank. dataDir=/home/hdfs/zookeeper # der Port, an dem die Clients eine Verbindung herstellen clientPort=2181 # die maximale Anzahl von Clientverbindungen. # Erhöhen Sie diesen Wert, wenn Sie mehr Kunden bedienen müssen #maxClientCnxns=60 # # Lesen Sie unbedingt den Wartungsabschnitt der # Administratorhandbuch vor dem Aktivieren der automatischen Bereinigung. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # Die Anzahl der Snapshots, die im Datenverzeichnis aufbewahrt werden sollen #autopurge.snapRetainCount=3 # Bereinigungsaufgabenintervall in Stunden # Auf „0“ setzen, um die automatische Bereinigungsfunktion zu deaktivieren #autopurge.purgeInterval=1 server.1=s141:2888:3888 server.2=s142:2888:3888 server.3=s143:2888:3888 4) Bzw. Erstellen Sie eine MyID-Datei im Verzeichnis /home/hdfs/zookeeper von s141 (dem in der Konfigurationsdatei zoo.cfg konfigurierten dataDir-Pfad) mit dem Wert 1 (entspricht server.1 in der Konfigurationsdatei zoo.cfg). Erstellen Sie eine MyID-Datei im Verzeichnis /home/hdfs/zookeeper von s142 (dem in der Konfigurationsdatei zoo.cfg konfigurierten dataDir-Pfad) mit dem Wert 2 (entspricht server.2 in der Konfigurationsdatei zoo.cfg). Erstellen Sie eine MyID-Datei im Verzeichnis /home/hdfs/zookeeper von s143 (dem in der Konfigurationsdatei zoo.cfg konfigurierten dataDir-Pfad) mit dem Wert 3 (entspricht server.3 in der Konfigurationsdatei zoo.cfg). 5) Starten Sie zk auf jedem Computer separat zkServer.sh starten Wenn der Start erfolgreich ist, wird der zk-Prozess angezeigt: Konfigurieren Sie die HDFS-bezogene Konfiguration: 1) Stoppen Sie alle HDFS-Prozesse stop-alles.sh 2) Konfigurieren Sie hdfs-site.xml und aktivieren Sie die automatische Notfallwiederherstellung. [hdfs-site.xml] <Eigenschaft> <name>dfs.ha.automatic-failover.enabled</name> <Wert>wahr</Wert> </Eigenschaft> 3) Konfigurieren Sie core-site.xml und geben Sie die Verbindungsadresse von zk an. <Eigenschaft> <name>ha.zookeeper.quorum</name> <Wert>s141:2181,s142:2181,s143:2181</Wert> </Eigenschaft> 4) Verteilen Sie die beiden oben genannten Dateien an alle Knoten. 5) Initialisieren Sie in einem der NNs (s141) den HA-Zustand in ZK hdfs zkfc -formatZK Das folgende Ergebnis zeigt den Erfolg an: Sie können es auch in zk überprüfen: 6) Starten Sie den HDFS-Cluster start-dfs.sh Sehen Sie sich die Prozesse der einzelnen Maschinen an: Start erfolgreich, werfen Sie einen Blick auf die WebUI s146 ist aktiviert s141 ist im Standby-Modus An diesem Punkt wird die automatische Disaster Recovery HA von Hadoop erstellt. Zusammenfassen Oben habe ich Ihnen den Aufbau von Hadoop2.10 High Availability (HA) auf Centos7 vorgestellt. Ich hoffe, es wird Ihnen helfen! Das könnte Sie auch interessieren:
|
<<: Über das Problem beim Schreiben von Plugins zum Mounten von DOM in vue3
>>: Analyse des Prinzips des dynamischen Proxys des Mybatis-Mappers
Inhaltsverzeichnis Vorwort Verwechslung von „unde...
Das Clustering ist eigentlich relativ zur InnoDB-...
Inhaltsverzeichnis 1. analysieren 1.1 Regeln für ...
1 Einleitung Kong ist kein einfaches Produkt. Das...
Der Tomcat-Server ist ein kostenloser und quellof...
Originallink: https://vien.tech/article/138 Vorwo...
Inhaltsverzeichnis Grundtypen jeder Typ Arrays Tu...
Inhaltsverzeichnis Vorwort Generierung eines Redo...
In diesem Artikel wird der Verbindungsfehler ECON...
Ich erwarte nicht, ein erfahrener Datenbankadmini...
In diesem Artikel wird der NAT-Konfigurationsproz...
Problembeschreibung In unseren Projekten sind hor...
Inhaltsverzeichnis Installieren Sie Sakila Index-...
In diesem Artikel werden die detaillierten Schrit...
<br />Dies ist nicht nur ein Zeitalter der I...