Hadoop MapReduce Join & Counter esimerkin avulla
Mitä Join on Mapreducessa?
Mapreduce Liity -toimintoa käytetään kahden suuren tietojoukon yhdistämiseen. Tämä prosessi edellyttää kuitenkin paljon koodin kirjoittamista todellisen liitostoiminnon suorittamiseksi. Kahden tietojoukon yhdistäminen alkaa vertaamalla kunkin tietojoukon kokoa. Jos yksi tietojoukko on pienempi kuin toinen tietojoukko, pienempi tietojoukko jaetaan jokaiseen klusterin datasolmuun.
Kun MapReducen liitos on jaettu, joko Mapper tai Reducer käyttää pienempää tietojoukkoa hakeakseen vastaavia tietueita suuresta tietojoukosta ja yhdistää sitten tietueet tulostietueiksi.
Liittymistyypit
Riippuen paikasta, jossa varsinainen liitos suoritetaan, Hadoopissa liitokset luokitellaan
1. Kartan puoleinen liitos – Kun liitoksen suorittaa kartoittaja, sitä kutsutaan karttapuolen liitokseksi. Tässä tyypissä yhdistäminen suoritetaan ennen kuin karttatoiminto todella kuluttaa tiedot. On pakollista, että jokaisen kartan syöte on osion muodossa ja lajiteltu. Lisäksi osioita on oltava yhtä monta ja se on lajiteltava liitosavaimen mukaan.
2. Pienennä sivuliitosta – Kun liitoksen suorittaa supistin, sitä kutsutaan vähennyspuolen liitokseksi. Tässä liitoksessa ei tarvitse olla tietojoukkoa jäsennellyssä muodossa (tai osioituna).
Tässä karttapuolen käsittely lähettää molempien taulukoiden liitosavaimen ja vastaavat monikot. Tämän käsittelyn seurauksena kaikki samalla liitosavaimella olevat monikot putoavat samaan supistimeen, joka sitten yhdistää tietueet samalla liitosavaimella.
Hadoopin liitosprosessin yleinen prosessi on kuvattu alla olevassa kaaviossa.
Kahden tietojoukon yhdistäminen: Esimerkki MapReduce
Kahdessa eri tiedostossa on kaksi tietojoukkoa (näkyy alla). Avain Dept_ID on yhteinen molemmissa tiedostoissa. Tavoitteena on käyttää MapReduce Join -ohjelmaa näiden tiedostojen yhdistämiseen
input: Syöttötietojoukko on txt-tiedosto, DeptName.txt & DepStrength.txt
Varmista, että sinulla on Hadoop asennettuna. Ennen kuin aloitat MapReduce Join -esimerkkiprosessin, vaihda käyttäjäksi "hduser" (tunnus, jota käytetään Hadoop-määrityksessä, voit vaihtaa Hadoop-määrityksen aikana käytettyyn käyttäjätunnukseen).
su - hduser_
Vaihe 1) Kopioi zip-tiedosto valitsemaasi paikkaan
Vaihe 2) Pura zip-tiedosto
sudo tar -xvf MapReduceJoin.tar.gz
Vaihe 3) Siirry hakemistoon MapReduceJoin/
cd MapReduceJoin/
Vaihe 4) Käynnistä Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Vaihe 5) DeptStrength.txt ja DeptName.txt ovat syötetiedostoja, joita käytetään tässä MapReduce Join -esimerkkiohjelmassa.
Nämä tiedostot on kopioitava HDFS:ään käyttämällä alla olevaa komentoa-
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Vaihe 6) Suorita ohjelma alla olevalla komennolla-
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Vaihe 7) Suorituksen jälkeen tulostiedosto (nimeltään 'part-00000') tallennetaan HDFS:n hakemistoon /output_mapreducejoin.
Tulokset näkyvät komentorivikäyttöliittymällä
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Tulokset ovat nähtävissä myös verkkokäyttöliittymän kautta mm.
Valitse nyt "Selaa tiedostojärjestelmää" ja navigoi ylös /output_mapreducejoin
avoin osa-r-00000
Tulokset näytetään
HUOMAUTUS: Huomaa, että ennen kuin suoritat tämän ohjelman seuraavan kerran, sinun on poistettava tuloshakemisto /output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
Vaihtoehtona on käyttää eri nimeä tulostehakemistolle.
Mikä on MapReducen laskuri?
A Laskuri MapReducessa on mekanismi, jota käytetään tilastotietojen keräämiseen ja mittaamiseen MapReducen työpaikoista ja tapahtumista. Laskurit seuraavat MapReducen erilaisia työtilastoja, kuten tapahtuneiden toimintojen määrää ja toiminnan edistymistä. Laskuria käytetään MapReducen ongelmien diagnosointiin.
Hadoop-laskurit ovat samanlaisia kuin lokiviestin lisääminen kartan tai pienennyskoodiin. Nämä tiedot voivat olla hyödyllisiä MapReduce-töiden käsittelyn ongelman diagnosoinnissa.
Tyypillisesti nämä Hadoopin laskurit määritellään ohjelmassa (kartoittaa tai pienentää) ja niitä kasvatetaan suorituksen aikana, kun tietty tapahtuma tai ehto (johon liittyy kyseiseen laskuriin) tapahtuu. Hadoop-laskurien erittäin hyvä sovellus on seurata kelvollisia ja virheellisiä tietueita syötetietojoukosta.
MapReduce-laskurityypit
Periaatteessa on 2 tyyppiä MapReduce laskurit
- Hadoopin sisäänrakennetut laskurit:Työtä kohden on joitain sisäänrakennettuja Hadoop-laskuria. Alla on sisäänrakennetut vastaryhmät-
- MapReduce Task Counters – Kerää tehtäväkohtaisia tietoja (esim. syöttötietueiden lukumäärää) suoritusaikansa aikana.
- Tiedostojärjestelmän laskurit – Kerää tietoa, kuten tehtävän lukemien tai kirjoittamien tavujen lukumäärän
- FileInputFormat laskurit – Kerää tietoa useista tavuista, jotka luetaan FileInputFormatin kautta
- FileOutputFormat laskurit – Kerää tietoa useista tavuista, jotka on kirjoitettu FileOutputFormatin kautta
- Työpöydät - Näitä laskureita käyttää JobTracker. Heidän keräämänsä tilastot sisältävät mm. työtehtävään käynnistettyjen tehtävien lukumäärän.
- Käyttäjän määrittämät laskurit
Sisäänrakennettujen laskurien lisäksi käyttäjä voi määrittää omat laskurinsa käyttämällä samankaltaisia toimintoja ohjelmointikielet. Esimerkiksi vuonna Java 'enum' käytetään määrittelemään käyttäjän määrittämiä laskureita.
Esimerkki laskurit
Esimerkki MapClassista ja laskureista puuttuvien ja virheellisten arvojen laskemiseksi. Tässä opetusohjelmassa käytetty syöttötietotiedosto Syöttötietojoukkomme on CSV-tiedosto, MyyntiJan2009.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")); } } }
Yllä oleva koodinpätkä näyttää esimerkin Hadoop Map Reducen laskureista.
Täällä Myyntilaskurit on laskuri, joka on määritetty käyttämällä "enum". Sitä käytetään laskemiseen PUUTTUU ja INVALID syöttötietueita.
Koodinpätkässä, jos 'maa' kentän pituus on nolla, sen arvo puuttuu ja siten vastaava laskuri SalesCounters.MISSING on lisätty.
Seuraavaksi jos 'myynti' kenttä alkaa kirjaimella a " silloin tietueen katsotaan olevan VIRHEELLINEN. Tämä ilmaistaan kasvavalla laskurilla SalesCounters.INVALID.