Hadoop MapReduce Liity & Laskuri esimerkillä

Sisällysluettelo:

Anonim

Mikä on liittyminen Mapreducessa?

Mapreduce Join -toimintoa käytetään kahden suuren tietojoukon yhdistämiseen. Tähän prosessiin liittyy kuitenkin paljon koodien kirjoittamista varsinaisen liittämistoiminnon suorittamiseksi. Kahden aineiston yhdistäminen alkaa vertaamalla kunkin tietojoukon kokoa. Jos yksi tietojoukko on pienempi verrattuna toiseen aineistoon, pienempi tietojoukko jaetaan jokaiselle klusterin tietosolmulle.

Kun liitos MapReducessa on jaettu, joko Mapper tai Reducer käyttää pienempää tietoaineistoa etsimään suurten tietojoukkojen tietueita ja yhdistämään sitten nämä tietueet muodostamaan tulosrekisterit.

Tässä opetusohjelmassa opit-

  • Mikä on liittyminen MapReducessa?
  • Liittymisen tyypit
  • Kuinka yhdistää kaksi tietojoukkoa: MapReduce-esimerkki
  • Mikä on laskuri MapReducessa?
  • MapReduce-laskureiden tyypit
  • Laskurit Esimerkki

Liittymisen tyypit

Riippuen paikasta, jossa varsinainen liittyminen suoritetaan, liittymät Hadoopissa luokitellaan

1. Kartanpuoleinen liitos - Kun kartoitus suorittaa liitoksen, sitä kutsutaan kartanpuoleiseksi liitokseksi. Tämän tyyppinen liitos suoritetaan ennen kuin karttatoiminto tosiasiallisesti kuluttaa tietoja. On pakollista, että kunkin kartan tulo on osion muodossa ja lajiteltu järjestyksessä. Lisäksi osioiden on oltava yhtä monta ja se on lajiteltava liittoavaimen avulla.

2. Pienennyspuolen liitos - Kun liitos suoritetaan pelkistimellä, sitä kutsutaan pelkän puolen liitokseksi. Tässä liittymisessä ei ole tarvetta pitää tietojoukkoa jäsennetyssä muodossa (tai osioituna).

Tässä kartanpuolen käsittely lähettää liitäntäavaimen ja vastaavat taulukoiden molemmat taulukot. Tämän käsittelyn seurauksena kaikki ryhmät, joilla on sama liitosavain, putoavat samaan supistimeen, joka sitten yhdistää tietueet samalla liittoavaimella.

Liitosten kokonaisprosessivirta Hadoopissa on esitetty alla olevassa kaaviossa.

Liitostyypit Hadoop MapReduce -sovelluksessa

Kuinka yhdistää kaksi tietojoukkoa: MapReduce-esimerkki

Kahdessa eri tiedostossa on kaksi tietojoukkoa (esitetty alla). Key Dept_ID on yhteinen molemmissa tiedostoissa. Tavoitteena on käyttää MapReduce Join -ohjelmaa näiden tiedostojen yhdistämiseen

Tiedosto 1
Tiedosto 2

Syöttö: Syöttötietojoukko on txt-tiedosto, osastonimi.txt ja DepStrength.txt

Lataa syötetiedostot täältä

Varmista, että olet asentanut Hadoopin. Ennen kuin aloitat MapReduce Join -esimerkin varsinaisesta prosessista, vaihda käyttäjä muotoon 'hduser' (tunnusta käytetään Hadoop-määrityksen aikana, voit siirtyä 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 alla olevien komentojen avulla.

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

Vaihe 6) Suorita ohjelma alla olevien komentojen avulla

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

Vaihe 7) Suorituksen jälkeen tulostetiedosto (nimeltään 'osa-00000') tallennetaan hakemistoon / output_mapreducejoin HDFS: llä

Tulokset voidaan nähdä komentoriviliittymällä

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

Tulokset voidaan nähdä myös web-käyttöliittymän kautta

Valitse nyt 'Selaa tiedostojärjestelmää' ja siirry ylös / output_mapreducejoin

Avoin osa-r-00000

Tulokset näytetään

HUOMAUTUS: Huomaa, että ennen tämän ohjelman seuraavaa käyttämistä sinun on poistettava lähtöhakemisto / output_mapreducejoin

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

Vaihtoehtoisesti on käyttää eri nimeä lähtöhakemistolle.

Mikä on laskuri MapReducessa?

Laskuri MapReduce on mekanismi avulla kerätään ja mitataan tilastotietoa MapReduce työpaikoista ja tapahtumia. Laskurit seuraavat eri työtilastoja MapReducessa, kuten tapahtumien lukumäärä ja toiminnan edistyminen. Laskureita käytetään ongelman diagnosointiin MapReducessa.

Hadoopin laskurit ovat samanlaisia ​​kuin lokiviestin lisääminen kartan koodiin tai pienennys. Nämä tiedot voivat olla hyödyllisiä ongelman diagnosoinnissa MapReduce-työn käsittelyssä.

Tyypillisesti nämä Hadoopin laskurit määritetään ohjelmassa (kartoita tai pienennä) ja kasvavat suorituksen aikana, kun tietty tapahtuma tai ehto (tälle laskurille ominainen) tapahtuu. Hadoop-laskureiden erittäin hyvä sovellus on kelvollisten ja virheellisten tietueiden seuraaminen syötetiedostosta.

MapReduce-laskureiden tyypit

MapReduce-laskureita on periaatteessa 2 tyyppiä

    1. Hadoopin sisäänrakennetut laskurit: Joitakin sisäänrakennettuja Hadoop-laskureita on olemassa yhtä työtä kohti. Alla on sisäänrakennetut laskuriryhmät
      • MapReduce Task Counters - Kerää tehtäväkohtaisia ​​tietoja (esim. Syötetietueiden lukumäärä) sen suorittamisen aikana.
      • FileSystem Counters - Kerää tietoja, kuten tehtävän lukemien tai kirjoittamien tavujen lukumäärä
      • FileInputFormat-laskurit - kerää tietoja useista tavuista, jotka on luettu FileInputFormat-sovelluksen kautta
      • FileOutputFormat-laskurit - kerää tietoja useista tavuista, jotka on kirjoitettu FileOutputFormatilla
      • Job Counters - JobTracker käyttää näitä laskureita. Heidän keräämiinsä tilastoihin sisältyy esimerkiksi työhön käynnistettyjen tehtävien määrä.
    2. Käyttäjän määrittelemät laskurit

Sisäänrakennettujen laskureiden lisäksi käyttäjä voi määrittää omat laskurit käyttämällä vastaavia toimintoja, joita ohjelmointikielet tarjoavat. Esimerkiksi Javassa sanaa "enum" käytetään määrittämään käyttäjän määrittelemät laskurit.

Laskurit Esimerkki

Esimerkki MapClass-laskureista puuttuvien ja virheellisten arvojen määrän laskemiseksi. Tässä opetusohjelmassa käytetty syötetiedosto Sisääntulotietojoukkomme on CSV-tiedosto, 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"));}}}

Yllä oleva koodinpätkä näyttää esimerkin laskureiden toteutuksesta Hadoop Map Reduce -sovelluksessa.

Tässä SalesCounters on laskuri, joka määritetään käyttämällä 'enum' . Sitä käytetään laskemaan puuttuvia ja virheellisiä syötetietueita.

Jos koodinpätkässä "maa" -kentän pituus on nolla, sen arvo puuttuu ja vastaavaa SalesCounters.MISSING-laskuria kasvatetaan.

Seuraavaksi, jos 'myynti' -kenttä alkaa ", tietueen katsotaan olevan VIRHEELLINEN. Tämän osoittaa kasvava laskuri SalesCounters.INVALID.