So installieren Sie Hadoop im Standalone-Modus unter Ubuntu 16.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 2.7 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 2.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 16.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 16.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-get update

Als nächstes installieren wir OpenJDK, das Standard Java Development Kit unter Ubuntu 16.04.

sudo apt-get install default-jdk

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

java -version
Outputopenjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~16.04.1-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, 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. Folgen Sie der Binärdatei für die aktuelle Version:

Screenshot of the Hadoop Releases page highlighting the link the mirrors page

Klicken Sie auf der nächsten Seite mit der rechten Maustaste, und kopieren Sie den Link für die neueste Binärdatei der stabilen Version.

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

Auf dem Server verwenden wirwget, um es abzurufen:

wget http://apache.mirrors.tds.net/hadoop/common/hadoop-2.7.3/hadoop-2.7.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. Geben Sie diereleases page zurück und folgen Sie dann dem Apache-Link:

Screenshot highlighting the .mds file

Geben Sie das Verzeichnis für die heruntergeladene Version ein:
Screenshot highlighting the .mds file

Suchen Sie schließlich die.mds-Datei für die heruntergeladene Version und kopieren Sie den Link für die entsprechende Datei:

Screenshot highlighting the .mds file

Wir klicken erneut mit der rechten Maustaste, um den Speicherort der Datei zu kopieren, und verwenden dannwget, um die Datei zu übertragen:

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

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

shasum -a 256 hadoop-2.7.3.tar.gz
Outputd489df3808244b906eb38f4d081ba49e50c4603db03efd5e594a1e98b09259c2  hadoop-2.7.3.tar.gz

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

cat hadoop-2.7.3.tar.gz.mds

~/hadoop-2.7.3.tar.gz.mds

...
hadoop-2.7.3.tar.gz: SHA256 = D489DF38 08244B90 6EB38F4D 081BA49E 50C4603D B03EFD5E 594A1E98 B09259C2
...

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-2.7.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-2.7.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-8-openjdk-amd64/jre/

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-8-openjdk-amd64/jre/
 . . .

/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 [--config confdir] [COMMAND | CLASSNAME]
  CLASSNAME            run the class named CLASSNAME
 or
  where COMMAND is one of:
  fs                   run a generic filesystem user client
  version              print the version
  jar             run a jar file
                       note: please use "yarn jar" to launch
                             YARN applications, not this command.
  checknative [-a|-h]  check native hadoop and compression libraries availability
  distcp   copy file or directories recursively
  archive -archiveName NAME -p  *  create a hadoop archive
  classpath            prints the class path needed to get the
  credential           interact with credential providers
                       Hadoop jar and the required libraries
  daemonlog            get/set the log level for each daemon

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 von vielen Beispielen 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 einen regulären Ausdruck an, um Vorkommen des Wortesprincipal 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-2.7.3.jar grep ~/input ~/grep_example 'principal[.]*'

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=1247674
                FILE: Number of bytes written=2324248
                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=37
                Map output materialized bytes=47
                Input split bytes=114
                Combine input records=0
                Combine output records=0
                Reduce input groups=2
                Reduce shuffle bytes=47
                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)=61
                Total committed heap usage (bytes)=263520256
        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=151
        File Output Format Counters
                Bytes Written=37

[.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.lang.reflect.Method.invoke(Method.java:498)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

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

cat ~/grep_example/*
Output6       principal
1       principal.

Die MapReduce-Aufgabe hat ein Vorkommen des Wortesprincipal gefunden, gefolgt von einem Punkt und sechs Vorkommen, bei denen 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.