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
Lataa syรถttรถtiedostot tรครคltรค
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 MapReduce-tรถiden ja -tapahtumien tilastotietojen kerรครคmiseen ja mittaamiseen. Laskurit pitรคvรคt track erilaista tyรถtilastoa MapReducessa, kuten tapahtuneiden toimintojen lukumรครคrรค ja toiminnon edistyminen. Laskureita kรคytetรครคn ongelman diagnosointiin MapReducessa.
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รค Hadoop-laskurit mรครคritellรครคn ohjelmassa (map tai reduce) ja niitรค kasvatetaan suorituksen aikana, kun tietty tapahtuma tai ehto (kyseiselle laskurille ominainen) tapahtuu. Erittรคin hyvรค Hadoop-laskurien sovellus on track kelvollista ja epรคkelvollista tietuetta syรถttรถaineistosta.
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 - Job kรคyttรครค nรคitรค laskureitaTracker. Niiden kerรครคmiin tilastoihin kuuluvat esimerkiksi tyรถtehtรคvรครคn kรคynnistettyjen tehtรคvien mรครคrรค.
- 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.











