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.
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
Input: Inputdatasættet er en txt-fil, DeptName.txt & DepStrength.txt
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_
Trin 1) Kopier zip-filen til den ønskede placering
Trin 2) Udkomprimer zip-filen
sudo tar -xvf MapReduceJoin.tar.gz
Trin 3) Gå til mappen MapReduceJoin/
cd MapReduceJoin/
Trin 4) Start Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
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 /
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
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
Resultater kan også ses via en webgrænseflade som-
Vælg nu 'Gennemse filsystemet' og naviger op til /output_mapreducejoin
Åbne del-r-00000
Resultater vises
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
- 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.
- 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.