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.
Unsere Ideen
Weitere Blogs
Contact



