Ahogy azt az előadásban is láthattuk, az Apache Hadoop keretrendszer és a HDFS elosztott fájlrendszer üzemeltetéséhez több szoftverkomponensre is szükségünk van: NameNode
, ResourceManager
, DataNode
, HistoryNode
, stb. Ebben a fejezetben bemutatjuk, hogy lehet telepítés nélkül, viszonylag egyszerű módon egy ilyen klasztert tetszőleges gépen beüzemelni. Ehhez a Docker [1] konténer szoftvert és előre elkészített konténer fájlokat fogunk használni. A Docker rendszer bemutatása nem tartozik jelen anyag keretébe, de az alábbi forrásokból további információk szerezhetők róla:
Docker elérhető az összes fontosabb operációs rendszerre, a következők feltételezik, hogy rendelkezésre áll egy telepített Docker rendszer a gépen, ami a hivatalos dokumentáció [1] alapján könnyen kivitelezhető. A klaszterhez szükséges egyes node-ok képfáljai GitHub-on elérhetők [2], a példa során innen fogjuk letölteni őket.
Első lépésként a Big Data Europe GitHub repozitóriumból töltsük le a megfelelő képfájlokat. Ehhez feltétel, hogy a Git [3] verziókövető elérhető legyen gépünkön. Amennyiben nem az, először telepítsük. Ezután a következő parancssal letölthetjük gépünkre a megfelelő Docker image fájlokat:
x
$ git clone https://github.com/big-data-europe/docker-hadoop.git
A parancs végrehajtása után letöltődnek a szükséges image-ek a docker-hadoop
mappába a saját gépünkre. A klaszter elemeit a docker-compose.yml
fájl írja le, amennyiben szükséges a klaszter működésének módosítása, úgy ezt a fájlt kell átszerkeszteni. A példánk során mi a módosítatlan konfigurációs fájlt fogjuk használni, ami a következő komponenseket definiálja:
namenode
- a Hadoop NameNode csomópont a megfelelő port beállításokkal, ami a datanode
- adattároló csomópont, egy darab ( a klaszter egyetlen adat node-ot tartalmaz)resourcemanager
- erőforrás kezelésért felelős node (Apache Yarn)nodemanager1
- Hadoop Node Manager csomóponthistoryserver
- Hadoop history server nodeA klaszter elindításához az alábbi Docker parancsot kell kiadnunk:
x
$ docker compose up -d
A parancs hatására a megfelelő Docker image-ek letöltődnek a Docker-Hub [4] központi image tárhelyről, lefordulnak és előállnak a szükséges állományok, majd a fenti szolgáltatások elindulnak. A futó szolgáltatásokat és a Hadoop klaszter elemeit az alábbi ábra szemléltet.
Először ellenőrizzük le, hogy a fenti parancs sikeresen végrehajtódott. Adjuk ki az alábbi Docker parancsot:
xxxxxxxxxx
$ docker ps
Ez a parancs az éppen futó Docker konténereket listázza ki, így a fenti ábrán is látható öt komponens mindegyikét látnunk kell a listában:
Ha minden rendben van, a NameNode komponenst böngészőből is elérjük a http://localhost:9870 címen. A következő kép a NameNode webes felületét mutatja:
Előfordulhat, hogy a NameNode indulás után ún. safe mode-ba kerül, ekkor a fenti áttekintő oldalon a Safemonde is ON
felirat jelenik meg. Ekkor az adat csomópontok nem írhatók, a klasztert nem tudjuk teljes körűen használni. Ebben az esetben a következő lépéseket kell végrehajtanunk.
xxxxxxxxxx
$ docker exec -it namenode bash
xxxxxxxxxx
root@f9f64f9e7eb8:/# hdfs dfsadmin -safemode leave
xxxxxxxxxx
root@f9f64f9e7eb8:/# hdfs fsck / -delete
Ezután töltsük be a NameNode webes felületét, már a fenti Safemode is off
feliratot kell látnunk.
Amennyiben fut a Hadoop klaszterünk, a NameNode konténerben futtatott bash terminál segítségével Hadoop parancsokat adhatunk ki a hdfs
parancssori kliens segítségével. Ezt az eszközt használhatjuk arra, hogy fájlműveleteket végezzünk a HDFS-en (lásd 2. fejezet). Ehhez lépjünk ismét be a futó NameNode dokcer konténerbe és indítsunk egy bash terminált:
xxxxxxxxxx
$ docker exec -it namenode bash
Hozzunk létre pár egyszerű szöveges fájlt és másoljuk fel őket HDFS-re:
xxxxxxxxxx
root@f9f64f9e7eb8:/# mkdir input
root@f9f64f9e7eb8:/# echo "Hello World Bye World" >input/file01
root@f9f64f9e7eb8:/# echo "Hello Hadoop Goodbye Hadoop" >input/file02
Miután a NameNode konténeren belül létrehoztuk a fájlokat, hozzunk létre egy könyvtárat HDFS-en és másoljuk fel ezt a két fájlt:
xxxxxxxxxx
root@f9f64f9e7eb8:/# hadoop fs -mkdir -p /input
root@f9f64f9e7eb8:/# hdfs dfs -put ./input/* /input
Most már a HDFS-en is elérhető a két fájl, tetszőleges Hadoop kompatibilis eszközzel feldolgozható (pl. MapReduce, Spark, stb.). Listázzuk ki az input könyvtár tartalmát és nézzük meg a fájl tartalmát:
xxxxxxxxxx
root@f9f64f9e7eb8:/# hadoop fs -ls /input
Found 2 items
-rw-r--r-- 3 root supergroup 21 2020-08-07 07:56 /input/file01
-rw-r--r-- 3 root supergroup 27 2020-08-07 07:56 /input/file02
xxxxxxxxxx
root@f9f64f9e7eb8:/# hadoop fs -cat /input/file01
2020-08-07 11:34:03,619 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
Hello World Bye World
A HDFS klaszter leállításához az alábbi Docker parancsot kell használni:
xxxxxxxxxx
$ docker compose down
Az alábbi videó lecke a HDFS használatát, a rajta végezhető műveleteket demonstrálja:
feladat
mappát a HDFS fájlrendszerben, és másolj fel egy tetszőleges csv fájlt bele, ezután listázd ki a fájlt parancssorból és nézd meg a NameNode webes felületén keresztül is a browser utility segítségével! Ezután pedig töltsd le a csv fájlt HDFS-ről a saját gépre![2] https://github.com/big-data-europe/docker-hadoop
[5] https://www.tutorialspoint.com/hadoop/hadoop_command_reference.htm