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)

  1. stwórz projekt w eclipse
  2. dodaj do project properties->java build path->libraries wszystkie jary z hadoop/lib i hadoop-core z hadoop
  3. Stwórz klasę MyWordCount i wklej zawartość z naszych materiałów ( http://mimuw.edu.pl/~krzadca/hadoop-programy.tar.gz ).
  4. Stwórz katalog z danymi wejściowymi 'input' jako podkatalog katalogu głównego projektu; dodaj tam kilka plików tekstowych.
  5. 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
  6. 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

http://hadoop.apache.org/docs/r1.2.1/single_node_setup.html

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 skrypcie mimuw-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:

  1. Ś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.

  1. Rozpakuj dystrybucję w swoim katalogu domowym; powstanie katalog ~/hadoop.
  2. Przejdź do katalogu ~/hadoop.
  3. 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.
  4. 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

  1. 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.
  1. 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
  1. 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.

  1. Przekopiuj dane wejściowe z lokalnego katalogu hadoop/conf do katalogu HDFS input:
$ bin/hadoop fs -put conf input
  1. 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 katalogu hadoop/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
  1. 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)

  1. 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 ...)
  2. 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/*
  1. 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

5 Materiały dodatkowe

Data: $Date: 2013-04-08 16:38:01 +0200 (Mon, 08 Apr 2013) $

Autor: Krzysztof Rządca

Created: 2014-05-19 Mon 17:41

Emacs 24.3.50.2 (Org mode 8.2.5h)

Validate