Hadoop
Rodzaje wezlow w Hadoop:
- NameNode i SecondaryNameNode (HDFS) - wezel zarzadzajacy metadanymi blokow (odpowiednik master w Google File System)
- DataNode (HDFS) - wezel przechowujacy kopie poszczegolnych blokow (odpowiednik chunkservers w Google File System)
- JobTracker (MapReduce) - wezel zarzadzajacy calymi zadaniami [Jobs] (pewien odpowiednik master w Google MapReduce)
- TaskTracker (MapReduce) - wezel wykonujacy podzadania [Tasks] (odpowiednik slave w Google MapReduce)
Lokalna instalacja Hadoop
http://sirius/~inf71395/hadoop/hadoop.tar.gz - dystrybucja Hadoop. Najwazniejsze pliki po rozpakowaniu:
- bin/hadoop - (wykonywalny) narzedzia Hadoop
- conf/ - konfiguracja; przede wszystkim conf/hadoop-site.xml
- docs/ - dokumentacja i API
Sprawdzenie instalacji
$ cd ${HADOOP_HOME}
$ bin/hadoop
# proba polaczenia z hdfs - listing glownego katalogu:
$ bin/hadoop fs -ls /
# proba polaczenia z jobtracker - listing aktywnych zadan:
$ bin/hadoop job -list
cw. 1. Zliczanie wystapien slow: implementacja map() i reduce()
WordCount.java - szkielet, pelna implementacja
- map() - na wejsciu rekordy [przesuniecie_w_pliku, zawartosc_linii]; generuje pary posrednie: [slowo, 1]
- reduce() - na wejsciu klucz [slowo] i zwiazane z nim ciag wartosci [liczba_wystapien]; sumuje liczbe wystapien i generuje pary [slowo, liczba_wystapien]
Przydatna dokumentacja:
http://hadoop.apache.org/core/docs/r0.18.1/api/org/apache/hadoop/mapred/OutputCollector.html
http://hadoop.apache.org/core/docs/r0.18.1/api/org/apache/hadoop/io/Text.html
http://hadoop.apache.org/core/docs/r0.18.1/api/org/apache/hadoop/io/IntWritable.html
http://hadoop.apache.org/core/docs/r0.18.1/api/org/apache/hadoop/io/LongWritable.html
i np. http://java.sun.com/javase/6/docs/api/java/util/StringTokenizer.html
Kompilacja i przygotowanie jar z zadaniem:
$ mkdir classes
$ javac -cp hadoop-0.18.1-core.jar WordCount.java
$ jar -cvf wordcount.jar WordCount*.class
Uruchamianie zadania:
bin/hadoop jar wordcount.jar WordCount [input_HDFS_dir] [output_HDFS_dir]
# np.:
$ bin/hadoop jar wordcount.jar WordCount /user/putgrid/small_input output
Przykladowe wejscia (dostepne na HDFS):
- /user/putgrid/small_input - kilka bardzo malych (~kilka KB) plikow (do testowania funkcjonalnosci)
- /user/putgrid/medium_input - kilkanascie dosc malych (~500 KB) plikow (do szybkiego testowania wydajnosci na malych danych)
- /user/putgrid/big_input - kilka DUZYCH!! (~270MB) plikow (do testowania wydajnosci)
Odczytywaniue/usuwanie wyjscia:
Przez interfejsy WWW do monitorowania (w tym statystyki), albo...
$ bin/hadoop fs -get output output
$ bin/hadoop fs -rmr output
cw 2. Wieksza wydajnosc: uzycie combine() i partition()
Combiner
http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/JobConf.html#setCombinerClass(java.lang.Class)
Partition
conf/hadoop-site.xml |
...
<property>
<name>mapred.reduce.tasks</name>
<value>??</value>
</property>
...
|
Własna implementacja partition?
WordCount.java V2.0 - szkielet, pelna implementacja
cw 3. Sortowanie po ilosci wystapien: wielokrotne map-reduce
WordCount.java V3.0 - pelna implementacja
Przydatna dokumentacja:
http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/mapred/lib/InverseMapper.html
cw 4. Obsluga ignorowanych znakow: zastosowanie DistributedCache
WordCount.java V4.0 - szkielet, pelna implementacja; przykladowy plik z wzorcami (na HDFS): /user/zawir/patterns.txt
Przydatna dokumentacja:
http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/filecache/DistributedCache.html
cw 5. Eksperyment z fault tolerance
--- Inne zastosowania, feature'y?
(c) 2008 Marek Zawirski, marek.zawirski \\NA\\ gmail.com