So installierst du Apache Hadoop unter Ubuntu 22.04
Apache Hadoop ist ein Open-Source-Framework für die Verarbeitung und Speicherung von Big Data. In der heutigen Industrie ist Hadoop das Standard-Framework für Big Data. Hadoop ist für den Betrieb auf verteilten Systemen mit Hunderten oder sogar Tausenden von geclusterten Computern oder dedizierten Servern ausgelegt. Daher kann Hadoop große Datensätze mit hohem Volumen und hoher Komplexität sowohl für strukturierte als auch für unstrukturierte Daten verarbeiten.
Jede Hadoop-Installation enthält die folgenden Komponenten:
- Hadoop Common: Die gemeinsamen Dienstprogramme, die die anderen Hadoop-Module unterstützen.
- Hadoop Distributed File System (HDFS): Ein verteiltes Dateisystem, das den Zugriff auf Anwendungsdaten mit hohem Durchsatz ermöglicht.
- Hadoop YARN: Ein Framework für die Planung von Jobs und die Verwaltung von Cluster-Ressourcen.
- Hadoop MapReduce: Ein YARN-basiertes System für die parallele Verarbeitung großer Datensätze.
In diesem Lernprogramm werden wir die neueste Version von Apache Hadoop auf einem Ubuntu 22.04 Server installieren. Hadoop wird auf einem Single-Node-Server installiert und wir erstellen einen Pseudo-Distributed Mode der Hadoop-Bereitstellung.
Voraussetzungen
Für diese Anleitung benötigst du die folgenden Voraussetzungen:
- Einen Ubuntu 22.04-Server – In diesem Beispiel wird ein Ubuntu-Server mit dem Hostnamen ‚hadoop‘ server und der IP-Adresse ‚192.168.5.100‘ verwendet.
- Ein Nicht-Root-Benutzer mit sudo/root-Administrator-Rechten.
Java OpenJDK installieren
Hadoop ist ein großes Projekt der Apache Software Foundation, das hauptsächlich in Java geschrieben ist. Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version von Hadoop v3.3,4, die vollständig mit Java v11 kompatibel ist.
Das Java OpenJDK 11 ist standardmäßig im Ubuntu-Repository verfügbar und du installierst es über APT.
Um zu beginnen, führe den folgenden apt-Befehl aus, um die Paketlisten/Repositories auf deinem Ubuntu-System zu aktualisieren.
sudo apt update
Installiere nun Java OpenJDK 11 mit dem unten stehenden apt-Befehl. Im Ubuntu 22.04 Repository bezieht sich das Paket „default-jdk“ auf das Java OpenJDK v11.
sudo apt install default-jdk
Wenn du dazu aufgefordert wirst, gib y ein, um zu bestätigen und drücke ENTER, um fortzufahren. Die Installation von Java OpenJDK beginnt.
Nachdem Java installiert ist, führe den folgenden Befehl aus, um die Java-Version zu überprüfen. Du solltest das Java OpenJDK 11 auf deinem Ubuntu-System installiert haben.
java -version
Nachdem das Java OpebnJDK installiert ist, richtest du einen neuen Benutzer mit passwortloser SSH-Authentifizierung ein, der für die Ausführung von Hadoop-Prozessen und -Diensten verwendet wird.
Einrichten des Benutzers und der passwortlosen SSH-Authentifizierung
Für Apache Hadoop muss der SSH-Dienst auf dem System laufen. Dieser wird von den Hadoop-Skripten zur Verwaltung des entfernten Hadoop-Daemons auf dem entfernten Server verwendet. In diesem Schritt legst du einen neuen Benutzer an, der für die Ausführung von Hadoop-Prozessen und -Diensten verwendet wird, und richtest die passwortlose SSH-Authentifizierung ein.
Falls du SSH nicht auf deinem System installiert hast, führe den folgenden apt-Befehl aus, um SSH zu installieren. Das Paket„pdsh“ ist ein Multithread-Remote-Shell-Client, mit dem du Befehle auf mehreren Rechnern parallel ausführen kannst.
sudo apt install openssh-server openssh-client pdsh
Führe nun den folgenden Befehl aus, um einen neuen Benutzer „hadoop“ anzulegen und das Passwort für den Benutzer „hadoop“ einzurichten.
sudo useradd -m -s /bin/bash hadoop sudo passwd hadoop
Gib das neue Passwort für den Benutzer„hadoop“ ein und wiederhole das Passwort.
Als Nächstes fügst du den Benutzer „hadoop“ mit dem Befehl usermod zur Gruppe„sudo“ hinzu. Dadurch kann der Benutzer „hadoop“ den Befehl „sudo“ ausführen.
sudo usermod -aG sudo hadoop
Nachdem der Benutzer „hadoop“ erstellt wurde, melde dich mit dem unten stehenden Befehl als Benutzer„hadoop“ an.
su - hadoop
Nach dem Einloggen sieht die Eingabeaufforderung wie folgt aus:„hadoop@hostname…„.
Als Nächstes führst du den folgenden Befehl aus, um den öffentlichen und privaten SSH-Schlüssel zu erzeugen. Wenn du aufgefordert wirst, ein Passwort für den Schlüssel festzulegen, drücke ENTER, um die Eingabe zu überspringen.
ssh-keygen -t rsa
Der SSH-Schlüssel wird nun im Verzeichnis ~/.ssh erzeugt. Die Datei id_rsa.pub ist der öffentliche SSH-Schlüssel und die Datei „id_rsa“ ist der private Schlüssel.
Du kannst den erzeugten SSH-Schlüssel mit dem folgenden Befehl überprüfen.
ls ~/.ssh/
Als Nächstes führst du den folgenden Befehl aus, um den öffentlichen SSH-Schlüssel„id_rsa.pub“ in die Datei„authorized_keys“ zu kopieren und änderst die Standardberechtigung auf 600.
In der Datei„authorized_keys“ wird der öffentliche ssh-Schlüssel gespeichert, der aus mehreren öffentlichen Schlüsseln bestehen kann. Jeder, der den öffentlichen Schlüssel in der Datei„authorized_keys“ gespeichert hat und über den richtigen privaten Schlüssel verfügt, kann sich als Benutzer„hadoop“ ohne Passwort mit dem Server verbinden.
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
Wenn die passwortlose SSH-Konfiguration abgeschlossen ist, kannst du dich mit dem folgenden ssh-Befehl mit dem lokalen Rechner verbinden.
ssh localhost
Bestätige mit „yes“ und füge den SSH-Fingerabdruck hinzu, damit du ohne Passwort mit dem Server verbunden bist.
Nachdem der Benutzer„hadoop“ erstellt und die passwortlose SSH-Authentifizierung konfiguriert wurde, lädst du das Binärpaket von hadoop herunter und installierst es.
Herunterladen von Hadoop
Nachdem du einen neuen Benutzer angelegt und die passwortlose SSH-Authentifizierung konfiguriert hast, kannst du nun das Apache Hadoop Binärpaket herunterladen und das Installationsverzeichnis dafür einrichten. In diesem Beispiel lädst du Hadoop v3.3.4 herunter und wählst als Installationsverzeichnis das Verzeichnis„/usr/local/hadoop„.
Führe den folgenden wget-Befehl aus, um das Apache Hadoop Binärpaket in das aktuelle Arbeitsverzeichnis herunterzuladen. Du solltest die Datei„hadoop-3.3.4.tar.gz“ in deinem aktuellen Arbeitsverzeichnis erhalten.
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
Als Nächstes entpackst du das Apache Hadoop-Paket „hadoop-3.3.4.tar.gz“ mit dem unten stehenden tar-Befehl. Verschiebe dann das entpackte Verzeichnis nach„/usr/local/hadoop“.
tar -xvzf hadoop-3.3.4.tar.gz sudo mv hadoop-3.3.4 /usr/local/hadoop
Zum Schluss änderst du die Rechte am Hadoop-Installationsverzeichnis „/usr/local/hadoop“ auf den Benutzer„hadoop“ und die Gruppe„hadoop„.
sudo chown -R hadoop:hadoop /usr/local/hadoop
In diesem Schritt hast du das Apache Hadoop Binärpaket heruntergeladen und das Hadoop-Installationsverzeichnis konfiguriert. Damit kannst du jetzt mit der Konfiguration der Hadoop-Installation beginnen.
Einrichten der Hadoop-Umgebungsvariablen
Öffne die Konfigurationsdatei„~/.bashrc“ mit dem unten stehenden nano-Editor-Befehl.
nano ~/.bashrc
Füge die folgenden Zeilen in die Datei ein. Achte darauf, dass die folgenden Zeilen am Ende der Zeile stehen.
# Hadoop environment variables export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 export HADOOP_HOME=/usr/local/hadoop export HADOOP_INSTALL=$HADOOP_HOME export HADOOP_MAPRED_HOME=$HADOOP_HOME export HADOOP_COMMON_HOME=$HADOOP_HOME export HADOOP_HDFS_HOME=$HADOOP_HOME export HADOOP_YARN_HOME=$HADOOP_HOME export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib/native"
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes führst du den unten stehenden Befehl aus, um die neuen Änderungen in der Datei„~/.bashrc“ zu übernehmen.
source ~/.bashrc
Nachdem der Befehl ausgeführt wurde, werden die neuen Umgebungsvariablen übernommen. Du kannst das überprüfen, indem du jede Umgebungsvariable mit dem unten stehenden Befehl überprüfst. Und du solltest die Ausgabe jeder Umgebungsvariablen erhalten.
echo $JAVA_HOME echo $HADOOP_HOME echo $HADOOP_OPTS
Als Nächstes konfigurierst du auch die Umgebungsvariable JAVA_HOME im Skript„hadoop-env.sh„.
Öffne die Datei „hadoop-env.sh“ mit dem folgenden nano-Editor-Befehl. Die Datei „hadoop-env.sh“ befindet sich im Verzeichnis„$HADOOP_HOME„, das sich auf das Hadoop-Installationsverzeichnis „/usr/local/hadoop“ bezieht.
nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
Hebe den Kommentar in der JAVA_HOME-Umgebungszeile auf und ändere den Wert in das Java OpenJDK-Installationsverzeichnis„/usr/lib/jvm/java-11-openjdk-amd64„.
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Speichere die Datei und beende den Editor, wenn du fertig bist.
Wenn du die Umgebungsvariablen konfiguriert hast, führe den folgenden Befehl aus, um die Hadoop-Version auf deinem System zu überprüfen. Du solltest sehen, dass Apache Hadoop 3.3.4 auf deinem System installiert ist.
hadoop version
Jetzt kannst du den Hadoop-Cluster einrichten und konfigurieren, der in verschiedenen Modi eingesetzt werden kann.
Einrichten des Apache Hadoop Clusters: Pseudo-verteilter Modus
In Hadoop kannst du einen Cluster in drei verschiedenen Modi einrichten:
- Lokaler Modus (Standalone) – die Standard-Hadoop-Installation, die als einzelner Java-Prozess und nicht verteilter Modus ausgeführt wird. In diesem Modus kannst du den Hadoop-Prozess leicht debuggen.
- Pseudo-Distributed Mode (Pseudo-Verteilter Modus ) – Damit kannst du einen Hadoop-Cluster im verteilten Modus betreiben, auch wenn du nur einen einzigen Knoten/Server hast. In diesem Modus werden die Hadoop-Prozesse in separaten Java-Prozessen ausgeführt.
- Vollständig verteilter Modus – Großer Hadoop-Einsatz mit mehreren oder sogar Tausenden von Nodes/Servern. Wenn du Hadoop in der Produktion einsetzen willst, solltest du Hadoop im vollständig verteilten Modus verwenden.
In diesem Beispiel wirst du einen Apache Hadoop-Cluster im Pseudo-Distributed-Modus auf einem einzelnen Ubuntu-Server einrichten. Dazu nimmst du einige Änderungen an den Hadoop-Konfigurationen vor:
- core-site.xml – Hier wird der NameNode für den Hadoop-Cluster definiert.
- hdfs-site.xml – Diese Konfiguration wird verwendet, um den DataNode im Hadoop-Cluster zu definieren.
- mapred-site.xml – Die MapReduce-Konfiguration für den Hadoop-Cluster.
- yarn-site.xml – Die ResourceManager- und NodeManager-Konfiguration für den Hadoop-Cluster.
Einrichten von NameNode und DataNode
Zuerst richtest du den NameNode und den DataNode für den Hadoop-Cluster ein.
Öffne die Datei„$HADOOP_HOME/etc/hadoop/core-site.xml“ mit dem folgenden nano-Editor.
sudo nano $HADOOP_HOME/etc/hadoop/core-site.xml
Füge die folgenden Zeilen in die Datei ein. Achte darauf, die IP-Adresse des NameNode zu ändern, oder du kannst sie durch „0.0.0.0“ ersetzen, damit der NameNode an allen Schnittstellen und IP-Adressen ausgeführt wird.
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://192.168.5.100:9000</value> </property> </configuration>
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes führst du den folgenden Befehl aus, um neue Verzeichnisse zu erstellen, die für den DataNode auf dem Hadoop-Cluster verwendet werden sollen. Dann änderst du die Eigentumsrechte an den DataNode-Verzeichnissen auf den Benutzer„hadoop„.
sudo mkdir -p /home/hadoop/hdfs/{namenode,datanode} sudo chown -R hadoop:hadoop /home/hadoop/hdfs
Danach öffnest du die Datei „$HADOOP_HOME/etc/hadoop/hdfs-site.xml“ mit dem unten stehenden nano-Editor-Befehl.
sudo nano $HADOOP_HOME/etc/hadoop/hdfs-site.xml
Füge die folgende Konfiguration in die Datei ein. In diesem Beispiel wirst du den Hadoop-Cluster auf einem einzelnen Knoten einrichten, also musst du den Wert für „dfs.replication“ auf „1“ ändern. Außerdem musst du das Verzeichnis angeben, das für den DataNode verwendet werden soll.
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.name.dir</name> <value>file:///home/hadoop/hdfs/namenode</value> </property> <property> <name>dfs.data.dir</name> <value>file:///home/hadoop/hdfs/datanode</value> </property> </configuration>
Speichere die Datei und beende den Editor, wenn du fertig bist.
Wenn der NameNode und der DataNode konfiguriert sind, führe den folgenden Befehl aus, um das Hadoop-Dateisystem zu formatieren.
hdfs namenode -format
Du wirst eine Ausgabe wie diese erhalten:
Als nächstes startest du den NameNode und den DataNode mit dem folgenden Befehl. Der NameNode läuft unter der Server-IP-Adresse, die du in der Datei „core-site.xml“ konfiguriert hast.
start-dfs.sh
Du wirst eine Ausgabe wie diese sehen:
Jetzt, wo NameNode und DataNode laufen, kannst du beide Prozesse über das Webinterface überprüfen.
Das Webinterface von Hadoop NameNode läuft über den Port„9870„. Öffne also deinen Webbrowser und rufe die IP-Adresse des Servers gefolgt von Port 9870 auf (d.h.: http://192.168.5.100:9870/).
Du solltest jetzt die Seite wie im folgenden Screenshot sehen – der NameNode ist gerade aktiv.
Wenn du nun auf das Menü „Datenknoten“ klickst, solltest du den aktuell aktiven Datenknoten des Hadoop-Clusters sehen. Der folgende Screenshot bestätigt, dass der DataNode auf dem Port„9864“ des Hadoop-Clusters läuft.
Klicke auf die„Http-Adresse“ des DataNode und du solltest eine neue Seite mit detaillierten Informationen über den DataNode erhalten. Der folgende Screenshot bestätigt, dass der DataNode mit dem Volume-Verzeichnis„/home/hadoop/hdfs/datanode“ läuft.
Wenn der NameNode und der DataNode laufen, kannst du als Nächstes MapReduce auf dem Yarn-Manager einrichten und ausführen (noch ein ResourceManager und NodeManager).
Yarn-Manager
Um ein MapReduce auf Yarn im Pseudo-Distributed-Modus auszuführen, musst du einige Änderungen an den Konfigurationsdateien vornehmen.
Öffne die Datei „$HADOOP_HOME/etc/hadoop/mapred-site.xml“ mit dem folgenden nano-Editor-Befehl.
sudo nano $HADOOP_HOME/etc/hadoop/mapred-site.xml
Füge die folgenden Zeilen in die Datei ein. Achte darauf, dass du mapreduce.framework.name in „yarn“ änderst.
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.application.classpath</name> <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value> </property> </configuration>
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes öffnest du die Yarn-Konfiguration„$HADOOP_HOME/etc/hadoop/yarn-site.xml“ mit dem folgenden nanoe editor Befehl.
sudo nano $HADOOP_HOME/etc/hadoop/yarn-site.xml
Ändere die Standardkonfiguration mit den folgenden Einstellungen.
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value> </property> </configuration>
Speichere die Datei und beende den Editor, wenn du fertig bist.
Führe nun den folgenden Befehl aus, um die Yarn-Daemons zu starten. Du solltest sehen, dass sowohl der ResourceManager als auch der NodeManager gestartet werden.
start-yarn.sh
Der ResourceManager sollte auf dem Standard-Port 8088 laufen. Gehe zurück zu deinem Webbrowser und rufe die IP-Adresse des Servers auf, gefolgt von dem Port „8088“ des ResourceManagers (d.h.: http://192.168.5.100:8088/).
Du solltest die Weboberfläche des Hadoop ResourceManagers sehen. Von hier aus kannst du alle laufenden Prozesse innerhalb des Hadoop-Clusters überwachen.
Klicke auf das Menü „Knoten“ und du solltest den aktuell laufenden Knoten im Hadoop-Cluster sehen.
Jetzt läuft der Hadoop-Cluster im Pseudo-Distributionsmodus. Das bedeutet, dass jeder Hadoop-Prozess als einzelner Prozess auf einem einzelnen Knoten des Ubuntu-Servers 22.04 läuft, einschließlich NameNode, DataNode, MapReduce und Yarn.
Fazit
In dieser Anleitung hast du Apache Hadoop auf einem Ubuntu 22.04 Server mit nur einem Rechner installiert. Du hast Hadoop mit aktiviertem Pseudo-Distributed-Modus installiert, d.h. jede Hadoop-Komponente wird als einzelner Java-Prozess auf dem System ausgeführt. In dieser Anleitung hast du auch gelernt, wie du Java einrichtest, Systemumgebungsvariablen einrichtest und die passwortlose SSH-Authentifizierung über den öffentlichen/privaten SSH-Schlüssel einrichtest.
Diese Art des Hadoop-Einsatzes, der Pseudo-Distributed-Modus, wird nur für Tests empfohlen. Wenn du ein verteiltes System möchtest, das mittlere oder große Datenmengen verarbeiten kann, kannst du Hadoop im Clustermodus einsetzen, der mehr Rechensysteme erfordert und eine hohe Verfügbarkeit für deine Anwendung bietet.