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.

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


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