Hadoop MapReduce Join & Teller met voorbeeld

Inhoudsopgave:

Anonim

Wat is Join in Mapreduce?

Mapreduce Join wordt gebruikt om twee grote datasets te combineren. Bij dit proces moet echter veel code worden geschreven om de daadwerkelijke join-bewerking uit te voeren. Het samenvoegen van twee datasets begint door de grootte van elke dataset te vergelijken. Als de ene gegevensset kleiner is in vergelijking met de andere gegevensset, wordt een kleinere gegevensset gedistribueerd naar elk gegevensknooppunt in het cluster.

Zodra een join in MapReduce is gedistribueerd, gebruikt Mapper of Reducer de kleinere gegevensset om een ​​zoekactie uit te voeren voor overeenkomende records uit de grote gegevensset en vervolgens die records te combineren om outputrecords te vormen.

In deze tutorial leer je-

  • Wat is een Join in MapReduce?
  • Soorten Join
  • Twee datasets samenvoegen: MapReduce-voorbeeld
  • Wat is teller in MapReduce?
  • Typen MapReduce-tellers
  • Tellers Voorbeeld

Soorten Join

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

1. Map-side join - Wanneer de join wordt uitgevoerd door de mapper, wordt dit een map-side join genoemd. In dit type wordt de join uitgevoerd voordat de gegevens daadwerkelijk worden verbruikt door de kaartfunctie. Het is verplicht dat de invoer voor elke map de vorm heeft van een partitie en gesorteerd is. Er moet ook een gelijk aantal partities zijn en het moet worden gesorteerd op de samenvoegsleutel.

2. Reduce-side join - Wanneer de join wordt uitgevoerd door de reducer, wordt dit een reductie-zijde-join genoemd. Bij deze join is het niet nodig om een ​​dataset in een gestructureerde vorm (of gepartitioneerd) te hebben.

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

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

Typen joins in Hadoop MapReduce

Twee datasets samenvoegen: MapReduce-voorbeeld

Er zijn twee sets gegevens 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

Bestand 1
Bestand 2

Invoer: De invoergegevensset is een txt-bestand, DeptName.txt & DepStrength.txt

Download invoerbestanden van hier

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

su - hduser_

Stap 1) Kopieer het zip-bestand naar de locatie van uw keuze

Stap 2) Pak het zip-bestand uit

sudo tar -xvf MapReduceJoin.tar.gz

Stap 3) Ga naar map MapReduceJoin /

cd MapReduceJoin/

Stap 4) Start Hadoop

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

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 de onderstaande opdracht:

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

Stap 6) Start het programma met de onderstaande opdracht:

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

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

Resultaten kunnen worden bekeken met behulp van de opdrachtregelinterface

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

Resultaten kunnen ook worden bekeken via een webinterface als-

Selecteer nu 'Browse the filesystem' en ga naar / output_mapreducejoin

Open deel-r-00000

Resultaten worden getoond

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

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

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

Wat is teller in MapReduce?

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

Hadoop-tellers zijn vergelijkbaar met het plaatsen van een logboekbericht in de code voor een kaart of verkleinen. Deze informatie kan nuttig zijn voor het diagnosticeren van een probleem bij het verwerken van MapReduce-taken.

Meestal worden deze tellers in Hadoop gedefinieerd in een programma (kaart of verkleinen) en worden ze tijdens de uitvoering opgehoogd wanneer een bepaalde gebeurtenis of conditie (specifiek voor die teller) optreedt. Een zeer goede toepassing van Hadoop-tellers is om geldige en ongeldige records bij te houden vanuit een invoergegevensset.

Typen MapReduce-tellers

Er zijn in principe 2 soorten MapReduce-tellers

    1. Ingebouwde Hadoop-tellers: er zijn enkele ingebouwde Hadoop-tellers die per taak bestaan. Hieronder staan ​​ingebouwde tellergroepen:
      • MapReduce Task Counters - Verzamelt taakspecifieke informatie (bijvoorbeeld het aantal invoerrecords) tijdens de uitvoeringstijd.
      • FileSystem-tellers - Verzamelt informatie zoals het aantal bytes dat door een taak is gelezen of geschreven
      • FileInputFormat-tellers - Verzamelt informatie van een aantal bytes die zijn gelezen via FileInputFormat
      • FileOutputFormat-tellers - Verzamelt informatie van een aantal bytes geschreven via FileOutputFormat
      • Jobtellers - Deze tellers worden gebruikt door JobTracker. Statistieken die door hen worden verzameld, omvatten bijvoorbeeld het aantal taken dat voor een taak is gestart.
    2. Door de gebruiker gedefinieerde tellers

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

Tellers Voorbeeld

Een voorbeeld van een MapClass met tellers om het aantal ontbrekende en ongeldige waarden te tellen. Invoergegevensbestand gebruikt in deze tutorial Onze invoergegevensset is een CSV-bestand, SalesJan2009.csv

public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString 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 is SalesCounters een teller die is gedefinieerd met behulp van 'enum' . Het wordt gebruikt om ontbrekende en ongeldige invoerrecords te tellen .

Als in het codefragment het veld 'land' de lengte nul heeft, ontbreekt de waarde ervan en wordt de bijbehorende teller SalesCounters.MISSING verhoogd.

Als het veld 'verkoop' begint met een ", wordt het record als ONGELDIG beschouwd. Dit wordt aangegeven door de teller SalesCounters.INVALID te verhogen.