Hadoop MapReduce Join & Counter a példával
Mi az a csatlakozás a Mapreduce-ban?
Mapreduce Join művelet két nagy adatkészlet kombinálására szolgál. Ez a folyamat azonban sok kód írásával jár a tényleges csatlakozási művelet végrehajtásához. Két adatkészlet összekapcsolása az egyes adatkészletek méretének összehasonlításával kezdődik. Ha az egyik adatkészlet kisebb a másik adatkészlethez képest, akkor kisebb adatkészlet kerül elosztásra a fürt minden adatcsomópontjához.
A MapReduce csatlakozásának szétosztása után a Mapper vagy a Reducer a kisebb adatkészletet használja a megfelelő rekordok kikeresésére a nagy adatkészletből, majd ezeket a rekordokat kombinálja kimeneti rekordok létrehozására.
Csatlakozás típusai
Attól függően, hogy a tényleges összekapcsolás hol történik, a Hadoop csatlakozásai a következőkre vannak osztva:
1. Térképoldali csatlakozás – Amikor az összekapcsolást a leképező végzi, azt térképoldali csatlakozásnak nevezzük. Ennél a típusnál az összekapcsolást azelőtt hajtják végre, hogy a térképfunkció ténylegesen felhasználná az adatokat. Kötelező, hogy az egyes térképek bemenete partíció formájában és rendezett sorrendben legyen. Ezenkívül egyenlő számú partíciónak kell lennie, és azokat a csatlakozási kulcs szerint kell rendezni.
2. Oldalsó csatlakozás csökkentése – Amikor az illesztést a szűkítő hajtja végre, azt redukciós oldali csatlakozásnak nevezik. Ebben az összekapcsolásban nincs szükség arra, hogy egy adatkészlet strukturált formában (vagy particionálva) legyen.
Itt a térképoldali feldolgozás összekapcsolási kulcsot és mindkét tábla megfelelő sorait bocsátja ki. Ennek a feldolgozásnak a hatására az összes azonos csatlakozási kulccsal rendelkező tuple ugyanabba a reduktorba esik, amely azután az azonos csatlakozási kulccsal rendelkező rekordokat egyesíti.
Az alábbi diagramon a Hadoop csatlakozásainak átfogó folyamata látható.
Két adatkészlet összekapcsolása: MapReduce példa
Két adathalmaz van két különböző fájlban (lásd alább). A Key Dept_ID mindkét fájlban közös. A cél az, hogy a MapReduce Join segítségével kombinálja ezeket a fájlokat
Bemenet: A bemeneti adatkészlet egy txt fájl, DeptName.txt és DepStrength.txt
Töltse le a bemeneti fájlokat innen
Győződjön meg arról, hogy telepítve van a Hadoop. Mielőtt elkezdené a MapReduce Join példa tényleges folyamatát, módosítsa a felhasználót "hduser"-re (a Hadoop konfigurációja során használt azonosító, átválthat a Hadoop konfigurációja során használt felhasználói azonosítóra).
su - hduser_
Step 1) Másolja a zip fájlt a kívánt helyre
Step 2) Csomagolja ki a Zip fájlt
sudo tar -xvf MapReduceJoin.tar.gz
Step 3) Ugrás a MapReduceJoin/ könyvtárba
cd MapReduceJoin/
Step 4) Indítsa el a Hadoop-ot
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Step 5) A DeptStrength.txt és a DeptName.txt a MapReduce Join példaprogramhoz használt bemeneti fájlok.
Ezeket a fájlokat a HDFS-be kell másolni az alábbi paranccsal-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Step 6) Futtassa a programot az alábbi paranccsal -
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Step 7) A végrehajtás után a kimeneti fájl ("part-00000" néven) a HDFS /output_mapreducejoin könyvtárába kerül.
Az eredmények a parancssori felületen tekinthetők meg
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Az eredmények webes felületen is megtekinthetők, pl.
Most válassza ki "Tallózás a fájlrendszerben" és navigáljon fel /output_mapreducejoin
Nyisd ki rész-r-00000
Az eredmények megjelennek
JEGYZET: Kérjük, vegye figyelembe, hogy a program következő futtatása előtt törölnie kell a /output_mapreducejoin kimeneti könyvtárat
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Alternatív megoldásként más nevet használ a kimeneti könyvtárnak.
Mi az a Counter a MapReduce-ban?
A Számláló a MapReduce-ban A MapReduce munkákról és eseményekről szóló statisztikai információk gyűjtésére és mérésére szolgáló mechanizmus. A számlálók nyomon követik a MapReduce különféle munkastatisztikáit, például a végrehajtott műveletek számát és a művelet előrehaladását. A számlálók a MapReduce probléma-diagnosztikájára szolgálnak.
A Hadoop számlálók hasonlóak ahhoz, hogy naplóüzenetet helyezzenek el a térkép vagy a redukálás kódjában. Ez az információ hasznos lehet a MapReduce feladatfeldolgozási probléma diagnosztizálásához.
Általában ezek a Hadoop számlálók egy programban vannak meghatározva (leképezés vagy kicsinyítés), és a végrehajtás során növekednek, amikor egy adott esemény vagy feltétel (az adott számlálóra jellemző) bekövetkezik. A Hadoop-számlálók nagyon jó alkalmazása az érvényes és érvénytelen rekordok nyomon követése egy bemeneti adatkészletből.
A MapReduce számlálók típusai
Alapvetően 2 fajta van MapReduce számlálók
- Hadoop beépített számlálók:Feladatonként létezik néhány beépített Hadoop-számláló. Az alábbiakban a beépített számlálócsoportok láthatók
- MapReduce feladatszámlálók – Feladatspecifikus információkat (pl. bemeneti rekordok száma) gyűjt a végrehajtási ideje alatt.
- Fájlrendszer-számlálók – Információkat gyűjt, például egy feladat által olvasott vagy írt bájtok számát
- FileInputFormat számlálók – A FileInputFormat segítségével beolvasott számos bájt információit gyűjti össze
- FileOutputFormat számlálók – A FileOutputFormat segítségével írt bájtok számát gyűjti össze
- Állásszámlálók – Ezeket a számlálókat a JobTracker használja. Az általuk gyűjtött statisztikák között szerepel pl. egy munkára indított feladatok száma.
- Felhasználó által meghatározott számlálók
A beépített számlálók mellett a felhasználó saját számlálóit is meghatározhatja a által biztosított hasonló funkciók segítségével programozási nyelvek. Például a Java Az 'enum' a felhasználó által meghatározott számlálók meghatározására szolgál.
Számlálók Példa
Egy példa MapClass számlálókkal a hiányzó és érvénytelen értékek számának megszámlálására. Az oktatóanyagban használt bemeneti adatfájl A bemeneti adatkészletünk egy CSV-fájl, ÉrtékesítésJan2009.csv
public static class MapClass extends MapReduceBase implements Mapper<LongWritable, Text, Text, Text> { static enum SalesCounters { MISSING, INVALID }; public void map ( LongWritable key, Text value, OutputCollector<Text, Text> output, Reporter reporter) throws IOException { //Input string is split using ',' and stored in 'fields' array String fields[] = value.toString().split(",", -20); //Value at 4th index is country. It is stored in 'country' variable String country = fields[4]; //Value at 8th index is sales data. It is stored in 'sales' variable String sales = fields[8]; if (country.length() == 0) { reporter.incrCounter(SalesCounters.MISSING, 1); } else if (sales.startsWith("\"")) { reporter.incrCounter(SalesCounters.INVALID, 1); } else { output.collect(new Text(country), new Text(sales + ",1")); } } }
A fenti kódrészlet a Hadoop Map Reduce számlálóinak megvalósítási példáját mutatja be.
Itt, SalesCounters segítségével definiált számláló "enum". Számláshoz használják ELTŰNT és a ÉRVÉNYTELEN beviteli rekordok.
A kódrészletben, ha 'ország' mező nulla hosszú, akkor az értéke hiányzik, és így a megfelelő számláló SalesCounters.HIÁNYZIK növekszik.
Következő, ha "értékesítés" mező a betűvel kezdődik " akkor a rekord ÉRVÉNYTELENnek minősül. Ezt a növekvő számláló jelzi SalesCounters.INVALID.