01
12/2009
0

Hadoop

Népnevelő sorozatunk mai részében a Hadoop-ról beszélünk.
A Google File System-et, vagy leánykori nevén BigFiles rendszert Larry Page és Sergey Brin fejlesztette ki még a google éra hajnalán. A fájlok 64 megás darabokban tárolódnak, amelyek csak nagyon ritkán íródnak felül (legalábbis ez a koncepció).

Arra tervezték, hogy olcsó gépeken fusson, ezzel szükségessé téve a hibák okozta adatvesztés elleni robosztusabb védelmet.
A master-slave architektúrába szervezett chunkserverek vezérlését egy master csomópont vezényli, amely a chunkservereken tárolt adategységekhez kötődő fájlokról, és az adategységeken műveleteket végző processzekről tárol metaadatokat illetve információt. Az adatokhoz hozzáférő programok elsőként a master egységhez fordulnak, akitől megkapják a kívánt adatcsomag helyét (ha az adatot tároló node-ot éppen nem foglalja le azt más process), majd az adatot közvetlenül a chunkserverről töltik le.

A BigTable egy 2004-től fejlesztett, többek közt GFS alapokra épülő gyors, és végletekig (több száz, ezer csomópontos, petaByte léptékű rendszerek) skálázható DBMS. Azonban ne hagyományos DBMS-ként gondoljunk rá, hanem "ritka, elosztott, több dimenziós rendezett indexként", amely mind a sor mind az oszlop alapú adatbázisok karakterisztikájával rendelkezik. Minden tábla több dimenzióadatot tárol, amelyek egyike az idődimenzió, így lehetővé válik a verziókövetés.

Mindezekre rátelepszik a MapReduce keretrendszer, amelyet szintén (ki más?) Google testvér fejlesztett nekünk. Nagy adathalmazok párhuzamos feldolgozásában segítségünkre lehet, és deklaratív SQL használata helyett - a sok programozó számára otthonosabb - funkcionális programozási nyelvekbe illeszkedik C++, C#, Erlang, Java, Python, Ruby, F# és R programkönytárai segítségével. A "MapReduce enabled" program két fő szakasza az inputot kisebb egységekre bontó, majd azokat a szolga node-oknak feladatként (akár rekurzívan) kiosztó MAP; illetve a masteren futó, a szolga csomópontoktól kapott válaszokat a kívánt kimeneti formába ötvöző REDUCE.


Map reduce működése

Az imént részletezett technológiák nagyon jónak és hasznosnak tűnnek. A Google-nak. Ugyanis a GFS és a BigTable nem publikusan hozzáférhető fejlesztések. De pánikra semmi okunk, hiszen nagyszerű programozók az iménti helyzet felett érzett frusztrációjukban buzgón lemásolták és OpenSource formában szabadon hozzáférhetővé tették a funkcionalitásban állítólag feketehalálig (vagy minek nevezzem *nix alatt) hasonlóan pedikűrözött applikációikat.

Az egyik ilyen a Hadoop.

A Hadoopot az Apache foundation vette gondozásába, működése hajaz a fentebb GFS-nél leírtakra. A Hadoopra épülő MapReduce motor egy Job Tracker és sok Task Tracker node-ból áll. A Job Tracker az adatlokalitást szem előtt tartva osztja szét a workloadot a Task Tracker csomópontok között, és ha az adatot tároló Task Tracker node épp elfoglalt, egy hozzá közel eső node-ot jelöl ki az adat feldolgozására. Task Tracker hiba esetén csak a hozzá rendelt, Job Tracker hiba esetén a teljes feldolgozás alatt lévő job elveszlik. A Hadoop-ot az Apache számos egyéb szolgáltatással szervírozza, az applikációs stack az alábbi ábrán vehető szemügyre.


Hadoop stack

Pig:

Nagyon nagy adatállományok kezeléséhez használható adatfolyamleíró és végrehajtó nyelv

HBase:
Elosztott, oszlop alapú adatbázis, amely a HDFS-t használja storage rétegként. Támogatja a kötegelt MapReduce és az ad-hoc lekérdezéseket is

ZooKeeper:
Elosztott vezérlőrendszer, amely az elosztott alkalmazásokhoz szükséges lock-ok kezelését támogatja

Hive:
Elosztott adattárház, amely a HDFS-ben tárolt adatokra épülő SQL alapú lekérdezéseket képes végrehajtani (amelyeket párhuzamos MapReduce jobokba képez le)

Chukwa:
Elosztott adatgyűjtő és analizáló rendszer

 

Mahout

Egy igen érdekes Hadoop-ra épülő fejlesztés, amely a napokban jutott el a 0.2-es verzióig, az Apache Lucene alprojektje, a Mahout.
A Mahout egy (a Hadoopnak köszönhetően) masszívan skálázható, gépi tanulási algoritmusokat párhuzamosított MapReduce paradigmával megvalósító programkönyvtár. Az adatbányászati algoritmusok közismerten nagy teljesítményigénye miatt a masszív párhuzamos elemzés lehetősége TB-os nagyságrendű adatmennyiségek esetén egy komoly pont az Apache-nak. A Mahoutban elérhető algoritmusok listája kattintásra nyílik.
Itt olvashattok még Bayes fiterekről, osztályozásról, klaszterezésről és egyéb nyalánkságokról Mahoutban, az IBM előadásában.

HadoopDB

Egy másik érdekes fejlesztés, ami a korábban már e blogban is citált Daniel Abadi diákjai nevéhez fűződik, a HadoopDB.
Az elosztott adatbáziskezelő PostgreSQL, Hadoop, Hive és saját fejlesztésű interface-ekből álló OpenSource stackből építkezik. Még beletömködtek egy katalogizáló modult, egy adatbetöltőt és egy query interface-t, amely az inputként kapott MapReduce és SQL lekérdezéseket részben Hadoophoz, részben az egyes shared-nothing clusterben futó node-okon ülő PostgreSQL szerverekhez irányítja.
Jelenleg dolgoznak a konnektorokon különböző DBMS-ekhez, pl. MonetDB-hez is, így ezeket alkalmazva majdan igazán hatékony, oszlop alapú OpenSource MPP-t kaphatunk egyszer.
Persze ez még erősen fejlesztés alatt álló projekt, senki ne számítson a Vertica-hoz (aminek a C-Store-ját többek közt Abadi fejlesztette) hasonló performanciamutatókra,
de reméljük hosszútávon stabil, használható rendszerré növi ki magát.
Abadi blogpostját korábban a HWSW is leközölte, a cikket itt olvashatjátok, benne az architektúradiagrammal.

A bejegyzés trackback címe:

https://dwbi.blog.hu/api/trackback/id/tr281566772

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.