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ó.

Csatlakozások típusai a Hadoop MapReduce-ben
Csatlakozások típusai a Hadoop MapReduce-ben

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

MapReduce példa
Fájl 1
MapReduce példa
Fájl 2

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_

MapReduce példa

Step 1) Másolja a zip fájlt a kívánt helyre

MapReduce példa

Step 2) Csomagolja ki a Zip fájlt

sudo tar -xvf MapReduceJoin.tar.gz

MapReduce példa

Step 3) Ugrás a MapReduceJoin/ könyvtárba

cd MapReduceJoin/

MapReduce példa

Step 4) Indítsa el a Hadoop-ot

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

MapReduce példa

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 /

MapReduce példa

Step 6) Futtassa a programot az alábbi paranccsal -

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

MapReduce példa

MapReduce példa

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

MapReduce példa

Az eredmények webes felületen is megtekinthetők, pl.

MapReduce példa

Most válassza ki "Tallózás a fájlrendszerben" és navigáljon fel /output_mapreducejoin

MapReduce példa

Nyisd ki rész-r-00000

MapReduce példa

Az eredmények megjelennek

MapReduce példa

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

  1. 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.
  2. 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.