A MapReduce programozási modell

Összefoglalás

Ez a kombinált videó és olvasólecke iránymutatást ad arra vonatkozólag, hogyan telepítsd fel az Apache Hadoop rendszert Windows vagy Linux környezetre, valamint bemutatja azt, hogyan működik a MapReduce programozási modell a gyakorlatban ezen ökoszisztémán belül. Megtudhatjuk, hogyan kell egyszerű MapReduce algoritmust írni Java nyelven, valamint hogyan lehet azt lefordítani és futtatni Hadoop környezetben.
A lecke fejezetei:
  • 1. fejezet: Apache Hadoop telepítése és beüzemelése saját gépen (videó)
  • 2. fejezet: MapReduce működése Hadoop-ban, word count feladat implementálása (olvasó)
  • 3. fejezet: Komplexebb adatfeldolgozó MapReduce példa (olvasó)
Téma típusa: gyakorlati
Olvasási idő: 40 perc

Video Lectures Icon Images, Stock Photos & Vectors | Shutterstock 1. fejezet
Apache Hadoop és MapReduce beállítása, IntelliJ IDEA integráció

https://www.youtube.com/watch?v=g7Qpnmi0Q-s

https://www.youtube.com/watch?v=WdIiTgYI5QI

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

Ahogy korábban már láttuk, a Hadoop MapReduce egy keretrendszer, amely lehetővé teszi olyan alkalmazások készítését, amelyek hatalmas mennyiségű adatot (több terra byte-os adathalmazok) párhuzamosan dolgoznak fel nagyméretű hagyományos számítógépekből álló klasztereken (több ezer csomópont) megbízható és hibatűrő módon.

Egy MapReduce job általában felosztja a bemeneti adatkészletet független részekre, amelyeket a leképező (map) feladatok teljesen párhuzamosan dolgoznak fel. A keretrendszer rendezi a leképezések kimeneteit, majd ezután a reduce feladatok ezt feldolgozzák. Általában a feladat bemenete és kimenete egy fájlrendszerben kerül tárolásra. A keretrendszer gondoskodik a feladatok ütemezéséről, megfigyeléséről és a sikertelen feladatok újbóli végrehajtásáról.

Egy minimális MapReduce alkalmazáshoz meg kell adnunk a bemeneti/kimeneti adatok helyét és meg kell valósítanunk a map és reduce függvényeket a megfelelő interfészek és / vagy absztrakt osztályok implementálásával. Ezek és más job paraméterek képezik az ún. job konfigurációt .

A Hadoop job kliens ezután elküldi a feladatot (jar / végrehajtható stb.) és a konfigurációt a ResourceManager-nek, amely kiosztja a szoftvert / konfigurációt a worker node-oknak, elvégzi a feladatok ütemezését és megfigyelését, valamint gondoskodik az állapot- és diagnosztikai információknak a klienshez történő visszacsatolásáról.

Bár a Hadoop keretrendszert Java nyelven írták, a MapReduce alkalmazásokat nem kell feltétlenül Java-ban írni.

Word Count példa

Kezdjük a MapReduce programozási modellel való ismerkedést egy klasszikus feladaton keresztül. Adott egy vagy több szövegdokumentum, és a feladat az, hogy számítsuk ki az egyes szavak előfordulási gyakoriságát a teljes szöveghalmazra. Ez egy olyan feladat, amit viszonylag könnyen be tudunk illeszteni a MapReduce filozófiába. Lássuk a feladat megoldását egészben a Hadoop MapReduce keretrendszert felhasználva.

A program fordítása és parancssori futtatása az alábbi módon történik (feltétel a Hadoop keretrendszer telepítése vagy docker-ben történő futtatása, lásd az első videó leckét, illetve az Apache Hadoop és HDFS gyakorlati anyagokat):

Futtatás előtt a megfelelő input szöveg állományokat file01 és file02 másoljuk fel a HDFS fájlrendszerre

Ezután már futtathatjuk a MapReduce alkalmazásunkat e lefordított jar segítségével:

A programkód lépésről lépésre

A map függvény megvalósítása a Mapper interfész implementálását jelenti, ami soronként dolgozza fel a bemenetet, aminek a típusa Text. Ezután tokenizálja a sort whitespace-k mentén, és minden egyes tokenhez (azaz szóhoz jelen esetben) egy kulcs-érték párt ír ki (emit) a következő formában: < <szó>, 1> Jelen példában az első map eredménye:

Míg a második map eredménye:

A WordCount példa használ combiner task-ot is, így minden map eredménye keresztülmegy egy lokális combiner folyamaton (ami jelen esetben ugyanaz, mint a reduce), hogy a map eredményeit lokálisan aggregáljuk, miután kulcsok szerint sorba rendeztük őket.

Ez első map eredményei a combine után így alakulnak:

Míg a másodiké így:

Ezek az adatok aztán bekerülnek a reduce függvénybe feldolgozásra:

Figyeljük meg, hogy a reduce függvény kulcsonként kapja meg az értékek listáját, amiket a map (vagy ha használjuk a combiner) függvények állítanak elő (amennyiben combiner-t használunk, az is ily módon kapja meg a bemenetet). Jelen esetben ezeket:

A reduce végeredménye tehát a következő:

Amit a HDFS fájlrendszer /output mappába generált fájl tartalmazza. A program main metódusában számos beállítást adtunk meg:

Book to read, knowledge, lecture, open book, reading book icon 3. fejezet
CSV feldolgozó MapReduce program

Készítsünk egy olyan MapReduce programot, amely kiszámítja a daily_csv.csv adatfájlban szereplő összes ország pénznemének USD-hez viszonyított átlagos árfolyamát a napi árfolyam adatok alapján. Az árfolyam adatfájl cím és első adatsora így néz ki:

Az adatfájl több százezer sornyi napi árfolyam adatot tartalmaz 22 országra. Írjuk meg a fenti példa alapján azt a MapReduce alkalmazást, ami ehhez a 22 országhoz kiszámítja az összes napra vett átlagos árfolyamértéket.

A mapper megvalósítás:

A reducer megvalósítás:

Check mark icon set. Green OK or V tick, red X, exclamation mark ...További feladatok

  1. Készítsünk olyan MapReduce programot az árfolyam adatokat tartalmazó adat fájlhoz, ami az egyes valuták medián értékét számítja ki, nem pedig az átlagukat!
  2. Készítsünk olyan MapReduce programot az árfolyam adatokat tartalmazó adat fájlhoz, ami az egyes országokhoz kiszámítja mekkora időintervallumot ölel fel a hozzájuk tartozó árfolyam adatsor! Pl. ha egy ország első bejegyzése 1997-01-01, az utolsó 1999-06-23, akkor az adott országhoz számított eredmény 2 év 5 hónap és 22 nap (tetszőleges módon kódolható az eredmény String formában).

Referenciák

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

[2] https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

[3] https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/YARN.html

[4] https://hadoop.apache.org/docs/r1.2.1/streaming.html

[5] https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/pipes/package-summary.html

[6] https://www.datasciencecentral.com/profiles/blogs/how-to-install-and-run-hadoop-on-windows-for-beginners

[7] https://bigdataproblog.wordpress.com/2016/05/20/developing-hadoop-mapreduce-application-within-intellij-idea-on-windows-10/

[8] https://data-flair.training/blogs/hadoop-combiner-tutorial