Hadoop - es geht weiter

Ich komme davon nicht los. Hadoop, HDFS, Hbase und der ganze REST. Es ist wie ein Labyrinth oder Puzzle, bei dem man nicht weiss, ob es sich als Ganzes aufloest, wenn man weiter herantritt oder weiter wegstehen muss. Was bislang geschah: Wir haben 4 Rechner...

Posted by eumel8 on January 09, 2011 · 9 mins read

Ich komme davon nicht los. Hadoop, HDFS, Hbase und der ganze REST. Es ist wie ein Labyrinth oder Puzzle, bei dem
man nicht weiss, ob es sich als Ganzes aufloest, wenn man weiter herantritt oder weiter wegstehen muss.

Was bislang geschah:
Wir haben 4 Rechner mit SLES-10 Betriebssystem 32bit (oder besser 64bit, wenn wir mehr RAM-Speicher adressieren
wollen)
Wir legen auf allen 4 Rechnern den Benutzer "hadoop" an und praeperieren den ssh-key fuer den Benutzer:

# ssh-keygen -q -t rsa -N ''
# cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
# scp -r ~/ssh hdp-cl02:~/
# scp -r ~/ssh hdp-cl03:~/
# scp -r ~/ssh hdp-cl04:~/

und installieren Hadoop  nach /home/hadoop auf alle Rechner:

# wget http://www.apache.org/dist/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
# tar xvfz hadoop-0.20.2.tar.gz
# ln -s hadoop-0.20.2 hadoop
# scp -r hadoop* hdp-cl02:~/
# scp -r hadoop* hdp-cl03:~/
# scp -r hadoop* hdp-cl04:~/


Es erfolgt die Konfiguration unseres Hadoop- und HDFS-Clusters, denn HDFS ist standardmaessig in Hadoop enthalten:
/home/hadoop/hadoop/conf/masters

hdp-cl01

 

/home/hadoop/hadoop/conf/slaves

 

hdp-cl01
hdp-cl02
hdp-cl03
hdp-cl04

 

/home/hadoop/hadoop/conf/hdfs-site.xml





dfs.replication
2
Default block replication.
The actual number of replications can be specified when the file is created.
The default is used if replication is not specified in create time.



dfs.name.dir
/tmp/hadoop-root


dfs.data.dir
/tmp/hadoop-data


/home/hadoop/hadoop/conf/mapred-site.xml




mapred.job.tracker
hdp-cl01:54311
The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.



mapred.system.dir
/tmp/shadoop


mapred.local.dir
/tmp


mapred.map.tasks
40


mapred.reduce.tasks
8


/home/hadoop/hadoop/conf/core-site.xml




fs.default.name
hdfs://hdp-cl01:54310
The name of the default file system. A URI whose
scheme and authority determine the FileSystem implementation. The
uri's scheme determines the config property (fs.SCHEME.impl) naming
the FileSystem implementation class. The uri's authority is used to
determine the host, port, etc. for a filesystem.




Die Konfiguration wird ebenfalls auf alle Rechner verteilt, obwohl das nicht unbedingt notwendig ist:

 

for i in 02 03 04 ; do scp /home/hadoop/hadoop/conf/* hdp-cl$i:~/hadoop/conf;done

 

Mit

/home/hadoop/hadoop/bin/start-all.sh

starten wir den Masternode hdp-cl01, die Mapreduce-Nodes hdp-cl01 - hdpcl04
und die DFS-Nodes hdp-cl01 - hdp-cl04.
Mit

/home/hadoop/hadoop/bin/hadoop dfsadmin -report

koennen wir uns den Status von HDFS ansehen.
Wir besorgen uns Hbase und installieren es auf alle 4 Rechner:

# cd ~
# wget http://www.apache.org/dist/hadoop/hbase/hbase-0.20.5/hbase-0.20.5.tar.gz
# tar xvfz hbase-0.20.5.tar.gz
# ln -s hbase-0.20.5 hbase


Es erfolgt die Konfiguration unseres HBase-Clusters:

/home/hadoop/hbase/conf/regionservers

hdp-cl01
hdp-cl02
hdp-cl03
hdp-cl04

/home/hadoop/hbase/conf/hbase-site.xml





hbase.rootdir
hdfs://hdp-cl01:54310/hbase
The directory shared by region servers.



hbase.cluster.distributed
true
The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed Zookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)



hbase.master.info.port
60010
The port for the hbase master web UI
Set to -1 if you do not want the info server to run.



hbase.zookeeper.property.clientPort
2222
Property from ZooKeeper's config zoo.cfg.
The port at which the clients will connect.



hbase.zookeeper.quorum
hdp-cl01,hdp-cl02,hdp-cl03,hdp-cl04
Comma separated list of servers in the ZooKeeper Quorum.
For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com".
By default this is set to localhost for local and pseudo-distributed modes
of operation. For a fully-distributed setup, this should be set to a full
list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh
this is the list of servers which we will start/stop ZooKeeper on.




Mit Hbase haben wir gleichzeitig ZooKeeper installiert und konfiguriert. Waehrend Hadoop mit unserem Map/Reduce-Cluster nur Jobs ausfuehren kann, die beliebig lange dauern koennen, haben wir mit Hbase eine Datenbank vorliegen,
die wir auch in Echtzeit abfragen koennen.
Dazu starten wir mit

/home/hadoop/hbase/bin/start-hbase.sh

alle Dienste. Mit der hbase-Shell koennen wir eine Tabelle mit 3 Spalten in Hbase anlegen:

 

# /home/hadoop/hbase/bin/hbase
hbase(main):001:0> create 'my_table', 'f1', 'f2', 'f3'
0 row(s) in 0.1600 seconds
hbase(main):002:0> list
my_table

 


Wir starten in Hbase Stargate und stellen somit eine REST-Schnittstelle im Web zur Verfuegung:

 

# /home/hadoop/hbase/bin/hbase-daemon.sh start org.apache.hadoop.hbase.stargate.Main -p 8090

 

Wenn wir jetzt im Browser die Adresse http://hdp-cl01.mydomain.de:8090/ ansurfen, sollten wir dort "mytable" lesen, was
dem ersten GET-Aufruf unserer REST-Schnittstelle betrifft. Mit GET, POST, PUT, DELETE koennen wir unsere nosql db
weiter bedienen.


Fassen wir noch einmal zusammen:
- Wir haben einen Cluster gebaut, auf dem wir Rechenleistung auf mehrere Rechner verteilen koennen.
- Wir haben ein Cluster-Filesystem mit einer zweifachen Redundanz aller Daten.
- Wir haben eine Datenbank auf mehreren Knoten, die wir uebers Web bedienen koennen.

Was machen wir damit? Nach einigen Ueberlegungen fallen einem noch paar mehr Sachen ein ausser
Logfileauswertung mit Map/Reduce:
Variante 1: Content-Management-System (CMS).
Content wird sowieso als xml-Files angeliefert. Wir bilden das XML-Schema im Hbase nach und fuettern die Hbase-
Datenbank mit den Content-Artikel. Aufrufen kann man die Artike sofort ueber ihre row-Number in der Datenbank etwa
ueber http://hdp-cl01.meinedomain.de:8090/cnt/001. Eigentlich brauch man bloss noch eine XHTML-Seite dazu und
vielleicht moechte man auch noch nach Artikeln suchen oder diese in einer Ausgabe nach Themen sortieren. Muss man
jetzt bauen? Gibt es schon! Lily-CMS auf http://www.lilycms.org/lily/index.html setzt auf HBase auf und beabsichtigt ein
Content-Repository-System mit einigen Hilfsmitteln zu erstellen.
Das Projekt ist in der Alpha-Phase und man darf gespannt sein bis zum Beta-Release.
Variante 2: Webmail-System (SMTP). From:
Es ist nicht mehr zeitgemaess, seine Emails mit einem externen Mailprogramm wie Outlook oder Thunderbird zu
bearbeiten. Langfristig gesehen haben Applikationen, fuer die ein Extra-Programm zur Bedienung notwendig sind ausser
der Webbrowser, keine Zukunft. Egal ob es Chat, Foren, Mail oder die Administration der Homepage oder des Blogs ist
("Hallo, Sie baden gerade Ihre Finger dadrin"), alles wird oder ist bereits ueber den normalen Webbrowser bedienbar -
einfach und von ueberall.
Wenn man jetzt mal eine Email betrachtet, so besteht diese aus bestimmten Objekten:
To:
Subject:
Body
Normalerweise sind diese Objekte Bestandteil eines Files, welches als Datei in einem Directory oder mit vielen anderen
Objekten in einer Datei beherbergt wird - je nachdem ob man ein maildir oder mailbox Mailsystem betreibt. Je nach
Filesystem ergeben sich dann physikalische Grenzen beim Zugriff auf die Mails, deren Ursache einfach in der Architektur
zu finden sind. Beim Zugriff auf das Directory liest ein Prozess alle Dateinamen ein, um eine Uebersicht der Mails zu
generieren. Beim Zugriff auf ein File wird das komplette File eingelesen, um daraus dann eine Uebersicht der Mails zu
generieren.
WAS WAERE JETZT, WENN DIESE OBJEKTE INHALT EINES SCHEMAS EINER DATENBANK WAEREN???
Ein Wahnsinn, ich weiss. Aber auch darueber hat sich schon jemand Gedanken gemacht.
Edward J. Yoon beschaeftigt sich im Hama-Projekt mit mathematischen und graphischen Berechnung rund um Grid-
Computing. Er hat eine Studie erstellt, wie Grid-Computing in ein Webmail-System zu integrieren ist.
In Taiwan fand im Mai 2010 die CBT 2010 (Grid and Pervasive Computing) statt. Dort gab es einen Vortrag von Duy
Phuong Pham mit dem Thema A Fully-Protected Large-Scale Email System Built on Map-Reduce Framework. (auch
erschienen unter Springer Verlag http://www.springerlink.com/content/xu46250m2267877n/ auszugsweise ab S. 662
unter books.google.com als Download auch hier) . Neben dem Abspeichern der Mails im HDFS-Filesystem wird
insbesondere noch auf die Spam-Erkennung mittels Map/Reduce eingegangen. Eine sehr interessante Ueberlegung,
wenn auch erstmal nur in der Theorie an der Universitaet Taiwan.
Aus heutiger Sicht leider auch technologisch schon 3 Schritte weiter.

- Hadoop
- HDFS
- Hbase
- Stargate