HTML

Az élet kódjai

Csináld maga. Senki nem csinálja meg helyetted.

Friss topikok

Intézeti felhőcske 2: Hadoop

2014.07.14. 08:00 Travis.CG

Több gépünk is van, ami nincs 100%-ban kihasználva, ezért úgy gondoltam, telepítek rájuk Hadoopot. Már csak a HDFS is megérné, hiszen a tárolt adatok így is több gépen vannak össze-vissza, gyakran aszerint, hogy éppen hol van hely. Ha emellett még MapReduce alkalmazásokat is bevethetünk, hogy a feladatokat gyorsabban megcsináljuk, az csak újabb jó pont.

Négy gépet akartam befogni. Mi tagadás, ennél heterogénebb rendszert elég nehéz elképzelni: OpenSUSE 12.0 Java 1.6-al, 3 Kubuntu 14.10, de az egyik 1.7 Oracle Javaval, kettő OpenJDK-val. A teljesítmény is elég ingadozó. Van 4, 8, 48 és 70 GB memória, 3 négy magos és egy 8 magos gép.

Az első és legfontosabb, hogy minél kevesebb gép specifikus elérési út legyen, ezért az /opt/hadoop-2.2.0 könyvtárba kerültek a Hadoop fájljai. A dokumentáció szerint a JAVA_HOME-t és a HADOOP_HOME-ot minden esetben be kell állítani. Ezek a .bashrc-ben kerültek beállításra.

A második legfontosabb, de ezt minden fórum és leírás hangoztatja, a jelszó mentes SSH belépés. Erre tonnányi anyag van a neten, nem térnék ki rá. Egy fontos momentum viszont hiányzik a dokumentációból, és csak a fórumok probléma megoldásai között találhatunk rá: az /etc/hosts-ban a gépek nevéhez ugyan az a bejegyzés legyen! Tehát ha egy gép neve slave12, akkor minden más hadoop gépen a slave12-höz ugyan az az IP cím szerepeljen, és ne 127.0.0.1.  

A dokumentáció szerint a konfigurációs állományok a HADOOP_HOME/conf könyvtárban vannak, de ez nem igaz. A HADOOP_HOME/etc/hadoop könyvtárban vannak. XML-ben vannak a programok paraméterei, míg a programok futásához szükséges környezeti változók .sh kiterjesztésű szkriptekben kerülnek beállításra. Célszerű ezeket úgy módosítani, hogy az egész konfigurációs könyvtárat tudjuk mozgatni az összes gépre. Ez igazából könnyen megoldható, mert a master és slave gépek csak abban különböznek, hogy más démonokat indítanak el rajtuk.

Ha minden démont egy gépen indítunk, akkor kapjuk az úgynevezett pseudo distributive módot. Ez igazából csak a konfiguráció helyességének tesztelésére jó, sok értelme szerintem nincs. Mint már említettem, a gépek két csoportba sorolhatóak: master és slave. A master gépek ha nem működnek, akkor nincs Hadoop. Alapvetően két démon tartozik ide: NameNode és Yarn (ResourceManager/JobTracker). Előbbi az elosztott fájlrendszer adatait tartja nyilván, utóbbi a MapReduce folyamatok működéséért felelős. Nagyobb rendszerek esetén mindegyikből lehet tartalékot is fenntartani (pl. másodlagos NameNode), de nálunk erre nincs sem lehetőség, sem igény.

A slave gépek vannak többen. Meghibásodásuk esetén a feladatot át tudja venni másik gép. Itt a DataNode és NodeManager démonok futnak.

A konfigurációs XML-ek felépítése egyszerű:

<property>
   <name> </name>
   <value> </value>
<property>
 

A nevek listáját ne a dokumentációból szedjük, hanem nézzük meg a default tartalmú fájlokat. Ezeket a find HADOOP_HOME -name "*default*xml" paranccsal találhatjuk meg. Az XML fájlokban mindegyik bejegyzéshez van leírás, amiből megtudjuk, mit állíthatunk be. A legfontosabb, hogy a slave gépek tudják, hol találják a master gépeket: A core-site.xml-ben az fs.defaultFS mondja meg, hol van a NameNode. A mapred-site.xml-ben a mapreduce.jobtracker.address azonosítja a JobTrackert, a yarn-site.xml-ben a yarn.resourcemanager.hostname pedig ahogy neve is mutatja a ResourceManager-t tartja nyilván. Természetesen egyéb beállításokat is tehetünk, de ez a minimum.

Ahogy a master gépeket azonosítottuk, ugyan úgy ismerni kell a slave gépek nevét is. A slaves fájlban fel kell sorolni valamennyit, valamint a yarn-site.xml-ben a yarn.nodemanager.xml-t állítsuk localhostra. A hdfs-site.xml-ben állíthatjuk be, hogy az adott gép milyen erőforrásokkal járuljon hozzá az elosztott fájlrendszerhez. Sajnos a mi esetünkben ez a leggyengébb pontja a konfigurációnak, mert minden gépen mást kell beállítani.

Jöhet a démonok indítása! Minden slave gépen el kell indítani a DataNode és NodeManager démonokat. Előbbi a HDFS-ért, utóbbi a MapReduce-ért felelős:

HADOOP_HOME/sbin/hadoop-daemon.sh --script hdfs start datanode
HADOOP_HOME/sbin/yarn-daemon.sh start nodemanager

A mi esetünkben csak egy master gép van, minden azzal kapcsolatos démont azon indítunk el. Még akkor is, ha a dokumentáció ezt nem javasolja.

HADOOP_HOME/sbin/hadoop-daemon.sh --script hdfs start namenode
HADOOP_HOME/sbin/yarn-daemon.sh start resourcemanager

 A rendszert a böngészőből lehet ellenőrizni, a 9000-es porton. Ha nem látjuk a weboldalt, akkor nem megy a NameNode. Ha a slave gépek közül hiányzik valamelyik, akkor nézzük át annak a gépnek a log fájljait. Ezeket a HADOOP_HOME/logs könyvtárban találjuk.

Szólj hozzá!

Címkék: cloud computing bioinformatika hadoop

A bejegyzés trackback címe:

https://cybernetic.blog.hu/api/trackback/id/tr156505023

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása