Hadoop MapReduce Join & Counter met voorbeeld

Wat is meedoen aan Mapreduce?

Mapreduce Sluit je aan bewerking wordt gebruikt om twee grote datasets te combineren. Dit proces omvat echter het schrijven van veel code om de daadwerkelijke join-bewerking uit te voeren. Het samenvoegen van twee datasets begint met het vergelijken van de grootte van elke dataset. Als de ene dataset kleiner is in vergelijking met de andere dataset, wordt een kleinere dataset gedistribueerd naar elk dataknooppunt in het cluster.

Zodra een join in MapReduce is gedistribueerd, gebruikt Mapper of Reducer de kleinere dataset om te zoeken naar overeenkomende records uit de grote dataset en combineert deze records vervolgens om uitvoerrecords te vormen.

Soorten deelname

Afhankelijk van de plaats waar de daadwerkelijke join wordt uitgevoerd, worden joins in Hadoop geclassificeerd in:

1. Verbinding aan kaartzijde – Wanneer de join wordt uitgevoerd door de mapper, wordt deze een join aan de kaartzijde genoemd. Bij dit type wordt de join uitgevoerd voordat de gegevens daadwerkelijk door de kaartfunctie worden verbruikt. Het is verplicht dat de invoer voor elke kaart de vorm heeft van een partitie en in gesorteerde volgorde. Er moet ook een gelijk aantal partities zijn en deze moeten worden gesorteerd op de join-sleutel.

2. Zijverbinding verkleinen – Wanneer de verbinding wordt uitgevoerd door het verloopstuk, wordt dit een verbinding aan de zijkant genoemd. Bij deze join is het niet nodig om een ​​dataset in een gestructureerde vorm (of gepartitioneerd) te hebben.

Hier zendt de verwerking van de kaartzijde de join-sleutel en bijbehorende tupels van beide tabellen uit. Als gevolg van deze verwerking vallen alle tupels met dezelfde samenvoegingssleutel in dezelfde reducer, die vervolgens de records met dezelfde samenvoegingssleutel samenvoegt.

Een algemene processtroom van joins in Hadoop wordt weergegeven in het onderstaande diagram.

Soorten joins in Hadoop MapReduce
Soorten joins in Hadoop MapReduce

Hoe u twee datasets kunt samenvoegen: MapReduce-voorbeeld

Er zijn twee gegevenssets in twee verschillende bestanden (hieronder weergegeven). De Key Dept_ID is gebruikelijk in beide bestanden. Het doel is om MapReduce Join te gebruiken om deze bestanden te combineren

MapReduce-voorbeeld
File 1
MapReduce-voorbeeld
File 2

Input: De invoergegevensset is een txt-bestand, Afdelingsnaam.txt en afdelingssterkte.txt

Download hier invoerbestanden

Zorg ervoor dat Hadoop is geïnstalleerd. Voordat u begint met het daadwerkelijke MapReduce Join-voorbeeldproces, wijzigt u de gebruiker in 'hduser' (id gebruikt tijdens de Hadoop-configuratie, u kunt overschakelen naar de gebruikers-id die wordt gebruikt tijdens uw Hadoop-configuratie).

su - hduser_

MapReduce-voorbeeld

Stap 1) Kopieer het zipbestand naar de locatie van uw keuze

MapReduce-voorbeeld

Stap 2) Pak het zipbestand uit

sudo tar -xvf MapReduceJoin.tar.gz

MapReduce-voorbeeld

Stap 3) Ga naar map MapReduceJoin/

cd MapReduceJoin/

MapReduce-voorbeeld

Stap 4) Hadoop starten

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

MapReduce-voorbeeld

Stap 5) DeptStrength.txt en DeptName.txt zijn de invoerbestanden die worden gebruikt voor dit MapReduce Join-voorbeeldprogramma.

Dit bestand moet naar HDFS worden gekopieerd met behulp van onderstaande opdracht:

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

MapReduce-voorbeeld

Stap 6) Voer het programma uit met behulp van onderstaande opdracht-

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

MapReduce-voorbeeld

MapReduce-voorbeeld

Stap 7) Na uitvoering wordt het uitvoerbestand (genaamd 'part-00000') opgeslagen in de map /output_mapreducejoin op HDFS

Resultaten kunnen worden bekeken via de opdrachtregelinterface

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

MapReduce-voorbeeld

Resultaten kunnen ook worden bekeken via een webinterface als-

MapReduce-voorbeeld

selecteer nu 'Blader door het bestandssysteem' en navigeer ernaartoe /output_mapreducejoin

MapReduce-voorbeeld

Openen onderdeel-r-00000

MapReduce-voorbeeld

Resultaten worden getoond

MapReduce-voorbeeld

NOTITIE: Houd er rekening mee dat voordat u dit programma de volgende keer uitvoert, u de uitvoermap /output_mapreducejoin moet verwijderen

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

Een alternatief is om een ​​andere naam voor de uitvoermap te gebruiken.

Wat is Counter in MapReduce?

A Teller in MapReduce is een mechanisme dat wordt gebruikt voor het verzamelen en meten van statistische informatie over MapReduce-banen en -evenementen. Tellers houden verschillende taakstatistieken in MapReduce bij, zoals het aantal uitgevoerde bewerkingen en de voortgang van de bewerking. Tellers worden gebruikt voor probleemdiagnose in MapReduce.

Hadoop Counters zijn vergelijkbaar met het plaatsen van een logbericht in de code voor een kaart of reductie. Deze informatie kan nuttig zijn voor de diagnose van een probleem bij de taakverwerking van MapReduce.

Normaal gesproken worden deze tellers in Hadoop gedefinieerd in een programma (toewijzen of verkleinen) en worden ze tijdens de uitvoering verhoogd wanneer een bepaalde gebeurtenis of voorwaarde (specifiek voor die teller) optreedt. Een zeer goede toepassing van Hadoop-tellers is het volgen van geldige en ongeldige records uit een invoergegevensset.

Soorten MapReduce-tellers

Er zijn grofweg 2 soorten KaartVerminderen Tellers

  1. Hadoop Ingebouwde tellers:Er zijn enkele ingebouwde Hadoop-tellers die per taak bestaan. Hieronder vindt u ingebouwde tellergroepen-
    • MapReduce-taaktellers – Verzamelt taakspecifieke informatie (bijvoorbeeld het aantal invoerrecords) tijdens de uitvoering ervan.
    • Bestandssysteemtellers – Verzamelt informatie zoals het aantal bytes dat door een taak is gelezen of geschreven
    • FileInputFormat-tellers – Verzamelt informatie over een aantal bytes die worden gelezen via FileInputFormat
    • FileOutputFormat-tellers – Verzamelt informatie over een aantal bytes geschreven via FileOutputFormat
    • Takentellers – Deze tellers worden gebruikt door JobTracker. Door hen verzamelde statistieken omvatten bijvoorbeeld het aantal taken dat voor een taak is gestart.
  2. Door de gebruiker gedefinieerde tellers

Naast de ingebouwde tellers kan een gebruiker zijn eigen tellers definiëren met behulp van vergelijkbare functionaliteiten van programmeertalen. Bijvoorbeeld in Java 'enum' wordt gebruikt om door de gebruiker gedefinieerde tellers te definiëren.

Tellers voorbeeld

Een voorbeeld van MapClass met tellers om het aantal ontbrekende en ongeldige waarden te tellen. Invoergegevensbestand gebruikt in deze tutorial Onze invoergegevensset is een CSV-bestand, VerkoopJan2009.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"));
        }
    }
}

Bovenstaand codefragment toont een voorbeeldimplementatie van tellers in Hadoop Map Reduce.

Hier Verkooptellers is een teller gedefinieerd met behulp van 'opsomming'. Het wordt gebruikt om te tellen MISSING en ONGELDIG invoerregistraties.

In het codefragment, if 'land' veld heeft een lengte van nul, dan ontbreekt de waarde ervan en dus de bijbehorende teller Verkooptellers.ONTBREKEN wordt verhoogd.

Volgende, als 'verkoop' veld begint met een " dan wordt het record als ONGELDIG beschouwd. Dit wordt aangegeven door de oplopende teller Verkooptellers.INVALID.