Wie gesagt, das braucht ihr nur falls die Installation von hadoop-conf-pseudo Probleme bereitet (wenn, dann installiert bigtop-jsvc und danach erneut obige Installation für hadoop-conf-pseudo aus. Und nehmt das Apache Bigtop von Git, nicht das Cloudera). Nun haben wir die wichtigsten Teile eines grundlegenden Hadoop-Systems, um Hadoop MapReduce in HDFS laufen zu lassen. Moment, HDFS?

HDFS

Hadoop dreht sich um große Daten. Wirklich, wirklich große Datenmengen. Und wenn man soviele Daten hat, kann man die nicht einfach mehr auf einer Festplatte halten. Außerdem will Hadoop freies Skalieren möglich machen – wenn man mehr Daten hat sollte es so einfach sein, einfach mehr Rechner dazu zu stellen.
Daher gibt es das Hadoop Distributed File System, ein verteiltes Dateisystem. Die Daten werden dazu über sogenannte Datenknoten/data nodes verteilt, die von einem Namensknoten/name node verwaltet werden. Der name node ist eine Schwachstelle, geht dieser Rechner unter, ist HDFS nicht mehr erreichbar. Die Datenspeicherkapazität kann aber vergrößert werden, indem man mehr data nodes einfügt. Zur Datensicherheit und -verfügbarkeit beim Ausfall von Knoten, werden diese mehrfach repliziert (ähnlich wie bei einem RAID). Wer mehr Details haben will, kann dies z.B. hier nachlesen.

Back to Business

Randbemerkung: Eine Sache fehlt noch in Ubuntu, eine dumme Einstellung die viel Unheil anrichten kann. Falls ihr je Fehler seht mit Verbindungsproblemen zwischen dem Namen eures Computers und localhost oder 127.0.0.1, editiert /etc/hosts und setzt in der zweite Zeile die IP von 127.0.1.1 auf 127.0.0.1. Aus irgendeinem Grund stellt Ubuntu da den eigenen Hostnamen auf 127.0.1.1 um, was beispielsweise HBase völlig verwirrt und sicher auch sonst mal für Probleme sorgen kann.

Und nun stellen wir sicher, dass auch Hadoop das richtige Java findet! Editiert dazu /etc/hadoop/conf/hadoop.env.sh und fügt die bekannte Zeile am Ende ein (wieder mit eurem Usernamen statt meinem…):

export JAVA_HOME=export JAVA_HOME=/home/joerg/installs/jdk1.6.0_31

Zum Starten und Stoppen von Hand (normalerweise starten die Services jetzt beim Reboot) legen wir ein Skript in ~/bin an und nennen es hadoopStart.sh

for service in /etc/init.d/hadoop-hdfs-*; do
    sudo $service start
done

Und eines zum Stoppen als ~/bin/hadoopStop.sh:

for service in /etc/init.d/hadoop-hdfs-*; do
    sudo $service stop
done

Das wir auch gleich ausführen

bash ~/bin/hadoopStop.sh

Jetzt sind wir bereit, HDFS zu formatieren, HDFS zu starten und die Verzeichnisstruktur anzulegen.

sudo -u hdfs hdfs namenode -format
sudo chmod -R 777 /var/lib/hadoop-*
bash ~/bin/hadoopStart.sh
sudo -u hdfs hadoop fs -mkdir /tmp
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp
sudo -u hdfs hadoop fs -mkdir /tmp/hadoop-yarn/staging
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging
sudo -u hdfs hadoop fs -mkdir /tmp/hadoop-yarn/staging/history/done_intermediate
sudo -u hdfs hadoop fs -chmod -R 1777 /tmp/hadoop-yarn/staging/history/done_intermediate
sudo -u hdfs hadoop fs -chown -R mapred:mapred /tmp/hadoop-yarn/staging
sudo -u hdfs hadoop fs -mkdir /var/log/hadoop-yarn
sudo -u hdfs hadoop fs -chown yarn:mapred /var/log/hadoop-yarn

Ihr seht, dass dort bereits die Services für HDFS gestartet werden, der data node und der name node. Da wir pseudo-verteilt sind, laufen diese natürlich lokal auf unserem Rechner und simulieren nur, was sie normal über Rechner verteilt anstellen. Es gibt auch noch den secondary name-node, der einen Teil der Arbeit übernimmt falls der name node ausfällt, den brauchen wir hier überhaupt nicht. Wenn ihr wollt, könnt ihr den Service abschalten oder gar deinstallieren. Jetzt fehlt nur noch, die MapReduce-Services zu starten…

sudo chown mapred /var/log/hadoop-mapreduce
sudo service hadoop-yarn-resourcemanager start
sudo service hadoop-yarn-nodemanager start
sudo service hadoop-mapreduce-historyserver start

(Wenn ihr wollt, legt für die letzten drei Services auch noch Start- und Stopscripts an…aber wie gesagt, sollten eh beim Booten starten). Noch den Homefolder in HDFS anlegen…
Nebenbei, wenn ihr das etablierte MRv1 statt dem neuen Yarn verwenden wollt, müsstet ihr hier die hadoop-0.20-mapreduce Services Jobtracker und Tasktracker starten.

1 / 2 / 3

Kommentare (2)

  1. […] dem schmerzhaften zweiten Teil, der Installation, haben wir jetzt ein Hadoop-System zum Spielen. Es läuft lokal, reagiert aber […]

  2. […] dem schmerzhaften zweiten Teil, der Installation, haben wir jetzt ein Hadoop-System zum Spielen. Es läuft lokal, reagiert aber […]