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.

Liitostyypit Hadoop MapReducessa
Liitostyypit Hadoop MapReducessa

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

Esimerkki MapReduce
Tiedosto 1
Esimerkki MapReduce
Tiedosto 2

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_

Esimerkki MapReduce

Vaihe 1) Kopioi zip-tiedosto valitsemaasi paikkaan

Esimerkki MapReduce

Vaihe 2) Pura zip-tiedosto

sudo tar -xvf MapReduceJoin.tar.gz

Esimerkki MapReduce

Vaihe 3) Siirry hakemistoon MapReduceJoin/

cd MapReduceJoin/

Esimerkki MapReduce

Vaihe 4) Kรคynnistรค Hadoop

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

Esimerkki MapReduce

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 /

Esimerkki MapReduce

Vaihe 6) Suorita ohjelma alla olevalla komennolla-

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

Esimerkki MapReduce

Esimerkki MapReduce

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

Esimerkki MapReduce

Tulokset ovat nรคhtรคvissรค myรถs verkkokรคyttรถliittymรคn kautta mm.

Esimerkki MapReduce

Valitse nyt "Selaa tiedostojรคrjestelmรครค" ja navigoi ylรถs /output_mapreducejoin

Esimerkki MapReduce

avoin osa-r-00000

Esimerkki MapReduce

Tulokset nรคytetรครคn

Esimerkki MapReduce

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

  1. 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รค.
  2. 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.

Tiivistรค tรคmรค viesti seuraavasti: