„Hadoop MapReduce Join“ & Skaitliukas su pavyzdžiu

Kas yra „Mapreduce“ prisijungimas?

Mapreduce Join operacija naudojama sujungti du didelius duomenų rinkinius. Tačiau šiame procese reikia parašyti daug kodo, kad būtų atlikta tikroji prisijungimo operacija. Sujungti du duomenų rinkinius pradedama lyginant kiekvieno duomenų rinkinio dydį. Jei vienas duomenų rinkinys yra mažesnis, palyginti su kitu duomenų rinkiniu, mažesnis duomenų rinkinys paskirstomas kiekvienam duomenų grupės mazgui.

Kai „MapReduce“ sujungimas yra paskirstytas, „Mapper“ arba „Reducer“ naudoja mažesnį duomenų rinkinį, kad atliktų didelių duomenų rinkinių įrašų paiešką ir sujungtų tuos įrašus suformuodami išvesties įrašus.

Šioje pamokoje sužinosite

  • Kas yra „MapReduce“ prisijungimas?
  • Prisijungimo tipai
  • Kaip sujungti du duomenų rinkinius: „MapReduce“ pavyzdys
  • Kas yra „MapReduce“ skaitiklis?
  • MapReduce Counters tipai
  • Skaitiklių pavyzdys

Prisijungimo tipai

Priklausomai nuo vietos, kur atliekamas tikrasis prisijungimas, prisijungimai Hadoop yra klasifikuojami

1. Sujungimas žemėlapio pusėje - kai sujungimą atlieka žemėlapio sudarytojas, jis vadinamas žemėlapio sujungimu. Šio tipo sujungimas atliekamas prieš tai, kai žemėlapio funkcija iš tikrųjų sunaudoja duomenis. Privaloma, kad kiekvieno žemėlapio įvestis būtų skaidinio pavidalu ir būtų rūšiuojama. Be to, turi būti vienodas skaidinių skaičius ir jis turi būti rūšiuojamas pagal prisijungimo raktą.

2. Reduktoriaus sujungimas - kai sujungimą atlieka reduktorius, jis vadinamas sumažintos pusės sujungimu. Šiame sujungime nėra būtinybės turėti duomenų rinkinį struktūrizuota forma (arba suskaidyti).

Žemėlapio pusės apdorojimas skleidžia prisijungimo raktą ir atitinkamus abiejų lentelių rinkinius. Dėl šio apdorojimo visi rinkiniai su tuo pačiu prisijungimo raktu patenka į tą patį reduktorių, kuris tada sujungia įrašus tuo pačiu prisijungimo raktu.

Bendras Hadoopo sujungimų proceso srautas pavaizduotas toliau pateiktoje diagramoje.

Sujungimų tipai „Hadoop MapReduce“

Kaip sujungti du duomenų rinkinius: „MapReduce“ pavyzdys

Dviejuose skirtinguose failuose yra du duomenų rinkiniai (parodyta žemiau). „Key Dept_ID“ yra bendras abiejuose failuose. Tikslas yra naudoti „MapReduce Join“, kad sujungtumėte šiuos failus

1 byla
2 byla

Įvestis: įvesties duomenų rinkinys yra txt failas, DeptName.txt ir DepStrength.txt

Atsisiųskite įvesties failus iš čia

Įsitikinkite, kad įdiegėte „Hadoop“. Prieš pradėdami nuo „MapReduce Join“ tikrojo proceso pavyzdžio, pakeiskite vartotoją į „hduser“ (ID naudojamas, kai „Hadoop“ konfigūracija, galite pereiti į „Userid“, naudojamą „Hadoop“ konfigūracijos metu).

su - hduser_

1 žingsnis) Nukopijuokite ZIP failą į pasirinktą vietą

2 žingsnis) Išpakuokite ZIP failą

sudo tar -xvf MapReduceJoin.tar.gz

3 žingsnis) Eikite į katalogą MapReduceJoin /

cd MapReduceJoin/

4 žingsnis) Paleiskite „Hadoop“

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

5 žingsnis) DeptStrength.txt ir DeptName.txt yra įvesties failai, naudojami šiai „MapReduce Join“ pavyzdinei programai.

Šį failą reikia nukopijuoti į HDFS naudojant žemiau esančią komandą

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

6 žingsnis) Paleiskite programą naudodami žemiau esančią komandą

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

7 veiksmas) Po atlikimo išvesties failas (pavadintas „part-00000“) bus saugomas kataloge / output_mapreducejoin HDFS

Rezultatus galima pamatyti naudojant komandinės eilutės sąsają

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

Rezultatus taip pat galima pamatyti per interneto sąsają

Dabar pasirinkite „Naršyti failų sistemą“ ir eikite į upto / output_mapreducejoin

Atidarykite „ r-00000“ dalį

Rezultatai rodomi

PASTABA: Atkreipkite dėmesį, kad prieš paleisdami šią programą kitą kartą, turėsite ištrinti išvesties katalogą / output_mapreducejoin

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

Alternatyva yra naudoti kitą pavadinimą išvesties katalogui.

Kas yra „MapReduce“ skaitiklis?

MapReduceskaitiklis yra mechanizmas, naudojamas rinkti ir matuoti statistinę informaciją apie „MapReduce“ užduotis ir įvykius. Skaitikliai stebi įvairią darbo statistiką „MapReduce“, pvz., Atliktų operacijų skaičių ir operacijos eigą. „MapReduce“ programoje problemos diagnostikai naudojami skaitikliai.

„Hadoop Counters“ yra panašūs į žurnalo pranešimo įdėjimą į žemėlapio kodą arba sumažinimą. Ši informacija gali būti naudinga diagnozuojant „MapReduce“ darbo apdorojimo problemą.

Paprastai šie skaitikliai programoje „Hadoop“ yra apibrėžti programoje (pažymėti arba sumažinti) ir didinami vykdymo metu, kai įvyksta konkretus įvykis ar sąlyga (būdinga tam skaitikliui). Labai geras „Hadoop“ skaitiklių taikymas yra galiojančių ir neteisingų įrašų sekimas iš įvesties duomenų rinkinio.

MapReduce Counters tipai

Iš esmės yra 2 „MapReduce“ skaitiklių tipai

    1. „Hadoop“ įmontuoti skaitikliai: yra keletas įmontuotų „Hadoop“ skaitiklių, kurie egzistuoja kiekvienoje užduotyje. Žemiau yra įmontuotos skaitiklių grupės-
      • „MapReduce“ užduočių skaitikliai - renka konkrečios užduoties informaciją (pvz., Įvesties įrašų skaičių) per jos vykdymo laiką.
      • „FileSystem Counters“ - renka informaciją, pvz., Užduočių perskaitytų ar parašytų baitų skaičių
      • „FileInputFormat Counters“ - renka informaciją apie daugelį baitų, perskaitytų per „FileInputFormat“
      • „FileOutputFormat Counters“ - renka informaciją apie daugelį baitų, parašytų per „FileOutputFormat“
      • Darbo skaitikliai - šiuos skaitiklius naudoja „JobTracker“. Jų surinktoje statistikoje nurodomas, pavyzdžiui, užduoties, pradėtos darbui, skaičius.
    2. Vartotojo nustatyti skaitikliai

Be įmontuotų skaitiklių, vartotojas gali nusistatyti savo skaitiklius naudodamas panašias funkcijas, kurias teikia programavimo kalbos. Pavyzdžiui, „Java“ kalboje „enum“ vartojami apibrėžiant vartotojo nustatytus skaitiklius.

Skaitiklių pavyzdys

MapClass with Counters pavyzdys, skirtas suskaičiuoti trūkstamų ir neteisingų verčių skaičių. Šioje mokymo programoje naudojamas įvesties duomenų failas Mūsų įvesties duomenų rinkinys yra CSV failas „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"));}}}

Aukščiau esančiame kodo fragmente rodomas skaitiklių įdiegimo „Hadoop Map Reduce“ pavyzdys.

Čia „ SalesCounters“ yra skaitiklis, apibrėžtas naudojant „enum“ . Jis naudojamas praleistų ir NETEISINGŲ įvesties įrašų skaičiavimui .

Kodo fragmente, jei lauke „šalis“ yra nulis ilgio, trūksta jo vertės, todėl padidėja atitinkamas skaitiklis „ SalesCounters.MISSING“ .

Toliau, jei laukas „pardavimai“ prasideda „“ , įrašas laikomas NETEISINGU. Tai rodo didėjantis skaitiklis „ SalesCounters.INVALID“.

Įdomios straipsniai...