Blog

Lokales und pseudo-verteiltes CDH5 Hadoop auf Ihrem Laptop

Aktualisiert Oktober 22, 2025
19 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. Es hat sich also gelohnt, darüber zu schreiben.

Die Software erhalten

Die Software zu erhalten war der einfachste Teil. Gehen Sie einfach auf die Cloudera Download-Seite und klicken Sie auf die Schaltfläche unter dem Text Für Entwickler. Dadurch gelangen Sie auf die Seite mit den Download-Produkten, wo Sie die Version und den Typ auswählen können. Ich wählte CDH5.0.0 und klickte auf den Link Tarballs.

Hier erhalten Sie eine lange Liste von Hadoop-Komponenten, jede mit ihrem eigenen Paket. Ich habe Hadoop und Spark heruntergeladen, da ich sie im Moment benötige.

Auspacken

Ich habe in meinem lokalen Dateisystem ein neues Verzeichnis mit dem Namen cdh5.0.0 erstellt. Ich bezeichne dieses Verzeichnis von nun an als /cdh5.0.0 und entpackte die beiden heruntergeladenen Pakete:

$ mkdir /cdh5.0.0
$  cd 
/cdh5.0.0
$ tar -xvzf hadoop-2.3.0-cdh5.0.0.tar.gz
$ mkdir spark-0.9.0-cdh5.0.0  && cd  spark-0.9.0-cdh5.0.0  &&  tar -xvzf ../spark-0.9.0-cdh5.0.0.tar.gz  && cd  ../

Dadurch werden die Tarballs entpackt; sehen Sie, wie ich das Spark-Verzeichnis selbst erstellt habe, da dessen Tarball anders gepackt ist als der von Hadoop.

Hadoop im lokalen Modus

Die Verwendung von Hadoop im lokalen Modus ist ziemlich einfach. Alles, was Sie brauchen, sind ein paar Umgebungseinstellungen, die auf die richtigen Verzeichnisse verweisen, und schon können Sie loslegen. In meinem .bash_profile verwende ich immer Aliase, um einfach zwischen Umgebungen zu wechseln. Für die Einstellungen des lokalen Modus von Hadoop verwende ich diese:

alias switch_local_cdh5='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7);
  export HADOOP_PREFIX=/cdh5.0.0/hadoop-2.3.0-cdh5.0.0;
  export HADOOP_COMMON_HOME=${HADOOP_PREFIX};
  export HADOOP_HDFS_HOME=${HADOOP_PREFIX};
  export HADOOP_MAPRED_HOME=${HADOOP_PREFIX};
  export HADOOP_YARN_HOME=${HADOOP_PREFIX};
  export SPARK_HOME=/cdh5.0.0/spark-0.9.0-cdh5.0.0;
  export PATH=${HADOOP_PREFIX}/bin:${SPARK_HOME}/bin:$PATH;
  export HADOOP_CONF_DIR=/cdh5.0.0/hadoop-2.3.0-cdh5.0.0/etc/hadoop;'

Wenn ich eine neue Terminalsitzung starte, kann ich die Variablen ganz einfach in einem mit exportieren:

$ 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.0.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

Hadoop im pseudo-distributiven Modus

Der pseudoverteilte Modus ist ein wenig komplizierter. Der pseudoverteilte Modus bedeutet, dass alle beteiligten Daemons, die Hadoop zum Laufen bringen, auf Ihrem lokalen Rechner laufen. Dafür benötigen Sie ein separates Paar von Konfigurationsdateien; lassen Sie uns damit beginnen, ein neues Verzeichnis dafür zu erstellen:

$  cd 
/cdh5.0.0
$ mkdir conf.pseudo

Jetzt müssen wir dieses Verzeichnis mit den richtigen Dateien und Inhalten bestücken. Diese manuell zu erstellen ist eine langwierige und mühsame Aufgabe. Da ich ein fauler Programmierer bin, suchte ich nach einem einfachen Ausweg und fand ein Linux-Paket namens hadoop-conf-pseudo. Aber wie bereits erwähnt, habe ich keinen Linux-Laptop. Also habe ich eine virtuelle CentOS-Maschine gestartet und in dieser virtuellen Maschine das CDH5 yum-Repository konfiguriert.

$  echo  -e  "[cloudera-5-repo]nname=CDH 5 reponbaseurl=http://archive.cloudera.com/cdh5/redhat/6/x86_64/cdh/5/ngpgcheck=0n" > 
/etc/yum.repos.d/CDH5.repo
$ yum install hadoop-conf-psuedo

Dadurch wird ein gut gefülltes Verzeichnis in /etc/hadoop/conf.pseudo erstellt, das wir auf meinen Laptop kopieren werden

$ cp -r /etc/hadoop/conf.pseudo /mnt/hgfs/cdh5.0.0/conf.pseudo.linux

Schauen wir mal, was da drin ist:

$ ll /cdh4.0.0/conf.pseudo.linux/
  gesamt 80
  -rwxr-xr-x  1  Benutzer Personal 1.1K Apr  19  18:29 README
  -rwxr-xr-x  1  Benutzer Personal 2.1K Apr  19  18:29 core-site.xml
  -rwxr-xr-x  1  Benutzer Personal 1.3K Apr  19  18:29 hadoop-env.sh
  -rwxr-xr-x  1  Benutzer Personal 2.8K Apr  19  18:29 hadoop-metrics.properties
  -rwxr-xr-x  1  Benutzer Personal 1.8K Apr  19  18:29 hdfs-site.xml
  -rwxr-xr-x  1  Benutzer Personal 11K Apr  19  18:29 log4j.properties
  -rwxr-xr-x  1  Benutzer Personal 1.5K Apr  19  18:29 mapred-site.xml
  -rwxr-xr-x  1  Benutzer Personal 2.3K Apr  19  18:29 yarn-site.xml

Wir müssen ein paar Dinge ändern, da die Verzeichnisstruktur auf unserem Laptop anders ist als auf dem Linux-Rechner, von dem diese Dateien stammen. Werfen wir also einen Blick auf den Inhalt und finden heraus, welche Konfigurationen wir anpassen müssen.

Die wichtigsten Konzepte, die wir brauchen, sind HDFS und YARN, also konzentrieren wir uns auf diese. Die anderen Konfigurationsdateien können ohne Änderungen kopiert werden.

$ cp /cdh5.0.0/conf.pseudo.linux/core-site.xml /cdh5.0.0/conf.pseudo/
$ cp /cdh5.0.0/conf.pseudo.linux/hadoop-env.sh /cdh5.0.0/conf.pseudo/
$ cp /cdh5.0.0/conf.pseudo.linux/hadoop-metrics.properties /cdh5.0.0/conf.pseudo/
$ cp /cdh5.0.0/conf.pseudo.linux/log4j.properties /cdh5.0.0/conf.pseudo/

Das Wichtigste zuerst: HDFS

$ vi /cdh5.0.0/conf.pseudo.linux/hdfs-site.xml

In dieser Datei gibt es einige verschiedene Konfigurationseinstellungen, die auf die Speicherorte der Datenverzeichnisse namenode, secondary namenode und datanode verweisen.

...

    hadoop.tmp.dir
    /var/lib/hadoop-hdfs/cache/${user.name}


    dfs.namenode.name.dir
    datei:///var/lib/hadoop-hdfs/cache/${benutzer.name}/dfs/name


    dfs.namenode.checkpoint.dir
    file:///var/lib/hadoop-hdfs/cache/${benutzer.name}/dfs/namesecondary


     dfs.datanode.data.dir
     file:///var/lib/hadoop-hdfs/cache/${benutzername}/dfs/data

...

Kopieren Sie diese Datei in unser Verzeichnis /cdh5.0.0/conf.pseudo und ändern Sie die Speicherorte dieser Konfigurationsparameter. Vergessen Sie nicht, die referenzierten Verzeichnisse anzulegen.

$ cp /cdh5.0.0/conf.pseudo.linux/hdfs-site.xml /cdh5.0.0/conf.pseudo/
$ vi /cdh5.0.0/conf.pseudo/hdfs-site.xml


...
hadoop.tmp.dir/cdh5.0.0/var/lib/hadoop-hdfs/cache/${benutzer.name}dfs.namenode.name.dirfile:///cdh5.0.0/var/lib/hadoop-hdfs/cache/${benutzername}/dfs/namedfs.namenode.checkpoint.dirfile:///cdh5.0.0/var/lib/hadoop-hdfs/cache/${user.name}/dfs/namesecondarydfs.datanode.data.dirfile:///cdh5.0.0/var/lib/hadoop-hdfs/cache/${benutzername}/dfs/data
...

Und vergessen Sie nicht, die Verzeichnisse anzulegen

$  cd 
/cdh5.0.0
$ mkdir -p var/lib/hadoop-hdfs/cache/${BENUTZER}/dfs/data
$ mkdir -p var/lib/hadoop-hdfs/cache/${BENUTZER}/dfs/namesecondary
$ mkdir -p var/lib/hadoop-hdfs/cache/${BENUTZER}/dfs/name

Wir brauchen auch die richtigen Umgebungseinstellungen, erinnern Sie sich? Für die Einstellungen des pseudo-verteilten Modus von Hadoop verwende ich diese:

alias switch_pseudo_cdh5='export JAVA_HOME=$(/usr/libexec/java_home -v 1.7);
  export HADOOP_PREFIX=/cdh5.0.0/hadoop-2.3.0-cdh5.0.0;
  export HADOOP_COMMON_HOME=${HADOOP_PREFIX};
  export HADOOP_HDFS_HOME=${HADOOP_PREFIX};
  export HADOOP_MAPRED_HOME=${HADOOP_PREFIX};
  export HADOOP_YARN_HOME=${HADOOP_PREFIX};
  export SPARK_HOME=/cdh5.0.0/spark-0.9.0-cdh5.0.0;
  export PATH=${HADOOP_PREFIX}/sbin:${HADOOP_PREFIX}/bin:${SPARK_HOME}/bin:${PATH};
  export HADOOP_CONF_DIR=/cdh5.0.0/hadoop-2.3.0-cdh5.0.0/conf.pseudo;'

Achten Sie auf den zusätzlichen $HADOOP_PREFIX/sbin Zusatz zur Variable PATH. Das brauchen wir in einer Minute.

Funktioniert es schon? Versuchen wir es.

$ switch_psuedo_cdh5
$ hadoop fs -ls /

  2014-04-19 19:14:06.047 java[76056:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:14:06 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  ls: Aufruf von localdomain.local/111.11.11.1 nach localhost:8020 fehlgeschlagen wegen Verbindungsausnahme: java.net.ConnectException: Verbindung abgelehnt;  Für weitere Einzelheiten siehe: http://wiki.apache.org/hadoop/ConnectionRefused

Vermutlich nicht. Die Daemons laufen nicht, also müssen Sie sie starten. Dies kann mit dem einfachen Befehl start-dfs.sh geschehen, da wir das Verzeichnis HADOOP_PREFIX/sbin, das die Skripte zum Starten und Stoppen der Daemons enthält, zu unserer Variable PATH hinzugefügt haben.

$ start-dfs.sh

Möglicherweise müssen Sie Ihr Passwort mehrmals eingeben, da die Daemons über eine ssh-Verbindung zu localhost gestartet werden. Jetzt überprüfen wir noch einmal, ob es funktioniert! Wir sind doch ungeduldige Programmierer, oder?

$ hadoop fs -ls /

  2014-04-19 19:14:06.047 java[76056:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:14:06 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  ls: Aufruf von localdomain.local/111.11.11.1 nach localhost:8020 fehlgeschlagen wegen Verbindungsausnahme: java.net.ConnectException: Verbindung abgelehnt;  Für weitere Einzelheiten siehe: http://wiki.apache.org/hadoop/ConnectionRefused

Immer noch nichts. Um zu verstehen, was hier passiert, müssen wir ein wenig zurückgehen und uns die Ausgabe des Befehls start-dfs.sh ansehen:

$ start-dfs.sh
  2014-04-19 19:21:38.976 java[76172:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:21:39 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  Starten von Namensknoten auf  [localhost]
  Das Passwort:
  localhost: Namenode starten, Protokollierung nach /cdh5.0.0/hadoop-2.3.0-cdh5.0.0/logs/hadoop-user-namenode-localdomain.local.out
  localhost: 2014-04-19 19:21:45.992 java[76243:1b03]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  cat: /cdh5.0.0/conf.pseudo/slaves: Keine solche Datei oder Verzeichnis
  Sekundäre Namensknoten starten  [0.0.0.0]
  Das Passwort:
  0.0.0.0: Sekundärnamenode gestartet, Protokollierung nach /cdh5.0.0/hadoop-2.3.0-cdh5.0.0/logs/hadoop-user-secondarynamenode-localdomain.local.out
  0.0.0.0: 2014-04-19 19:21:53.619 java[76357:1b03]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  2014-04-19 19:21:58.508 java[76405:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:21:58 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen

Sehen Sie die Meldung cat: /cdh5.0.0/conf.pseudo/slaves: No such file or directory? Wir hatten diese Datei nicht in unserem conf.pseudo.linux Verzeichnis, oder? Glücklicherweise ist die Datei im lokalen Konfigurationsverzeichnis verfügbar: Kopieren Sie sie und stoppen Sie die Daemons, die nicht korrekt gestartet wurden.

$ stop-dfs.sh
$ cp /cdh5.0.0/hadoop-2.3.0-cdh5.0.0/etc/hadoop/slaves /cdh5.0.0/conf.pseudo/
$ start-dfs.sh
$ hadoop fs -ls /
  2014-04-19 19:14:06.047 java[76056:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:14:06 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  ls: Aufruf von localdomain.local/111.11.11.1 nach localhost:8020 fehlgeschlagen wegen Verbindungsausnahme: java.net.ConnectException: Verbindung abgelehnt;  Für weitere Einzelheiten siehe: http://wiki.apache.org/hadoop/ConnectionRefused

Nichts. Wir stoppen die HDFS-Dämonen erneut und sehen uns die Protokolle an:

$ stop-dfs.sh
  2014-04-19 19:33:02.835 java[77195:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:33:02 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  Anhalten von Namensknoten auf  [localhost]
  Das Passwort:
  localhost: kein Namensknoten zum Anhalten
  Das Passwort:
  localhost: Anhalten von datanode
  Stoppen von sekundären Namensknoten  [0.0.0.0]
  Das Passwort:
  0.0.0.0: Anhalten von Sekundärnamenode
  2014-04-19 19:33:24.863 java[77400:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/19 19:33:24 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen

Hey! Was ist das für eine localhost: no namenode to stop Nachricht? Schauen wir uns zuerst die Namenode-Protokolle an.

$ vi /cdh5.0.0/hadoop-2.3.0-cdh5.0.0/logs/hadoop-user-namenode-localdomain.local.log

    

  2014-04-19 19:32:20,064 FATAL org.apache.hadoop.hdfs.server.namenode.NameNode: Exception in namenode join
 java.io.IOException: NameNode ist nicht formatiert.
  at org.apache.hadoop.hdfs.server.namenode.FSImage.recoverTransitionRead (FSImage.java:216 )
 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFSImage (FSNamesystem.java:879 )
 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.loadFromDisk (FSNamesystem.java:638 )
 at org.apache.hadoop.hdfs.server.namenode.NameNode.loadNamesystem (NameNode.java:440)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.initialize(NameNode.java:496)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:652)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.(NameNode.java:637)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1286)
 at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1352)
 2014-04-19 19:32:20,066 INFO org.apache.hadoop.util.ExitUtil: Beendet mit Status 1
 2014-04-19 19:32:20,067 INFO org.apache.hadoop.hdfs.server.namenode.NameNode: SHUTDOWN_MSG:

Das Protokoll sagt uns, dass wir zuerst HDFS formatieren müssen.

$ 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  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  Gefunden  1  Artikel
  drwxr-xr-x - Benutzer Supergruppe  0  2014-04-19 19:46 /bogus

Ok, wir sind dabei!

Jetzt konzentrieren wir uns auf den YARN-Teil

$ vi /cdh5.0.0/conf.pseudo.linux/yarn-site.xml

Dort haben wir einige verschiedene Konfigurationseinstellungen, die auf die Speicherorte der Containerprotokolle und des lokalen Nodemanager-Verzeichnisses verweisen.

...

    Liste der Verzeichnisse, in denen lokalisierte Dateien gespeichert werden sollen.
    yarn.nodemanager.local-dirs
    /var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir


    Wo Sie Container-Logs aufbewahren.
    yarn.nodemanager.log-dirs
    /var/log/hadoop-yarn/containers


    Wohin die Protokolle aggregiert werden sollen.
    yarn.nodemanager.remote-app-log-dir
    /var/log/hadoop-yarn/apps


    Klassenpfad für typische Anwendungen.
    yarn.application.classpath
    
  $HADOOP_CONF_DIR,
  $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
  $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
  $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
  $HADOOP_YARN_HOME/*,$HADOOP_YARN_HOME/lib/*
    

...

Kopieren Sie diese Datei in unser Verzeichnis /cdh5.0.0/conf.pseudo und ändern Sie die Speicherorte dieser Konfigurationsparameter. Und vergessen Sie nicht, die referenzierten Verzeichnisse anzulegen.

$ cp /cdh5.0.0/conf.pseudo.linux/yarn-site.xml /cdh5.0.0/conf.pseudo/
$ vi /cdh5.0.0/conf.pseudo/yarn-site.xml
...

    Liste der Verzeichnisse, in denen lokalisierte Dateien gespeichert werden sollen.
    yarn.nodemanager.local-dirs
    /cdh5.0.0/var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir


    Wo Sie Container-Logs aufbewahren.
    yarn.nodemanager.log-dirs
    /cdh5.0.0/var/log/hadoop-yarn/containers


    Wohin die Protokolle aggregiert werden sollen.
    yarn.nodemanager.remote-app-log-dir
    /var/log/hadoop-yarn/apps


    Klassenpfad für typische Anwendungen.
    yarn.application.classpath
    
  $HADOOP_CONF_DIR,
  $HADOOP_COMMON_HOME/share/hadoop/common/*,
  $HADOOP_COMMON_HOME/share/hadoop/common/lib/*,
  $HADOOP_HDFS_HOME/share/hadoop/hdfs/*,
  $HADOOP_HDFS_HOME/share/hadoop/hdfs/lib/*,
  $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*,
  $HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*,
  $HADOOP_YARN_HOME/share/hadoop/yarn/*,
  $HADOOP_YARN_HOME/share/hadoop/yarn/lib/*
    

...

Und vergessen Sie nicht, diese Verzeichnisse anzulegen

$  cd 
/cdh5.0.0
$ mkdir -p var/lib/hadoop-yarn/cache/${BENUTZER}/nm-local-dir
$ mkdir -p var/log/hadoop-yarn/containers

Die Eigenschaft yarn.nodemanager.remote-app-log-dir muss nicht geändert werden, da es sich um eine Variable handelt, die auf einen Pfad im HDFS verweist. Versuchen wir nun, die YARN-Daemons zu starten (stellen Sie sicher, dass die HDFS-Daemons noch laufen)

$ start-yarn.sh
  Starten von Garn-Dämonen
  Ressourcemanager starten, Protokollierung in /cdh5.0.0/hadoop-2.3.0-cdh5.0.0/logs/yarn-user-resourcemanager-localdomain.local.out
  Das Passwort:
  localhost: nodemanager gestartet, Protokollierung in /cdh5.0.0/hadoop-2.3.0-cdh5.0.0/logs/yarn-user-nodemanager-localdomain.local.out
$  cd ${HADOOP_PREFIX}
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0-cdh5.0.0.jar pi  10  100

Sieht aus, als würde es funktionieren. Aber Moment, was sagt die Ausgabe?

Anzahl von  Karten  =  10
Proben pro  Karte =  100
2014-04-20 00:23:57.055 java[79203:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
14/04/20 00:23:57 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 00:23:59 INFO mapred.LocalJobRunner:
14/04/20 00:23:59 INFO mapred.MapTask: Flush der Kartenausgabe gestartet
14/04/20 00:23:59 INFO mapred.MapTask: Kartenausgabe ausgeben
14/04/20 00:23:59 INFO mapred.MapTask:  bufstart =  0; bufend =  18; bufvoid =  104857600
14/04/20 00:23:59 INFO mapred.MapTask:  kvstart =  26214396(104857584); kvend =  26214392(104857568); Länge =  5/6553600
14/04/20 00:23:59 INFO mapred.MapTask: Beendete Verschüttung 0
14/04/20 00:23:59 INFO mapred.Task: Task:attempt_local37475800_0001_m_000000_0 is  fertig. Und ist gerade dabei, sich zu verpflichten
14/04/20 00:23:59 INFO mapred.LocalJobRunner: Karte
...

Es wird immer noch die LocalJobRunner erwähnt. Ah, warten Sie, da war noch dieses mapred-site.xml, das wir noch nicht kopiert haben. Das sollten wir nachholen.

$  cd 
/cdh5.0.0
$ cp conf.pseudo.linux/mapred-site.xml conf.pseudo/
$ vi conf.pseudo/mapred-site.xml

Dort haben wir eine Konfigurationseinstellung, die auf den Speicherort des Verzeichnisses mapreduce tmp verweist.

...

    So legen Sie den Wert des tmp-Verzeichnisses für Map- und Reduce-Aufgaben fest.
    mapreduce.task.tmp.dir
    /var/lib/hadoop-mapreduce/cache/${user.name}/tasks

...

Das sollten wir auch ändern

$ vi conf.pseudo/mapred-site.xml
...

    So legen Sie den Wert des tmp-Verzeichnisses für Map- und Reduce-Aufgaben fest.
    mapreduce.task.tmp.dir
    /cdh5.0.0/var/lib/hadoop-mapreduce/cache/${user.name}/tasks

...
$  cd 
/cdh5.0.0
$ mkdir -p var/lib/hadoop-mapreduce/cache/${BENUTZER}/tasks

Und versuchen Sie es erneut

$  cd ${HADOOP_PREFIX}
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0-cdh5.0.0.jar pi  10  100
  Anzahl von  Karten  =  10
  Proben pro  Karte =  100
  2014-04-20 00:36:42.138 java[79538:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/20 00:36:42 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 00:36:43 INFO client.RMProxy: Verbinden mit ResourceManager unter /0.0.0.0:8032
  14/04/20 00:36:43 INFO input.FileInputFormat: Gesamte zu verarbeitende Eingabepfade : 10
  14/04/20 00:36:43 INFO mapreduce.JobSubmitter: Anzahl der Splits:10
  14/04/20 00:36:43 INFO mapreduce.JobSubmitter: Token einreichen  für  Stelle: job_1397933444099_0001
  14/04/20 00:36:44 INFO impl.YarnClientImpl: Übermittelte Anwendung application_1397933444099_0001
  14/04/20 00:36:44 INFO mapreduce.Job: Die Url zum Verfolgen des Jobs: http://localdomain.local:8088/proxy/application_1397933444099_0001/
  14/04/20 00:36:44 INFO mapreduce.Job: Laufender Job: job_1397933444099_0001
  14/04/20 00:36:49 INFO mapreduce.Job: Job job_1397933444099_0001 läuft im Uber-Modus :  false
  14/04/20 00:36:49 INFO mapreduce.Job: map 0% reduce 0%
  14/04/20 00:36:49 INFO mapreduce.Job: Job job_1397933444099_0001 ist mit dem Status FAILED gescheitert aufgrund von: Anwendung application_1397933444099_0001 fehlgeschlagen  2 mal  durch AM Container  für  appattempt_1397933444099_0001_000002 wurde mit exitCode beendet:  127  aufgrund von: Exception from container-launch: org.apache.hadoop.util.Shell$ExitCodeException:
  org.apache.hadoop.util.Shell$ExitCodeException:
  at org.apache.hadoop.util.Shell.runCommand(Shell.java:505)
  at org.apache.hadoop.util.Shell.run(Shell.java:418)
  at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:650)
  at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:195)
  at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:283)
  at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:79)
  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
  at java.util.concurrent.FutureTask.run(FutureTask.java:166)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at java.lang.Thread.run(Thread.java:722)

  Container wurde mit einem Wert ungleich Null verlassen  Ausgang  Code 127
  Dieser Versuch scheitert. Die Bewerbung ist fehlgeschlagen.

Ok, kein lokaler Jobvermittler mehr. Irgendetwas stimmt definitiv noch nicht. Lassen Sie uns die Protokolle auf HDFS untersuchen:

  $ hadoop fs -ls /var/log/hadoop-yarn/apps/user/logs/application_1397933444099_0001/
  2014-04-20 00:42:26.267 java[79865:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/20 00:42:26 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  Gefunden  1  Artikel
  -rw-r-----  1  Benutzer-Supergruppe  516  2014-04-20 00:36 /var/log/hadoop-yarn/apps/user/logs/application_1397933444099_0001/10.115.86.114_59329
  $ hadoop fs -cat /var/log/hadoop-yarn/apps/user/logs/application_1397933444099_0001/10.115.86.114_59329
  2014-04-20 00:45:44.565 java[79923:1703]  Realm-Informationen können nicht aus SCDynamicStore geladen werden
  14/04/20 00:45:44 WARN util.NativeCodeLoader: Native-Hadoop-Bibliothek kann nicht geladen werden  für  Ihrer Plattform... gegebenenfalls unter Verwendung von Built-in-Java-Klassen
  P VERSIONAPPLICATION_ACL
  MODIFY_APPVIEW_APP APPLICATION_OWNER
  Benutzer(&container_1397933444099_0001_01_000001Gstderr48/bin/bash: /bin/java: Keine solche Datei oder Verzeichnis
  stdout0(&container_1397933444099_0001_02_000001Gstderr48/bin/bash: /bin/java: Keine solche Datei oder Verzeichnis
  stdout0
  VERSION*(&container_1397933444099_0001_02_000001none?B?Bdata:BCFile.indexnoneÍ
  data:TFile.indexnone?X66data:TFile.metanone?R???h??×¶9?A@???P

Seltsames Format, aber wir können die Fehlermeldung zwischen dem Müll deutlich sehen /bin/bash: /bin/java: No such file or directory. Im Internet fand ich diese Problemumgehung und die Ausgabe HADOOP-8717, die das Problem einschließlich einer Lösung beschreibt. Da ich mehr daran interessiert bin, das Problem zu beheben, als einen Workaround zu verwenden, habe ich mich für den Patch der Startskripte entschieden. Der Patch in der Ausgabe HADOOP-8717 ändert ein wenig mehr als nötig. Wir müssen nur hadoop-config.sh ändern. Lassen Sie uns herausfinden, wo dieses Skript zu finden ist und es ändern.

$  cd 
/cdh5.0.0
$ find . -name hadoop-config.sh 
 
./hadoop-2.3.0-cdh5.0.0/bin-mapreduce1/hadoop-config.sh
 
./hadoop-2.3.0-cdh5.0.0/libexec/hadoop-config.sh
 
./hadoop-2.3.0-cdh5.0.0/src/hadoop-common-project/hadoop-common/src/main/bin/hadoop-config.sh
 
./hadoop-2.3.0-cdh5.0.0/src/hadoop-mapreduce1-project/bin/hadoop-config.sh
$ vi ./hadoop-2.3.0-cdh5.0.0/libexec/hadoop-config.sh

Das Skript lautet

# Unter OSX verwenden Sie java_home (oder /Library für ältere Versionen)
wenn [ "Darwin" == "$(uname -s)" ]; dann
   wenn [  -x /usr/libexec/java_home  ]; dann
       exportieren JAVA_HOME=($(/usr/libexec/java_home))
   sonst
       exportieren JAVA_HOME=(/Library/Java/Home)
   fi
fi
...

aber wir müssen es ändern in

...
# Unter OSX verwenden Sie java_home (oder /Library für ältere Versionen)
wenn [ "Darwin" == "$(uname -s)" ]; dann
    wenn [  -x /usr/libexec/java_home  ]; dann
        exportieren JAVA_HOME=$(/usr/libexec/java_home)
    sonst
        exportieren JAVA_HOME=/Library/Java/Home
    fi
fi
...

Starten wir YARN nun erneut

$ stop-yarn.sh  &&  start-yarn.sh
$  cd ${HADOOP_PREFIX}
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.3.0-cdh5.0.0.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

Wow, wir haben es zum Laufen gebracht, nicht wahr?

Weiter zu Spark

Um mit der Spark-Shell zu experimentieren, kehren wir zur lokalen Hadoop-Konfiguration zurück:

$ switch_local_cdh5
$ spark-shell
  ls: /cdh5.0.0/spark-0.9.0-cdh5.0.0/assembly/target/scala-2.10/: Keine solche Datei oder Verzeichnis
  ls: /cdh5.0.0/spark-0.9.0-cdh5.0.0/assembly/target/scala-2.10/: Keine solche Datei oder Verzeichnis
  Spark-Assembly in /cdh5.0.0/spark-0.9.0-cdh5.0.0/assembly/target/scala-2.10/ konnte nicht gefunden werden
  Sie müssen Spark mit  sbt/sbt Baugruppe'.  bevor Sie dieses Programm ausführen.

Die Spark-Shell geht davon aus, dass ich es aus dem Quellcode-Build oder so ausführe. Das ist aber nicht der Fall. Schauen wir mal, wie man das beheben kann.

$ vi /cdh5.0.0/spark-0.9.0-cdh5.0.0/bin/spark-shell
#hier sehen wir, dass es die Spark-Klasse aufruft
sonst
    $FWDIR/bin/spark-class $OPTIONS org.apache.spark.repl.Main  "$@"
fi
$ vi /cdh5.0.0/spark-0.9.0-cdh5.0.0/bin/spark-class
...
wenn [  ! -f  "$FWDIR/RELEASE" ]; dann
    # Beenden, wenn der Benutzer Spark nicht kompiliert hat
    num_jars=$(ls  "$FWDIR"/assembly/target/scala-$SCALA_VERSION/
 |  grep  "spark-assembly.*hadoop.*.jar" |  wc -l)
    jars_list=$(ls  "$FWDIR"/assembly/target/scala-$SCALA_VERSION/
 |  grep  "spark-assembly.*hadoop.*.jar")
    wenn [ "$num_jars"  -eq  "0" ]; dann
        echo "Spark-Assembly konnte nicht gefunden werden in  $FWDIR/zusammenbau/ziel/scala-$SCALA_VERSION/" >&2
        echo "Sie müssen Spark mit 'sbt/sbt assembly' bauen, bevor Sie dieses Programm ausführen können. >&2
        Ausgang  1
    fi
    wenn [ "$num_jars"  -gt  "1" ]; dann
        echo "Mehrere Spark-Assembly-Jars gefunden in  $FWDIR/zusammenbau/ziel/scala-$SCALA_VERSION:" >&2
        echo "$jars_list"
        echo "Bitte entfernen Sie alle Gläser bis auf eines."
        Ausgang  1
    fi
fi
...

Die Bash-Skripte suchen nach Beweisen dafür, dass wir eine Release-Version ausführen (indem sie sich die Datei RELEASE ansehen); sie suchen dann nach einer jar-Datei mit assembly im Namen. Schauen wir nach, ob wir eine solche jar-Datei haben.

$ find /cdh5.0.0 -name  "*assembly*jar"
 
/cdh5.0.0/spark-0.9.0-cdh5.0.0/spark-assembly_2.10-0.9.0-cdh5.0.0-hadoop2.3.0-cdh5.0.0.jar

Sie ist vorhanden, aber nicht an der Stelle, die das Skript spark-class sucht. Wir müssen nur das Skript spark-class ändern, damit es an der richtigen Stelle sucht, und die Datei RELEASE hinzufügen.

$ touch /cdh5.0.0/spark-0.9.0-cdh5.0.0/RELEASE
$ vi /cdh5.0.0/spark-0.9.0-cdh5.0.0/bin/spark-class
...
wenn [  ! -f  "$FWDIR/RELEASE" ]; dann
    # Beenden, wenn der Benutzer Spark nicht kompiliert hat
    num_jars=$(ls  "$FWDIR"/assembly/target/scala-$SCALA_VERSION/
 |  grep  "spark-assembly.*hadoop.*.jar" |  wc -l)
    jars_list=$(ls  "$FWDIR"/assembly/target/scala-$SCALA_VERSION/
 |  grep  "spark-assembly.*hadoop.*.jar")
    wenn [ "$num_jars"  -eq  "0" ]; dann
        num_jars=$(ls  "$FWDIR"/
 |  grep  "spark-assembly.*hadoop.*.jar" |  wc -l)
        jars_list=$(ls  "$FWDIR"/
 |  grep  "spark-assembly.*hadoop.*.jar")
        wenn [ "$num_jars"  -eq  "0" ]; dann
            echo "Spark-Assembly konnte nicht gefunden werden in  $FWDIR/zusammenbau/ziel/scala-$SCALA_VERSION/" >&2
            echo "Sie müssen Spark mit 'sbt/sbt assembly' bauen, bevor Sie dieses Programm ausführen können. >&2
            Ausgang  1
        fi
    fi
    wenn [ "$num_jars"  -gt  "1" ]; dann
        echo "Mehrere Spark-Assembly-Jars gefunden in  $FWDIR/zusammenbau/ziel/scala-$SCALA_VERSION:" >&2
        echo "$jars_list"
        echo "Bitte entfernen Sie alle Gläser bis auf eines."
        Ausgang  1
    fi
fi
...

Versuchen Sie es noch einmal.

$ spark-shell
  ls: /cdh5.0.0-blog/spark-0.9.0-cdh5.0.0/jars/spark-assembly*.jar: Keine solche Datei oder Verzeichnis
  Fehler: Die Hauptklasse org.apache.spark.repl.Main konnte nicht gefunden oder geladen werden

Es ist wieder richtig. Irgendwo anders machen wir eine falsche Annahme über die Struktur unseres Verzeichnisbaums. Aber wo?

$  cd  spark-0.9.0-cdh5.0.0/bin
$ grep  jars/spark-assembly'.  *
  compute-classpath.sh:  ASSEMBLY_JAR=</span>ls <span class="s2">"</span><span class="nv">$F</span><span class="s2">WDIR"</span>/jars/spark-assembly*.jar<span class="sb">  $ vi compute-classpath.sh
# Entfernen Sie die /jars in der ASSEMBLY_JAR-Variable, und versuchen Sie es erneut.
$  cd  ../../
$ spark-shell
  Ausnahme im Thread  "Haupt"  java.lang.NoClassDefFoundError: org/apache/hadoop/fs/FSDataInputStream
  at org.apache.spark.repl.SparkIMain.(SparkIMain.scala:93)
 at org.apache.spark.repl.SparkILoop$SparkILoopInterpreter.(SparkILoop.scala:174 )
 at org.apache.spark.repl.SparkILoop.createInterpreter (SparkILoop.scala:193 )
 at org.apache.spark.repl.SparkILoop $$anonfun$process $1.apply$mcZ$sp (SparkILoop.scala:887 )
 at org.apache.spark.repl.SparkILoop $$anonfun$process $1.apply (SparkILoop.scala:883)
 at org.apache.spark.repl.SparkILoop $$anonfun$process $1.apply (SparkILoop.scala:883 )
 at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader (ScalaClassLoader.scala:135 )
 at org.apache.spark.repl.SparkILoop.process (SparkILoop.scala:883 )
 at org.apache.spark.repl.SparkILoop.process (SparkILoop.scala:981)
 at org.apache.spark.repl.Main$.main (Main.scala:31 )
 at org.apache.spark.repl.Main.main (Main.scala )
 Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.fs.FSDataInputStream
  at java.net.URLClassLoader $1.run (URLClassLoader.java:366 )
 at java.net.URLClassLoader $1.run (URLClassLoader.java:355 )
 at java.security.AccessController.doPrivileged (Native Method )
 at java.net.URLClassLoader.findClass (URLClassLoader.java:354 )
 at java.lang.ClassLoader.loadClass (ClassLoader.java:423)
 at sun.misc.Launcher $AppClassLoader.loadClass (Launcher.java:308)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 11 mehr 

Wir kommen der Sache näher. Spark kann unsere Hadoop-Jars nicht finden. Um das zu beheben, fügen wir dem compute-classpath.sh Skript einige classpath Einstellungen hinzu:

$ vi spark-0.9.0-cdh5.0.0/bin/compute-classpath.sh
...
ASSEMBLY_JAR=</span>ls <span class="s2">"</span><span class="nv">$F</span><span class="s2">WDIR"</span>/spark-assembly*.jar<span class="sb"> # Hier werden die Referenzen auf den Hadoop-Klassenpfad hinzugefügt. CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/common/*:$HADOOP_PREFIX/share/hadoop/common/lib/*" CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/mapreduce/*" CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/mapreduce/lib/*" CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/yarn/*" CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/yarn/lib/*" CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/hdfs/*" CLASSPATH="$CLASSPATH:$HADOOP_PREFIX/share/hadoop/hdfs/lib/*" CLASSPATH="$CLASSPATH:$SPARK_HOME/lib/*"
$ 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!!

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" )

Funktioniert wie ein Zauber. Ich hoffe, dies war eine nützliche Übung. Für mich war sie es zumindest.

Contact

Let’s discuss how we can support your journey.