Konfiguracja hadoopa w laboratoriach MIMUW
Będziemy używać hadoopa uruchomianego na komputerach w wydziałowych laboratoriach. Każdy ze was będzie tworzył swój własny klaster hadoopa; w tym celu prościej jest używać hadoopa w wersji 1.x niż 2.x (2.x umożliwia lepsze zarządzanie wieloma użytkownikami i wieloma zadaniami w ramach jednego klastra). Aplikacje hadoopa używają HDFS, rozproszonego systemu plików. Węzłami HDFS będą te same komputery na których przeprowadzać będziemy obliczenia. HDFS przechowuje dane na lokalnych dyskach twardych (/tmp/
), które są okresowo czyszczone.
Programy można też testować na pojedynczej maszynie na której stawiamy wiele procesów hadoopa: http://hadoop.apache.org/docs/r1.2.1/cli_minicluster.html
1 Alternatywy
Hadoop można też uruchamiać lokalnie na pojedynczym komputerze jako oddzielny proces (pseudo-distributed); albo na pojedynczym komputerze w tym samym procesie co testowany programem (stand-alone).
1.1 Uruchamianie programu w jednym procesie razem z hadoopem (w eclipse; stand-alone)
- stwórz projekt w eclipse
- dodaj do project properties->java build path->libraries wszystkie jary z hadoop/lib i hadoop-core z hadoop
- Stwórz klasę MyWordCount i wklej zawartość z naszych materiałów ( http://mimuw.edu.pl/~krzadca/hadoop-programy.tar.gz ).
- Stwórz katalog z danymi wejściowymi 'input' jako podkatalog katalogu głównego projektu; dodaj tam kilka plików tekstowych.
- Stwórz nową konfigurację uruchomieniową: project properties -> run/debug settings -> new configuration; ustaw katalog wejściowy (input) i wyjściowy (output) w zakładce program arguments
- Przed każdym uruchomieniem usuń katalog wyjściowy (output).
1.2 Uruchamianie hadoopa w oddzielnym procesie (pseudo-distributed)
W tej wersji uruchamiamy hadoopa jako oddzielny proces (serwera) na jednym węźle (; programy obliczeniowe będą komunikowały się z tym serwerem tak
2 Przygotowania
Upewnij się, że możesz zalogować się przez ssh bez podawania hasła na wybrane komputery (w tym tutorialu: violet02
, violet05
i violet06
). Zaloguj się na pierwszy z komputerów z tej listy.
3 Instalacja klastra w laboratoriach mimuw
Instalacja klastra polega na instalacji i uruchomieniu systemu plików HDFS (składa się z namenode, czyli węzła tłumaczącego nazwy plików na ich lokalizacje; oraz datanodes, czyli węzłów przechowujących dane); oraz na uruchomieniu systemu obliczeń map-reduce (składa się z jobtracker, czyli węzła zlecającego zadania i kontrolującego ich postęp; oraz tasktrackers, czyli węzłów wykonujących zlecone zadania).
W naszej instrukcji procesy namenode i jobtracker będą działać na tym samym komputerze, zwanym poniżej kontrolerem.
Jeśli coś nie działa:
- problemem może być usiłowanie korzystania przez hadoop z zajętego portu. Zmodyfikuj wartość
first_port
w skrypciemimuw-config.py
. - inny problem to niezgodność ID w systemie plików HDFS (błędy w logach datanodes); w takim przypadku najprościej jest usunąć katalogi
/tmp/hadoop-XX123456
ze wszystkich węzłów, a następnie przeformatować system plików.
Instrukcje:
- Ściągnij naszą dystrybucję hadoopa: http://mimuw.edu.pl/~krzadca/mimuw-hadoop-1.2.1.tar.gz
Dystrybucja ma ustawioną zmienną JAVA_HOME
w conf/hadoop-env.sh
; oraz dodany skrypt ustawiający najważniejsze pliki konfiguracyjne.
- Rozpakuj dystrybucję w swoim katalogu domowym; powstanie katalog
~/hadoop
. - Przejdź do katalogu
~/hadoop
. - Do pliku
hosts
wpisz nazwy hostów na których postawisz klaster (jedna nazwa w linii); pierwszy host z tej listy będzie kontrolerem (master node) systemu plików i obliczeń. Jako pierwszy host wpisz nazwę komputera przy którym siedzisz. - Uruchom skrypt
$ python mimuw-config.py
Skrypt ten wygeneruje pliki konfiguracyjne hadoopa: conf/slaves
(węzły używane do obliczeń) i wpisze koordynatora do conf/core-site.xml
, conf/mapred-site.xml
i conf/hdfs-site.xml
. Uwaga: zapisz adresy które ten skrypt generuje: np: jobtracker: http://violet02:37770
i namenode: http://violet02:37780
- Sformatuj system plików HDFS:
$ bin/hadoop namenode -format
Uwaga: jeśli formatujesz drugi raz, hadoop prosi o potwierdzenie; upewnij się, że wciskasz duże 'Y'.
Szukaj informacji o sukcesie formatowania:
14/04/25 15:13:27 INFO common.Storage: Storage directory /tmp/hadoop-krzadca/dfs/name has been successfully formatted.
- Uruchom hadoop:
$ bin/start-all.sh
Na konsoli powinny zostać wypisane logi podobne do (zwróć uwagę, że uruchamiane są wszystkie 3 węzły):
starting namenode, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-namenode-violet02.out Picked up _JAVA_OPTIONS: -Xmx384M Picked up _JAVA_OPTIONS: -Xmx384M violet05: starting datanode, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-datanode-violet05.out violet06: starting datanode, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-datanode-violet06.out violet02: starting datanode, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-datanode-violet02.out localhost: starting secondarynamenode, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-secondarynamenode-violet02.out starting jobtracker, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-jobtracker-violet02.out Picked up _JAVA_OPTIONS: -Xmx384M Picked up _JAVA_OPTIONS: -Xmx384M violet05: starting tasktracker, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-tasktracker-violet05.out violet02: starting tasktracker, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-tasktracker-violet02.out violet06: starting tasktracker, logging to /home/staff/iinf/krzadca/hadoop/libexec/../logs/hadoop-krzadca-tasktracker-violet06.out
- Sprawdź czy hadoop działa poprawnie. Logi są w katalogu
logs
; informacje diagnostyczne są dostępne pod adresem namenode zapisanym w poprzednim punkcie (upewnij się, że są 3 aktywne węzły, live nodes).
W następnych krokach będziemy testować poprawność działania systemu używając aplikacji grep
z dystrybucji hadoopa.
- Przekopiuj dane wejściowe z lokalnego katalogu
hadoop/conf
do katalogu HDFSinput
:
$ bin/hadoop fs -put conf input
- Sprawdź zawartość katalogu HDFS
input
używając:bin/hadoop fs -ls input
lub interfejsu http namenode (którego adres wyprodukował skrypt pythona) (powinny być te same pliki co w lokalnym kataloguhadoop/conf
).
$ bin/hadoop fs -ls input
-rw-r--r-- 1 krzadca supergroup 7457 2014-04-25 15:15 /user/krzadca/input/capacity-scheduler.xml -rw-r--r-- 1 krzadca supergroup 1095 2014-04-25 15:15 /user/krzadca/input/configuration.xsl -rw-r--r-- 1 krzadca supergroup 201 2014-04-25 15:15 /user/krzadca/input/core-site.xml -rw-r--r-- 1 krzadca supergroup 327 2014-04-25 15:15 /user/krzadca/input/fair-scheduler.xml -rw-r--r-- 1 krzadca supergroup 2431 2014-04-25 15:15 /user/krzadca/input/hadoop-env.sh -rw-r--r-- 1 krzadca supergroup 2052 2014-04-25 15:15 /user/krzadca/input/hadoop-metrics2.properties -rw-r--r-- 1 krzadca supergroup 4644 2014-04-25 15:15 /user/krzadca/input/hadoop-policy.xml -rw-r--r-- 1 krzadca supergroup 183 2014-04-25 15:15 /user/krzadca/input/hdfs-site.xml -rw-r--r-- 1 krzadca supergroup 5018 2014-04-25 15:15 /user/krzadca/input/log4j.properties -rw-r--r-- 1 krzadca supergroup 2033 2014-04-25 15:15 /user/krzadca/input/mapred-queue-acls.xml -rw-r--r-- 1 krzadca supergroup 197 2014-04-25 15:15 /user/krzadca/input/mapred-site.xml -rw-r--r-- 1 krzadca supergroup 10 2014-04-25 15:15 /user/krzadca/input/masters -rw-r--r-- 1 krzadca supergroup 21 2014-04-25 15:15 /user/krzadca/input/slaves -rw-r--r-- 1 krzadca supergroup 2042 2014-04-25 15:15 /user/krzadca/input/ssl-client.xml.example -rw-r--r-- 1 krzadca supergroup 1994 2014-04-25 15:15 /user/krzadca/input/ssl-server.xml.example -rw-r--r-- 1 krzadca supergroup 3890 2014-04-25 15:15 /user/krzadca/input/task-log4j.properties -rw-r--r-- 1 krzadca supergroup 382 2014-04-25 15:15 /user/krzadca/input/taskcontroller.cfg
- Uruchom grep, aplikacje hadoopa:
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+'
W czasie gdy aplikacja działa, możesz oglądać jej postęp przez interfejs http (adres: jobtracker)
- Obejrzy logi (
logs/
): w logu jobtracker powinny pojawić się informacje o uruchamianiu tasków na każdym z węzłów (szukaj linii:Adding task (MAP) ... to tip ... for tracker ...
) - Obejrzyj rezultat wykonania grep który został zapisany w katalogu
output
HDFS (lub przez http, adres: namenode).
$ bin/hadoop fs -ls output
Found 3 items -rw-r--r-- 1 krzadca supergroup 0 2014-04-25 15:16 /user/krzadca/output/_SUCCESS drwxr-xr-x - krzadca supergroup 0 2014-04-25 15:16 /user/krzadca/output/_logs -rw-r--r-- 1 krzadca supergroup 52 2014-04-25 15:16 /user/krzadca/output/part-00000
Plik z wynikami:
$ bin/hadoop fs -cat output/part-00000
1 dfs.replication 1 dfs.server.namenode. 1 dfsadmin
Pliki można też skopiować z HDFS do systemu plików przez:
bin/hadoop fs -get output output-local cat output-local/*
- Zamknij hadoop
$ bin/stop-all.sh
4 Kontrola zadań
Lista zadań wykonujących się na klastrze:
$ bin/hadoop job -list
Uwaga: ctrl-c nie przerywa wykonania zadania!
Przerywanie zadania
$ bin/hadoop job -kill JobId