Hadoop feletti végrehajtó motorok

Összefoglalás

Az olvasó ebben az olvasóleckében betekintést nyer az általános célú BigData feldolgozó, elosztott végrehajtó motorok világába. Bemutatjuk, mik a klasszikus MapReduce végrehajtó motor (a Hadoop alapértelmezett feladat végrehajtója) hiányosságai, amik sok korszerű BigData alkalmazás hatékony megvalósítását korlátozhatják. Áttekintést adunk arra vonatkozóan, hogy milyen újabb, általánosabb és bizonyos felhasználási esetekben hatékonyabb adat feldolgozó keretrendszerek léteznek, valamint hogy hogyan viszonyulnak ezek a MapReduce-hoz, illetve a Hadoop ökoszisztémához.
A lecke fejezetei:
  • 1. fejezet: A MapReduce engine hiányosságai, általánosabb alternatíváinak bemutatása (olvasó)
  • 2. fejezet: Az Apache Tez keretrendszer ismertetése (olvasó)
  • 3. fejezet: Az Apache Spark keretrendszer ismertetése (olvasó)
Téma típusa: elméleti
Olvasási idő: 40 perc

 

Book to read, knowledge, lecture, open book, reading book icon 1. fejezet
A MapReduce koncepció hátrányai, modernebb és általánosabb alternatívái

A Hadoop keretrendszer alapértelmezett számítás végrehajtó motorja a MapReduce [1]. Ez kiválóan alkalmas kötegelt feldolgozáshoz, a map és reduce műveletek klaszteren elosztott, párhuzamos végrehajtásához. A hatékonyságot leginkább az által éri el, hogy nem a nagy adatokat mozgatja a klaszter node-jai között, hanem az azokat feldolgozó programkódot másolja arra a csomópontra, ahol az adatok is vannak. Így a műveletek lokális adatokon, párhuzamosan futnak, és a végén az eredmények összegződnek. Vannak azonban bizonyos használati esetek, amikor ez a megközelítés nem alkalmazható. Ilyenek a következők:

https://www.tutorialspoint.com/apache_spark/images/iterative_operations_on_mapreduce.jpg

https://www.tutorialspoint.com/apache_spark/images/interactive_operations_on_mapreduce.jpg

Jól látszik, hogy a fenti két tipikus BigData felhasználási mód nagyságrendekkel gyorsabb adatmegosztást követel a párhuzamosan futó job-ok között. Mivel mind az iteratív mind pedig az interaktív alkalmazások nagyon népszerűek, szükség volt a klasszikus MapReduce-tól eltérő megközelítések alkalmazására és újabb végrehajtó motorok fejlesztésére. A MapReduce két legelterjedtebb alternatívája/utódja/fejlesztése az alábbi:

Book to read, knowledge, lecture, open book, reading book icon 2. fejezet

Az Apache Tez keretrendszer

Az Apache Tez [2] az Apache Hadoop YARN-ra épülő adatfeldolgozó motor, amely képes komplex, körmentes irányított gráfba (DAG) szervezett feladatok hatékony és elosztott végrehajtására. Mivel a job-okat össze lehet fűzni, és egyszerre végrehajtani őket, ami korábban több MapReduce job futtatását igényelte, a Tez jelentős teljesítmény növekedést hoz a MapReduce-hoz képest.

https://tez.apache.org/images/PigHiveQueryOnMR.png

A fenti ábrán jól látszik, hogy ha például egy Hive SQL lekérdezés a fenti módon több különböző forrást használ (pl. tábla JOIN vagy egyéb összetett lekérdezés miatt), akkor az több MapReduce job-ot eredményez, amiket külön-külön végre kell hajtani, és az egyes job-ok (köztes) eredményei HDFS-en tárolásra kerülnek. Ezzel szemben ha a Tez végrehajtó motort használjuk (Hive teljes körűen támogatja), a fenti irányított körmentes gráfba rendezett feladatokat kapjuk, amelyek egyben futtathatók a köztes eredmények kiírása nélkül. Ez nagy teljesítmény javulást hoz a MapReduce-hoz képest, emlékezzünk vissza a Hive használata során megjelenő figyelmeztető üzenetekre: MapReduce helyett használjuk a Tez vagy a Spark futtató motort, mert az hatékonyabb!

A Tez az alábbi két csoportba sorolható tervezési elveket követi :

Az alábbi Java programkód [5] egy két node-ból álló Tez DAG létrehozását és futtatását demonstrálja, amely a klasszikus word count problémát oldja meg:

Book to read, knowledge, lecture, open book, reading book icon 3. fejezet

Az Apache Spark keretrendszer

Az Apache Spark [3] egy villámgyors klaszter számítási keretrendszer, amit nagyon gyors adatfeldolgozásra terveztek. A Hadoop MapReduce modellen alapul (koncepcionálisan, nem kód szintjén), de olyan módon általánosítja és terjeszti ki azt, ami lehetővé teszi a hatékony felhasználását interaktív lekérdezések készítéséhez vagy stream feldolgozáshoz is. Az alapvető technika, ami ezt a fajta sebesség növekedést lehetővé teszi, a memóriában tárolt klaszter számítási modell. A Spark (ellentétben a gyakori tévhittel) nem a Hadoop módosított verziója, a Hadoop ökoszisztémát tárolásra (HDFS) használja, de ettől sem függ, mert saját klaszter menedzsmenttel is rendelkezik. A Spark-ot széleskörű használatra tervezték, támogatja többek közt a kötegelt feldolgozást, iteratív algoritmusokat, interaktív lekérdezéseket és a stream feldolgozást is, a fent vázolt MapReduce hiányosságokat az alábbi módon küszöböli ki.

Iteratív alkalmazások felgyorsítása a köztes eredmények memóriában való tárolása által.

https://www.tutorialspoint.com/apache_spark/images/iterative_operations_on_spark_rdd.jpg

Interaktív alkalmazások felgyorsítása az adatok egyszeri elosztott memóriába történő beolvasásával.

 

https://www.tutorialspoint.com/apache_spark/images/interactive_operations_on_spark_rdd.jpg

A számos felhasználási mód támogatása mellett nagy előnye még az üzemeltetési költségek csökkentése azáltal, hogy a különböző feladatok megoldására szolgáló eszközöket mind tartalmazza, nem kell azokat külön-külön karbantartani. A Spark a Hadoop egy al-projektje, amit 2009-ben kezdett fejleszteni Matei Zaharia a UC Berkeley AMPLab-jában. 2010-ben BSD licensszel nyílt forrásúvá tették, és 2013-ban az Apache szoftver alapítványnak adományozták. Így a Spark 2014-től felső szintű Apache projektté vált.

Az Apache Spark főbb jellemzői

Az Apache Spark az alábbi főbb jellemzőkkel bír:

https://spark.apache.org/images/spark-stack.png

Spark működése Hadoop fölött

A Spark több módon is integrálható Hadoop-pal. Az alábbi ábra szemlélteti a három alapvető konfigurációt, amellyel a Spark és a Hadoop összekapcsolható.

https://www.tutorialspoint.com/apache_spark/images/spark_built_on_hadoop.jpg

Check mark icon set. Green OK or V tick, red X, exclamation mark ...Ellenőrző kérdések

  1. Mik a klasszikus Hadoop MapReduce végrehajtó motor legfőbb hiányosságai (olyan jellemzői, ami bizonyos típusú alkalmazások számára lehetetlenné teszik a használatát)?
  2. Mi jellemzi az iteratív és interaktív BigData alkalmazásokat? Milyen fontos szempontnak kell megfelelnie egy feladat végrehajtó motornak ahhoz, hogy megfelelően ki tudja szolgálni az ilyen alkalmazásokat?
  3. Milyen általános, elosztott, BigData adatfeldolgozó feladat végrehajtó motor megvalósításokat ismersz?
  4. Milyen tervezési koncepciónak köszönhető a Tez teljesítmény előnye a MapReduce-hoz képest?
  5. Az alábbiak közül melyik Java objektum jelöl egy végrehajtási csomópontot egy Tez DAG job-ban: a) Node b) Vertex c) Edge d) DAG?
  6. Mivel éri el az Apache Spark a 10-100x-os gyorsulást a MapReduce-hoz képest?
  7. Milyen komponenseket foglal magában az Apache Spark? Mire szolgálnak ezek?
  8. Milyen programnyelveken írhatunk programot Apache Spark fölé?
  9. Hogyan oldja meg az Apache Spark az iteratív és interaktív alkalmazások hatékony kiszolgálását?
  10. Milyen módokon integrálható az Apache Spark a Hadoop klaszterrel? Mik az egyes konfigurációk jellemzői?

Referenciák

[1] https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

[2] https://tez.apache.org/

[3] https://spark.apache.org/

[4] http://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

[5] https://github.com/ouyi/tez-demo/blob/master/src/main/java/io/github/ouyi/tez/HelloWorld.java

[6] https://www.xplenty.com/blog/apache-spark-vs-tez-comparison/