So installieren Sie Hadoop im Standalone-Modus unter Ubuntu 18.04

Einführung

Hadoop ist ein Java-basiertes Programmierframework, das die Verarbeitung und Speicherung extrem großer Datensätze auf einem Cluster kostengünstiger Maschinen unterstützt. Es war das erste große Open Source-Projekt im Bereich Big Data und wird von der Apache Software Foundation gesponsert.

Hadoop besteht aus vier Hauptschichten:

  • Hadoop Common ist die Sammlung von Dienstprogrammen und Bibliotheken, die andere Hadoop-Module unterstützen.

  • HDFS, das für Hadoop Distributed File System steht, ist für die Speicherung der Daten auf der Festplatte verantwortlich.

  • YARN, kurz für Yet Another Resource Negotiator, ist das „Betriebssystem“ für HDFS.

  • MapReduce ist das ursprüngliche Verarbeitungsmodell für Hadoop-Cluster. Es verteilt die Arbeit innerhalb des Clusters oder der Zuordnung und organisiert und reduziert die Ergebnisse der Knoten in eine Antwort auf eine Abfrage. Viele andere Verarbeitungsmodelle sind für die 3.x-Version von Hadoop verfügbar.

Da die Einrichtung von Hadoop-Clustern relativ komplex ist, enthält das Projekt einen eigenständigen Modus, in dem Sie sich mit Hadoop vertraut machen, einfache Vorgänge ausführen und Fehler beheben können.

In diesem Lernprogramm installieren wir Hadoop im eigenständigen Modus und führen eines der darin enthaltenen MapReduce-Beispielprogramme aus, um die Installation zu überprüfen.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

  • An Ubuntu 18.04 server with a non-root user with sudo privileges: Weitere Informationen zum Einrichten eines Benutzers mit diesen Berechtigungen finden Sie in unserem Handbuch zuInitial Server Setup with Ubuntu 18.04.

Sobald Sie diese Voraussetzung erfüllt haben, können Sie Hadoop und seine Abhängigkeiten installieren.

Bevor Sie beginnen, möchten Sie vielleicht auchAn Introduction to Big Data Concepts and Terminology oderAn Introduction to Hadoop betrachten

[[Schritt-1 - Installation von Java]] == Schritt 1 - Java installieren

Zunächst aktualisieren wir unsere Paketliste:

sudo apt update

Als nächstes installieren wir OpenJDK, das Standard Java Development Kit unter Ubuntu 18.04:

sudo apt install default-jdk

Überprüfen Sie nach Abschluss der Installation die Version.

java -version
Outputopenjdk 10.0.1 2018-04-17
OpenJDK Runtime Environment (build 10.0.1+10-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 10.0.1+10-Ubuntu-3ubuntu1, mixed mode)

Diese Ausgabe überprüft, ob OpenJDK erfolgreich installiert wurde.

[[Schritt 2 - Installation von Hadoop]] == Schritt 2 - Installation von Hadoop

Mit Java werden wir dieApache Hadoop Releases page besuchen, um die neueste stabile Version zu finden.

Navigieren Sie zubinary für die Version, die Sie installieren möchten. In diesem Handbuch installieren wir Hadoop 3.0.3.

Screenshot of the Hadoop releases page highlighting the link to the latest stable binary

Klicken Sie auf der nächsten Seite mit der rechten Maustaste und kopieren Sie den Link in die Release-Binärdatei.

Screenshot of the Hadoop mirror page

Auf dem Server verwenden wirwget, um es abzurufen:

wget http://www-us.apache.org/dist/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz

[.note] #Note: Die Apache-Website leitet Sie dynamisch zum besten Spiegel weiter, sodass Ihre URL möglicherweise nicht mit der obigen URL übereinstimmt.
#

Um sicherzustellen, dass die heruntergeladene Datei nicht geändert wurde, führen wir eine schnelle Überprüfung mit SHA-256 durch. Kehren Sie zureleases page zurück, klicken Sie mit der rechten Maustaste und kopieren Sie den Link in die Prüfsummendatei für die von Ihnen heruntergeladene Release-Binärdatei:

Screenshot highlighting the .mds file

Wieder verwenden wirwget auf unserem Server, um die Datei herunterzuladen:

wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-3.0.3/hadoop-3.0.3.tar.gz.mds

Führen Sie dann die Überprüfung durch:

shasum -a 256 hadoop-3.0.3.tar.gz
Outputdb96e2c0d0d5352d8984892dfac4e27c0e682d98a497b7e04ee97c3e2019277a  hadoop-3.0.3.tar.gz

Vergleichen Sie diesen Wert mit dem SHA-256-Wert in der Datei.mds:

cat hadoop-3.0.3.tar.gz.mds

~/hadoop-3.0.3.tar.gz.mds

...
/build/source/target/artifacts/hadoop-3.0.3.tar.gz:
SHA256 = DB96E2C0 D0D5352D 8984892D FAC4E27C 0E682D98 A497B7E0 4EE97C3E 2019277A
...

Sie können den Unterschied zwischen Groß- und Kleinschreibung ignorieren. Die Ausgabe des Befehls, den wir für die Datei ausgeführt haben, die wir vom Spiegel heruntergeladen haben, sollte mit dem Wert in der Datei übereinstimmen, die wir von apache.org heruntergeladen haben.

Nachdem wir überprüft haben, dass die Datei nicht beschädigt oder geändert wurde, verwenden wir den Befehltar mit dem Flag-x zum Extrahieren,-z zum Dekomprimieren,-v. s für eine ausführliche Ausgabe und-f, um anzugeben, dass wir aus einer Datei extrahieren. Verwenden Sie die Tabulatorvervollständigung oder ersetzen Sie die richtige Versionsnummer im folgenden Befehl:

tar -xzvf hadoop-3.0.3.tar.gz

Schließlich verschieben wir die extrahierten Dateien in/usr/local, den geeigneten Ort für lokal installierte Software. Ändern Sie bei Bedarf die Versionsnummer entsprechend der von Ihnen heruntergeladenen Version.

sudo mv hadoop-3.0.3 /usr/local/hadoop

Mit der installierten Software können wir die Umgebung konfigurieren.

[[Schritt 3 - Konfigurieren von Hadoop-39-s-Java-Home] == Schritt 3 - Konfigurieren von Hadoops Java-Startseite

Für Hadoop muss der Pfad zu Java entweder als Umgebungsvariable oder in der Hadoop-Konfigurationsdatei festgelegt werden.

Der Pfad zu Java,/usr/bin/java, ist ein Symlink zu/etc/alternatives/java, der wiederum ein Symlink zur Standard-Java-Binärdatei ist. Wir werdenreadlink mit dem Flag-f verwenden, um jedem Symlink in jedem Teil des Pfades rekursiv zu folgen. Dann verwenden wirsed, umbin/java aus der Ausgabe zu entfernen und den korrekten Wert fürJAVA_HOME zu erhalten.

So finden Sie den Standard-Java-Pfad

readlink -f /usr/bin/java | sed "s:bin/java::"
Output/usr/lib/jvm/java-11-openjdk-amd64/

Sie können diese Ausgabe kopieren, um Hadoops Java-Ausgangsverzeichnis auf diese bestimmte Version festzulegen. Dadurch wird sichergestellt, dass dieser Wert nicht geändert wird, wenn sich das Standard-Java ändert. Alternativ können Sie den Befehlreadlink dynamisch in der Datei verwenden, sodass Hadoop automatisch die Java-Version verwendet, die als Systemstandard festgelegt ist.

Öffnen Sie zunächsthadoop-env.sh:

sudo nano /usr/local/hadoop/etc/hadoop/hadoop-env.sh

Wählen Sie dann eine der folgenden Optionen:

Option 1: Legen Sie einen statischen Wert fest

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/
 . . .

/usr/local/hadoop/etc/hadoop/hadoop-env.sh

 . . .
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")
 . . .

[.note] #Note: In Bezug auf Hadoop überschreibt der Wert vonJAVA_HOME inhadoop-env.sh alle Werte, die in der Umgebung durch/etc/profile oder im Profil eines Benutzers festgelegt wurden.
#

[[Schritt 4 - Laufen-Hadoop]] == Schritt 4 - Hadoop ausführen

Jetzt sollten wir in der Lage sein, Hadoop auszuführen:

/usr/local/hadoop/bin/hadoop
OutputUsage: hadoop [OPTIONS] SUBCOMMAND [SUBCOMMAND OPTIONS]
 or    hadoop [OPTIONS] CLASSNAME [CLASSNAME OPTIONS]
  where CLASSNAME is a user-provided Java class

  OPTIONS is none or any of:

--config dir                     Hadoop config directory
--debug                          turn on shell script debug mode
--help                           usage information
buildpaths                       attempt to add class files from build tree
hostnames list[,of,host,names]   hosts to use in slave mode
hosts filename                   list of hosts to use in slave mode
loglevel level                   set the log4j level for this command
workers                          turn on worker mode

  SUBCOMMAND is one of:
. . .

Die Hilfe bedeutet, dass wir Hadoop erfolgreich für die Ausführung im Standalone-Modus konfiguriert haben. Wir werden sicherstellen, dass es ordnungsgemäß funktioniert, indem wir das mitgelieferte MapReduce-Beispielprogramm ausführen. Erstellen Sie dazu ein Verzeichnis mit dem Nameninput in unserem Ausgangsverzeichnis und kopieren Sie die Konfigurationsdateien von Hadoop in dieses Verzeichnis, um diese Dateien als Daten zu verwenden.

mkdir ~/input
cp /usr/local/hadoop/etc/hadoop/*.xml ~/input

Als nächstes können wir den folgenden Befehl verwenden, um das Programm MapReducehadoop-mapreduce-examplesauszuführen, ein Java-Archiv mit mehreren Optionen. Wir rufen das Programmgrep auf, eines der vielen Beispiele inhadoop-mapreduce-examples, gefolgt vom Eingabeverzeichnisinput und dem Ausgabeverzeichnisgrep_example. Das MapReduce grep-Programm zählt die Übereinstimmungen eines wörtlichen Wortes oder eines regulären Ausdrucks. Schließlich geben wir den regulären Ausdruckallowed[.]* an, um Vorkommen des Wortesallowed innerhalb oder am Ende eines deklarativen Satzes zu finden. Der Ausdruck unterscheidet zwischen Groß- und Kleinschreibung, sodass wir das Wort nicht finden würden, wenn es am Anfang eines Satzes groß geschrieben würde:

/usr/local/hadoop/bin/hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.3.jar grep ~/input ~/grep_example 'allowed[.]*'

Nach Abschluss der Aufgabe wird eine Zusammenfassung der verarbeiteten Vorgänge und der aufgetretenen Fehler angezeigt, die jedoch nicht die tatsächlichen Ergebnisse enthält.

Output . . .
        File System Counters
        FILE: Number of bytes read=1330690
        FILE: Number of bytes written=3128841
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
    Map-Reduce Framework
        Map input records=2
        Map output records=2
        Map output bytes=33
        Map output materialized bytes=43
        Input split bytes=115
        Combine input records=0
        Combine output records=0
        Reduce input groups=2
        Reduce shuffle bytes=43
        Reduce input records=2
        Reduce output records=2
        Spilled Records=4
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=3
        Total committed heap usage (bytes)=478150656
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=147
    File Output Format Counters
        Bytes Written=34

[.Hinweis]##

Note: Wenn das Ausgabeverzeichnis bereits vorhanden ist, schlägt das Programm fehl, und anstatt die Zusammenfassung anzuzeigen, sieht die Ausgabe folgendermaßen aus:

Output . . .
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.apache.hadoop.util.RunJar.run(RunJar.java:244)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:158)

Die Ergebnisse werden im Ausgabeverzeichnis gespeichert und können durch Ausführen voncat im Ausgabeverzeichnis überprüft werden:

cat ~/grep_example/*
Output19  allowed.
1   allowed

Die MapReduce-Aufgabe hat 19 Vorkommen des Wortesallowed gefunden, gefolgt von einem Punkt und einem Vorkommen, bei dem dies nicht der Fall war. Das Ausführen des Beispielprogramms hat bestätigt, dass unsere eigenständige Installation ordnungsgemäß funktioniert und dass nicht privilegierte Benutzer auf dem System Hadoop zur Untersuchung oder zum Debuggen ausführen können.

Fazit

In diesem Lernprogramm haben wir Hadoop im eigenständigen Modus installiert und mit einem von ihm bereitgestellten Beispielprogramm überprüft. Um zu erfahren, wie Sie Ihre eigenen MapReduce-Programme schreiben, sollten Sie Apache HadoopsMapReduce tutorial besuchen, die den Code hinter dem Beispiel durchgehen. Wenn Sie bereit sind, einen Cluster einzurichten, lesen Sie das Handbuch zu Apache FoundationHadoop Cluster Setup.