Hadoop MapReduce Deltag og tæller med eksempel

Hvad er Join in Mapreduce?

Mapreduce Deltag operation bruges til at kombinere to store datasæt. Denne proces involverer dog at skrive en masse kode for at udføre den faktiske join-operation. Sammenføjning af to datasæt begynder med at sammenligne størrelsen af ​​hvert datasæt. Hvis et datasæt er mindre sammenlignet med det andet datasæt, distribueres mindre datasæt til hver dataknude i klyngen.

Når en joinforbindelse i MapReduce er distribueret, bruger enten Mapper eller Reducer det mindre datasæt til at udføre et opslag efter matchende poster fra det store datasæt og derefter kombinere disse poster for at danne outputposter.

Typer af tilslutning

Afhængigt af det sted, hvor den faktiske joinforbindelse udføres, klassificeres joins i Hadoop i-

1. Sammenføjning på kortsiden – Når sammenføjningen udføres af kortlæggeren, kaldes den sammenkædning på kortsiden. I denne type udføres joinforbindelsen, før data rent faktisk forbruges af kortfunktionen. Det er obligatorisk, at input til hvert kort er i form af en partition og er i sorteret rækkefølge. Der skal også være lige mange partitioner, og det skal sorteres efter join-nøglen.

2. Reducer sidesammenføjning – Når sammenføjningen udføres af reducereren, kaldes det sammenføjning på sidesiden. Det er ikke nødvendigt i denne join at have et datasæt i en struktureret form (eller opdelt).

Her udsender kortsidebehandling sammenføjningsnøgle og tilsvarende tupler af begge tabeller. Som en effekt af denne behandling falder alle tuples med samme joinnøgle ind i den samme reducer, som derefter forbinder posterne med samme joinnøgle.

Et overordnet procesflow af joinforbindelser i Hadoop er afbildet i diagrammet nedenfor.

Typer af sammenføjninger i Hadoop MapReduce
Typer af sammenføjninger i Hadoop MapReduce

Sådan forbinder du to datasæt: MapReduce Eksempel

Der er to sæt data i to forskellige filer (vist nedenfor). Nøgle Dept_ID er fælles i begge filer. Målet er at bruge MapReduce Join til at kombinere disse filer

Eksempel på MapReduce
Fil 1
Eksempel på MapReduce
Fil 2

Input: Inputdatasættet er en txt-fil, DeptName.txt & DepStrength.txt

Download inputfiler herfra

Sørg for, at du har Hadoop installeret. Før du starter med den faktiske MapReduce Join-eksempelproces, skal du ændre bruger til 'hduser' (id brugt under Hadoop-konfigurationen, du kan skifte til det bruger-id, der blev brugt under din Hadoop-konfiguration).

su - hduser_

Eksempel på MapReduce

Trin 1) Kopier zip-filen til den ønskede placering

Eksempel på MapReduce

Trin 2) Udkomprimer zip-filen

sudo tar -xvf MapReduceJoin.tar.gz

Eksempel på MapReduce

Trin 3) Gå til mappen MapReduceJoin/

cd MapReduceJoin/

Eksempel på MapReduce

Trin 4) Start Hadoop

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

Eksempel på MapReduce

Trin 5) DeptStrength.txt og DeptName.txt er inputfilerne, der bruges til dette MapReduce Join-eksempelprogram.

Disse filer skal kopieres til HDFS ved hjælp af nedenstående kommando-

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

Eksempel på MapReduce

Trin 6) Kør programmet ved at bruge nedenstående kommando-

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

Eksempel på MapReduce

Eksempel på MapReduce

Trin 7) Efter udførelse vil outputfilen (navngivet 'part-00000') gemmes i mappen /output_mapreducejoin på HDFS

Resultater kan ses ved hjælp af kommandolinjegrænsefladen

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

Eksempel på MapReduce

Resultater kan også ses via en webgrænseflade som-

Eksempel på MapReduce

Vælg nu 'Gennemse filsystemet' og naviger op til /output_mapreducejoin

Eksempel på MapReduce

Åbne del-r-00000

Eksempel på MapReduce

Resultater vises

Eksempel på MapReduce

BEMÆRK VENLIGST: Bemærk venligst, at før du kører dette program til næste gang, skal du slette output-mappen /output_mapreducejoin

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

Alternativet er at bruge et andet navn til output-mappen.

Hvad er tæller i MapReduce?

A Tæller i MapReduce er en mekanisme, der bruges til at indsamle og måle statistisk information om MapReduce-job og -begivenheder. Tællere holder styr på forskellige jobstatistikker i MapReduce, f.eks. antal foregåede operationer og fremskridt i operationen. Tællere bruges til problemdiagnose i MapReduce.

Hadoop-tællere ligner at sætte en logmeddelelse i koden til et kort eller reducere. Disse oplysninger kan være nyttige til diagnosticering af et problem i MapReduce-jobbehandling.

Typisk er disse tællere i Hadoop defineret i et program (kort eller reducer) og øges under udførelsen, når en bestemt hændelse eller tilstand (specifik for den tæller) opstår. En meget god anvendelse af Hadoop-tællere er at spore gyldige og ugyldige poster fra et input-datasæt.

Typer af MapReduce-tællere

Der er grundlæggende 2 typer KortReducer Tællere

  1. Hadoop Indbyggede tællere:Der er nogle indbyggede Hadoop-tællere, som findes pr. job. Nedenfor er indbyggede tællergrupper-
    • KortReducer opgavetællere – Indsamler opgavespecifik information (f.eks. antal inputposter) i løbet af dens udførelsestid.
    • Filsystemtællere – Indsamler information som antal bytes læst eller skrevet af en opgave
    • FileInputFormat-tællere – Indsamler information om et antal bytes læst gennem FileInputFormat
    • FileOutputFormat-tællere – Indsamler information om et antal bytes skrevet gennem FileOutputFormat
    • Jobtællere – Disse tællere bruges af JobTracker. Statistik indsamlet af dem inkluderer f.eks. antallet af opgaver, der er startet til et job.
  2. Brugerdefinerede tællere

Ud over indbyggede tællere kan en bruger definere sine egne tællere ved hjælp af lignende funktionaliteter leveret af programmeringssprog. For eksempel i Java 'enum' bruges til at definere brugerdefinerede tællere.

Eksempel på tællere

Et eksempel på MapClass med tællere til at tælle antallet af manglende og ugyldige værdier. Inputdatafil brugt i denne tutorial Vores inputdatasæt er en CSV-fil, SalgJan2009.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"));
        }
    }
}

Ovenstående kodestykke viser et eksempel på implementering af tællere i Hadoop Map Reduce.

Her, Salgstællere er en tæller defineret vha 'enum'. Det bruges til at tælle MANGLER og INVALID input poster.

I kodestykket, if 'Land' felt har nul længde, så mangler dens værdi og dermed tilsvarende tæller Salgstællere.MANGLER er øget.

Dernæst hvis 'salg' felt starter med en " så anses posten for UGYLDIG. Dette indikeres ved stigende tæller Salgstællere. Ugyldig.