Hadoop MapReduce liitumine ja loendus näitega
Mis on Mapreduce'is liitumine?
Mapreduce liitumine toimingut kasutatakse kahe suure andmestiku ühendamiseks. See protsess hõlmab aga tegeliku liitumistoimingu tegemiseks palju koodi kirjutamist. Kahe andmekogumi ühendamine algab iga andmekogumi suuruse võrdlemisega. Kui üks andmestik on teisest andmekogumist väiksem, jaotatakse väiksem andmestik klastri igale andmesõlmele.
Kui MapReduce'i liitumine on jaotatud, kasutab Mapper või Reducer väiksemat andmestikku, et otsida suurest andmekogumist sobivaid kirjeid ja seejärel ühendada need kirjed väljundkirjete moodustamiseks.
Liitumise tüübid
Sõltuvalt tegeliku ühendamise kohast liigitatakse Hadoopi ühendused järgmisteks osadeks:
1. Kaardipoolne liitmine – Kui ühendamise teostab kaardistaja, nimetatakse seda kaardipoolseks liitumiseks. Seda tüüpi ühendamine toimub enne, kui kaardifunktsioon andmeid tegelikult tarbib. Iga kaardi sisend peab olema partitsiooni kujul ja sorteeritud järjekorras. Samuti peab partitsioone olema võrdne arv ja need tuleb sortida liitumisvõtme järgi.
2. Vähenda külgühendust – Kui ühendamist teostab reduktor, nimetatakse seda redutseerimispoolseks ühenduseks. Selles ühenduses ei ole vaja andmestikku struktureeritud kujul (või partitsioonidega).
Siin väljastab kaardipoolne töötlemine mõlema tabeli liitumisvõtme ja vastavad korteid. Selle töötluse tulemusena langevad kõik sama liitumisvõtmega korteežid samasse redutseerijasse, mis seejärel ühendab kirjed sama liitumisvõtmega.
Hadoopi ühenduste üldine protsessivoog on kujutatud alloleval diagrammil.
Kahe andmekogumi ühendamine: MapReduce näide
Kahes erinevas failis on kaks andmekomplekti (näidatud allpool). Võtme osakonna ID on mõlemas failis tavaline. Eesmärk on nende failide ühendamiseks kasutada MapReduce Join'i
sisend: Sisendandmete kogum on txt-fail, DeptName.txt ja DepStrength.txt
Laadige sisendfailid alla siit
Veenduge, et Hadoop oleks installitud. Enne MapReduce Join näite tegeliku protsessiga alustamist muutke kasutajaks „hduser” (Hadoopi konfigureerimisel kasutatud ID, saate lülituda Hadoopi seadistamise ajal kasutatud kasutajatunnusele).
su - hduser_
Step 1) Kopeerige ZIP-fail teie valitud asukohta
Step 2) Pakkige ZIP-fail lahti
sudo tar -xvf MapReduceJoin.tar.gz
Step 3) Mine kataloogi MapReduceJoin/
cd MapReduceJoin/
Step 4) Käivitage Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Step 5) DeptStrength.txt ja DeptName.txt on selle MapReduce Join näiteprogrammi jaoks kasutatavad sisendfailid.
Need failid tuleb kopeerida HDFS-i kasutades allolevat käsku-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Step 6) Käivitage programm, kasutades allolevat käsku -
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Step 7) Pärast käivitamist salvestatakse väljundfail (nimega 'part-00000') HDFS-i kataloogi /output_mapreducejoin
Tulemusi saab näha käsurea liidese abil
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Tulemusi saab näha ka veebiliidese kaudu,
Nüüd vali "Sirvi failisüsteemi" ja navigeerige üles /output_mapreducejoin
avatud osa r-00000
Tulemused on näidatud
MÄRKUS: Pange tähele, et enne selle programmi järgmist käivitamist peate kustutama väljundkataloogi /output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Teine võimalus on kasutada väljundkataloogi jaoks teist nime.
Mis on MapReduce'is loendur?
A Loendur rakenduses MapReduce on mehhanism, mida kasutatakse MapReduce'i tööde ja sündmuste statistilise teabe kogumiseks ja mõõtmiseks. Loendurid jälgivad MapReduce'is erinevat tööstatistikat, nagu tehtud toimingute arv ja toimingu edenemine. MapReduce'is kasutatakse probleemide diagnoosimiseks loendureid.
Hadoopi loendurid sarnanevad logiteate lisamisega kaardi või reduktsiooni koodisse. See teave võib olla kasulik MapReduce'i töö töötlemise probleemi diagnoosimisel.
Tavaliselt on need Hadoopi loendurid määratletud programmis (kaardistamine või vähendamine) ja neid suurendatakse täitmise ajal, kui ilmneb konkreetne sündmus või tingimus (selle loenduri jaoks spetsiifiline). Hadoopi loendurite väga hea rakendus on kehtivate ja kehtetute kirjete jälgimine sisendandmestikust.
MapReduce loendurite tüübid
Põhimõtteliselt on 2 tüüpi MapReduce loendurid
- Hadoopi sisseehitatud loendurid:Iga töö kohta on olemas mõned sisseehitatud Hadoopi loendurid. Allpool on sisseehitatud loendurirühmad-
- MapReduce ülesannete loendurid – Kogub selle täitmise ajal ülesande spetsiifilist teavet (nt sisendkirjete arv).
- Failisüsteemi loendurid – Kogub teavet, nagu ülesande loetud või kirjutatud baitide arv
- FileInputFormat loendurid – Kogub FileInputFormati kaudu loetud teabe mitme baitide kohta
- FileOutputFormat loendurid – Kogub FileOutputFormati kaudu kirjutatud baitide arvu teavet
- Tööloendurid – Neid loendureid kasutab JobTracker. Nende kogutud statistika sisaldab näiteks töö jaoks käivitatud ülesannete arvu.
- Kasutaja määratud loendurid
Lisaks sisseehitatud loenduritele saab kasutaja määrata oma loendurid, kasutades sarnaseid funktsioone, mida pakub programmeerimiskeeled. Näiteks aastal Java 'enum' kasutatakse kasutaja määratud loendurite määratlemiseks.
Loendurid Näide
Loenduritega MapClassi näide puuduvate ja kehtetute väärtuste loendamiseks. Selles õpetuses kasutatud sisendandmete fail Meie sisendandmete kogum on CSV-fail, MüükJaan2009.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")); } } }
Ülaltoodud koodilõik näitab loendurite rakendamise näidet rakenduses Hadoop Map Reduce.
Siin Müügiloendurid on loendur, mis on määratletud kasutades 'enum'. Seda kasutatakse loendamiseks MISSING ja KEHTETU sisendkirjed.
Koodilõigul, kui 'riik' välja pikkus on null, siis puudub selle väärtus ja seega ka vastav loendur Müügiloendurid.PUUDUB suurendatakse.
Järgmiseks, kui "müük" väli algab tähega a " siis loetakse kirje KEHTETUKS. Seda näitab loenduri suurenemine SalesCounters.INVALID.