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 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

  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 - 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.
  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.