Blog

Automatisierte Installation von CDH5 Hadoop auf Ihrem Laptop mit Ansible

Aktualisiert Oktober 22, 2025
6 Minuten

Die Installation von CDH5 aus der Tarball-Distribution ist nicht wirklich schwierig, aber die richtige Konfiguration der Pseudo-Distribution ist alles andere als einfach. Und da es noch ein paar Bugs gibt, die behoben werden müssen, und die Konfiguration, die durchgeführt werden muss, habe ich es automatisiert.

Automatisieren der Schritte

Alle Schritte, die automatisiert werden müssen, sind in meinem vorherigen Blog beschrieben: Lokales und pseudo-verteiltes CDH5 Hadoop auf Ihrem Laptop

Alles, was ich tun musste, war, einige Ansible-Konfigurationsskripte zu schreiben, um diese Schritte durchzuführen. Für den Moment habe ich die Schritte zum Herunterladen und Installieren von CDH5, Spark, Hive, Pig und Mahout automatisiert. Alle weiteren Pakete überlasse ich dem Leser als Übung. Ich freue mich über Ihre Pull-Anfragen.

Konfiguration

Ansible benötigt einige Informationen vom Benutzer über das Verzeichnis, in das die Software installiert werden soll. Ich habe zunächst versucht, das Modul vars_prompt von Ansible zu verwenden. Das funktioniert zwar, aber der Geltungsbereich der Variable ist nur innerhalb der gleichen yml-Datei. Und ich brauche sie als globale Variable. Nachdem ich verschiedene Möglichkeiten zur Bereitstellung von Variablen getestet hatte, entschied ich mich für die Verwendung eines Bash-Skripts, um die Eingaben des Benutzers zu erhalten und diese Informationen über die Befehlszeilenoption --extra-vars an Ansible zu übermitteln.

Darüber hinaus möchten wir ansible verwenden, um ein Playbook auszuführen. Das bedeutet, dass wir den Befehl ansible-playbook zur Verfügung haben müssen. Wir gehen davon aus, dass ansible-playbook auf dem PATH liegt und funktioniert.

Abrufen der Installationsskripte

Um die Installationsskripte zu erhalten, geben Sie den Befehl git clone ein:

$ git clone git@github.com:krisgeus/ansible_local_cdh_hadoop.git

Installieren Sie

Die Installation der Software ist jetzt ein Einzeilenbefehl:

$ start-playbook.sh

Das Skript fragt den Benutzer nach einem Verzeichnis, in das die Software installiert werden soll. Dann beginnt es, die Pakete in das Verzeichnis $HOME.ansible-downloads herunterzuladen. Und es entpackt sie in das vom Benutzer angegebene Installationsverzeichnis.

Im Installationsverzeichnis erstellt das Skript ein bash_profile Add-On, um die richtigen Aliase zu setzen.

$  Quelle ${INSTALL_DIR}/.bash_profile_hadoop

Hadoop im lokalen Modus testen

$ switch_local_cdh5

Jetzt sollten alle bekannten Hadoop-Befehle funktionieren. Es gibt keine andere Vorstellung von HDFS als Ihr lokales Dateisystem, so dass der Befehl hadoop fs -ls / die gleiche Ausgabe wie ls / zeigt

$ hadoop fs -ls /

  drwxrwxr-x - root admin  2686  2014-04-18 09:47 /Anwendungen
  drwxr-xr-x - root wheel  2210  2014-02-26 02:46 /Bibliothek
  drwxr-xr-x - root wheel  68  2013-08-25 05:45 /Netzwerk
  drwxr-xr-x - root wheel  136  2013-10-23 03:05 /System
  drwxr-xr-x - root admin  204  2013-10-23 03:09 /Benutzer
  drwxrwxrwt - root admin  136  2014-04-18 12:34 /Volumen
    [...]

$ ls -l /

  drwxrwxr-x+  79  root admin 2.6K Apr  18  09:47 Anwendungen
  drwxr-xr-x+  65  Wurzelrad 2.2K Feb  26  02:46 Bibliothek
  drwxr-xr-x@  2  Wurzelrad 68B Aug  25  2013  Netzwerk
  drwxr-xr-x+  4  Wurzelrad 136B Okt  23  03:05 System
  drwxr-xr-x  6  root admin 204B Okt  23  03:09 Benutzer
  drwxrwxrwt@  4  root admin 136B Apr  18  12:34 Bände

Die Ausführung eines MapReduce-Auftrags sollte ebenfalls sofort funktionieren.

$  cd  $HADOOP_PREFIX

$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0-cdh5.0.2.jar pi  10  100

  Anzahl von  Karten  =  10
  Proben pro  Karte =  100
  2014-04-19 18:05:01.596 java[74281:1703]  Realm-Info kann nicht von SCDynamicStore geladen werden 14/04/19 18:05:02 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  Eingaben verfasst  für  Karte  #0
  Eingaben verfasst  für  Karte  #1
  Eingaben verfasst  für  Karte  #2
  Eingaben verfasst  für  Karte  #3
  Eingaben verfasst  für  Karte  #4
  Eingaben verfasst  für  Karte  #5
  Eingaben verfasst  für  Karte  #6
  Eingaben verfasst  für  Karte  #7
  Eingaben verfasst  für  Karte  #8
  Eingaben verfasst  für  Karte  #9
  Job beginnen
  ....
  Auftrag beendet in 1,587 Sekunden
  Der geschätzte Wert von Pi ist 3.14800000000000000000

Testen von Hadoop im pseudo-distributierten Modus

$ switch_psuedo_cdh5
$ hadoop namenode -format
$ start-dfs.sh
$ hadoop fs -ls /
$ hadoop fs -mkdir /bogus
$ hadoop fs -ls /
  2014-04-19 19:46:32.233 java[78176:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:46:32 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihre Plattform... mit eingebauten-
  Java-Klassen, wo anwendbar
  Gefunden  1  Artikel
  drwxr-xr-x - Benutzer Supergruppe  0  2014-04-19 19:46 /bogus

Ok, HDFS funktioniert, nun zu einem MapReduce-Auftrag

$ start-yarn.sh
  Starten von Garn-Dämonen
  Ressourcemanager starten, Protokollierung in /cdh5.0.0/hadoop-2.3.0-cdh5.0.2/logs/yarn-user-resourcemanager-localdomain.local.out
  Das Passwort:
  localhost: nodemanager gestartet, Protokollierung in /cdh5.0.0/hadoop-2.3.0-cdh5.0.2/logs/yarn-user-nodemanager-localdomain.local.out

$  cd  $HADOOP_PREFIX
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0-cdh5.0.2.jar pi  10  100
  Anzahl von  Karten  =  10
  Proben pro  Karte =  100
  2014-04-20 10:21:56.696 java[80777:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/20 10:22:11 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  Eingaben verfasst  für  Karte  #0
  Eingaben verfasst  für  Karte  #1
  Eingaben verfasst  für  Karte  #2
  Eingaben verfasst  für  Karte  #3
  Eingaben verfasst  für  Karte  #4
  Eingaben verfasst  für  Karte  #5
  Eingaben verfasst  für  Karte  #6
  Eingaben verfasst  für  Karte  #7
  Eingaben verfasst  für  Karte  #8
  Eingaben verfasst  für  Karte  #9
  Job beginnen
  14/04/20 10:22:12 INFO client.RMProxy: Verbindung zum ResourceManager unter /0.0.0.0:8032
  14/04/20 10:22:12 INFO input.FileInputFormat: Gesamte zu verarbeitende Eingabepfade : 10
  14/04/20 10:22:12 INFO mapreduce.JobSubmitter: Anzahl der Splits:10
  14/04/20 10:22:13 INFO mapreduce.JobSubmitter: Übermittlung von Token  für  Stelle: job_1397969462544_0001
  14/04/20 10:22:13 INFO impl.YarnClientImpl: Übermittelte Anwendung application_1397969462544_0001
  14/04/20 10:22:13 INFO mapreduce.Job: Die Url zum Verfolgen des Jobs: http://localdomain.local:8088/proxy/application_1397969462544_0001/
  14/04/20 10:22:13 INFO mapreduce.Job: Laufender Job: job_1397969462544_0001
  14/04/20 10:22:34 INFO mapreduce.Job: Job job_1397969462544_0001 läuft im Uber-Modus :  false
  14/04/20 10:22:34 INFO mapreduce.Job: map 0% reduce 0%
  14/04/20 10:22:53 INFO mapreduce.Job: map 10% reduce 0%
  14/04/20 10:22:54 INFO mapreduce.Job: map 20% reduce 0%
  14/04/20 10:22:55 INFO mapreduce.Job: map 30% reduce 0%
  14/04/20 10:22:56 INFO mapreduce.Job: map 40% reduce 0%
  14/04/20 10:22:57 INFO mapreduce.Job: map 50% reduce 0%
  14/04/20 10:22:58 INFO mapreduce.Job: map 60% reduce 0%
  14/04/20 10:23:12 INFO mapreduce.Job: map 70% reduce 0%
  14/04/20 10:23:13 INFO mapreduce.Job: map 80% reduce 0%
  14/04/20 10:23:15 INFO mapreduce.Job: map 90% reduce 0%
  14/04/20 10:23:16 INFO mapreduce.Job: map 100% reduce 100%
  14/04/20 10:23:16 INFO mapreduce.Job: Job job_1397969462544_0001 erfolgreich abgeschlossen
  ...
  Auftrag beendet in 64.352 Sekunden
  Der geschätzte Wert von Pi ist 3.14800000000000000000

Testen von Spark im lokalen Modus

$ switch_local_cdh5
$ spark-shell
  SLF4J: Der Klassenpfad enthält mehrere SLF4J-Bindungen.
  ...
  2014-04-20 09:48:25,238 INFO  [Haupt]  spark.HttpServer  (Protokollierung.scala:logInfo(49))  - HTTP-Server starten
  2014-04-20 09:48:25,302 INFO  [Haupt]  server.Server  (Server.java:doStart(266))  - jetty-7.6.8.v20121106
  2014-04-20 09:48:25,333 INFO  [Haupt]  server.AbstractConnector  (AbstractConnector.java:doStart(338))  - Gestartet SocketConnector@0.0.0.0:62951
  Willkommen bei
  ____ __
  / __/__ ___ _____/ /__
  _ 
/  _  /  _  `/ __/  '_/
  /___/ .__/_,_/_/ /_/_    Version 0.9.0
 
/_/

  Scala Version 2.10.3 verwenden  (Java HotSpot(TM)  64-Bit Server VM, Java 1.7.0_15)
  Geben Sie Ausdrücke ein, damit sie ausgewertet werden.
  Typ :Hilfe  für  mehr Informationen.
  ...
  Erstellt Funken Kontext...
  Spark-Kontext verfügbar als sc.

  scala>

Und wir sind dabei!!

Testen von Spark im pseudo-distributierten Modus

Als letzten Test überprüfen wir nun, ob Spark auf unserer pseudoverteilten Hadoop-Konfiguration funktioniert

$ switch_pseudo_cdh5
$ start-dfs.sh
$ start-yarn.sh
$ hadoop fs -mkdir /sourcedata
$ hadoop fs -put somelocal-textfile.txt /sourcedata/sometext.txt
$ spark-shell
  scala>  val  Datei =  sc.textFile("/sourcedata/sometext.txt")
  file.take(5)

  res1: Array[Zeichenfolge] =  Array("Erste",  "fünf Zeilen",  "von",  "die",  "Textdatei" )

Die aktuelle Version der Ansible-Skripte ist so eingestellt, dass die CDH-Pakete der Version 5.0.2 installiert werden. Wenn eine neue Version verfügbar ist, können Sie diese Version einfach ändern, indem Sie die Yaml-Datei vars/common.yml aktualisieren.

Wenn Sie Ansible-Dateien erstellt haben, um andere Pakete hinzuzufügen, können Sie mir gerne eine Pull-Anfrage schicken.

Contact

Let’s discuss how we can support your journey.