Hadoop MapReduce Gå med och räkna med exempel

Vad är Join in Mapreduce?

Mapreduce Gå med operation används för att kombinera två stora datamängder. Denna process innebär dock att man skriver massor av kod för att utföra själva join-operationen. Att slå samman två datauppsättningar börjar med att jämföra storleken på varje datauppsättning. Om en datauppsättning är mindre jämfört med den andra datauppsättningen distribueras mindre datauppsättning till varje datanod i klustret.

När en koppling i MapReduce har distribuerats använder antingen Mapper eller Reducer den mindre datamängden för att utföra en sökning efter matchande poster från den stora datamängden och sedan kombinera dessa poster för att bilda utdataposter.

Typer av gå med

Beroende på platsen där den faktiska sammanfogningen utförs, klassificeras joins i Hadoop i-

1. Gå med på kartan – När sammanfogningen utförs av mapparen kallas den som map-side join. I denna typ utförs sammanfogningen innan data faktiskt förbrukas av kartfunktionen. Det är obligatoriskt att indata till varje karta är i form av en partition och är i sorterad ordning. Dessutom måste det finnas lika många partitioner och det måste sorteras efter join-nyckeln.

2. Minska sammanfogning på sidan – När sammanfogningen utförs av reduceraren kallas den för reducering på sidan. Det finns ingen nödvändighet i denna koppling att ha en datauppsättning i strukturerad form (eller partitionerad).

Här avger kartsidans bearbetning sammanfogningsnyckel och motsvarande tuplar för båda tabellerna. Som en effekt av denna bearbetning faller alla tupler med samma kopplingsnyckel in i samma reducerare som sedan sammanfogar posterna med samma kopplingsnyckel.

Ett övergripande processflöde av kopplingar i Hadoop visas i diagrammet nedan.

Typer av anslutningar i Hadoop MapReduce
Typer av anslutningar i Hadoop MapReduce

Hur man går med i två datauppsättningar: MapReduce Exempel

Det finns två uppsättningar data i två olika filer (visas nedan). Key Dept_ID är vanligt i båda filerna. Målet är att använda MapReduce Join för att kombinera dessa filer

MapReduce Exempel
Fil 1
MapReduce Exempel
Fil 2

Ingång: Indatauppsättningen är en txt-fil, DeptName.txt & DepStrength.txt

Ladda ner indatafiler härifrån

Se till att du har Hadoop installerat. Innan du börjar med den faktiska processen för MapReduce Join-exemplet, ändra användare till 'hduser' (id som användes under Hadoop-konfigurationen, du kan byta till användar-id som användes under din Hadoop-konfiguration).

su - hduser_

MapReduce Exempel

Steg 1) Kopiera zip-filen till den plats du väljer

MapReduce Exempel

Steg 2) Packa upp zip-filen

sudo tar -xvf MapReduceJoin.tar.gz

MapReduce Exempel

Steg 3) Gå till katalogen MapReduceJoin/

cd MapReduceJoin/

MapReduce Exempel

Steg 4) Starta Hadoop

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

MapReduce Exempel

Steg 5) DeptStrength.txt och DeptName.txt är indatafilerna som används för detta MapReduce Join-exempelprogram.

Dessa filer måste kopieras till HDFS med nedanstående kommando-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

MapReduce Exempel

Steg 6) Kör programmet med kommandot nedan-

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

MapReduce Exempel

MapReduce Exempel

Steg 7) Efter körning kommer utdatafilen (med namnet 'del-00000') att lagras i katalogen /output_mapreducejoin på HDFS

Resultaten kan ses med hjälp av kommandoradsgränssnittet

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

MapReduce Exempel

Resultaten kan också ses via ett webbgränssnitt som-

MapReduce Exempel

Välj nu "Bläddra i filsystemet" och navigera upp till /output_mapreducejoin

MapReduce Exempel

Öppet del-r-00000

MapReduce Exempel

Resultaten visas

MapReduce Exempel

OBS: Observera att innan du kör det här programmet nästa gång måste du ta bort utdatakatalogen /output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

Alternativet är att använda ett annat namn för utdatakatalogen.

Vad är Counter i MapReduce?

A Räknare i MapReduce är en mekanism som används för att samla in och mäta statistisk information om MapReduce-jobb och evenemang. Räknare håller reda på olika jobbstatistik i MapReduce som antalet operationer som inträffat och operationens fortskridande. Räknare används för problemdiagnos i MapReduce.

Hadoop-räknare liknar att lägga ett loggmeddelande i koden för en karta eller reducera. Denna information kan vara användbar för diagnos av ett problem i MapReduce-jobbbearbetning.

Vanligtvis är dessa räknare i Hadoop definierade i ett program (karta eller reducera) och inkrementeras under exekvering när en viss händelse eller tillstånd (specifik för den räknaren) inträffar. En mycket bra tillämpning av Hadoop-räknare är att spåra giltiga och ogiltiga poster från en indatauppsättning.

Typer av MapReduce-räknare

Det finns i princip tre typer av MapReduce Diskar

  1. Hadoop inbyggda räknare:Det finns några inbyggda Hadoop-räknare som finns per jobb. Nedan finns inbyggda räknargrupper-
    • MapReduce Task Counters – Samlar in uppgiftsspecifik information (t.ex. antal indataposter) under dess körningstid.
    • Filsystemräknare – Samlar information som antal byte lästa eller skrivna av en uppgift
    • FileInputFormat-räknare – Samlar information om ett antal byte som läses genom FileInputFormat
    • FileOutputFormat-räknare – Samlar information om ett antal byte skriven via FileOutputFormat
    • Jobbräknare – Dessa räknare används av JobTracker. Statistik som samlats in av dem inkluderar t.ex. antalet uppgifter som startats för ett jobb.
  2. Användardefinierade räknare

Förutom inbyggda räknare kan en användare definiera sina egna räknare med hjälp av liknande funktioner som tillhandahålls av programmeringsspråk. Till exempel i Java 'enum' används för att definiera användardefinierade räknare.

Exempel på räknare

Ett exempel på MapClass med räknare för att räkna antalet saknade och ogiltiga värden. Indatafil som används i den här handledningen Vår indatauppsättning är en CSV-fil, FörsäljningJan2009.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"));
        }
    }
}

Ovanstående kodavsnitt visar ett exempel på implementering av räknare i Hadoop Map Reduce.

Här, Försäljningsräknare är en räknare som definieras med hjälp av 'uppräkning'. Det används för att räkna SAKNAD och OGILTIG mata in poster.

I kodavsnittet, if 'Land' fältet har noll längd så saknas dess värde och därmed motsvarande räknare Försäljningsräknare.SAKNAS ökas.

Nästa, om "försäljning" fältet börjar med a " då anses posten vara Ogiltig. Detta indikeras av en ökande räknare Försäljningsräknare. OGILTIG.