Hadoop MapReduce liitumine ja loendus näitega

Mis on Mapreduce'is liitumine?

Mapreduce liitumine toimingut kasutatakse kahe suure andmestiku ühendamiseks. See protsess hõlmab aga tegeliku liitumistoimingu tegemiseks palju koodi kirjutamist. Kahe andmekogumi ühendamine algab iga andmekogumi suuruse võrdlemisega. Kui üks andmestik on teisest andmekogumist väiksem, jaotatakse väiksem andmestik klastri igale andmesõlmele.

Kui MapReduce'i liitumine on jaotatud, kasutab Mapper või Reducer väiksemat andmestikku, et otsida suurest andmekogumist sobivaid kirjeid ja seejärel ühendada need kirjed väljundkirjete moodustamiseks.

Liitumise tüübid

Sõltuvalt tegeliku ühendamise kohast liigitatakse Hadoopi ühendused järgmisteks osadeks:

1. Kaardipoolne liitmine – Kui ühendamise teostab kaardistaja, nimetatakse seda kaardipoolseks liitumiseks. Seda tüüpi ühendamine toimub enne, kui kaardifunktsioon andmeid tegelikult tarbib. Iga kaardi sisend peab olema partitsiooni kujul ja sorteeritud järjekorras. Samuti peab partitsioone olema võrdne arv ja need tuleb sortida liitumisvõtme järgi.

2. Vähenda külgühendust – Kui ühendamist teostab reduktor, nimetatakse seda redutseerimispoolseks ühenduseks. Selles ühenduses ei ole vaja andmestikku struktureeritud kujul (või partitsioonidega).

Siin väljastab kaardipoolne töötlemine mõlema tabeli liitumisvõtme ja vastavad korteid. Selle töötluse tulemusena langevad kõik sama liitumisvõtmega korteežid samasse redutseerijasse, mis seejärel ühendab kirjed sama liitumisvõtmega.

Hadoopi ühenduste üldine protsessivoog on kujutatud alloleval diagrammil.

Hadoop MapReduce'i liitumiste tüübid
Hadoop MapReduce'i liitumiste tüübid

Kahe andmekogumi ühendamine: MapReduce näide

Kahes erinevas failis on kaks andmekomplekti (näidatud allpool). Võtme osakonna ID on mõlemas failis tavaline. Eesmärk on nende failide ühendamiseks kasutada MapReduce Join'i

MapReduce näide
Fail 1
MapReduce näide
Fail 2

sisend: Sisendandmete kogum on txt-fail, DeptName.txt ja DepStrength.txt

Laadige sisendfailid alla siit

Veenduge, et Hadoop oleks installitud. Enne MapReduce Join näite tegeliku protsessiga alustamist muutke kasutajaks „hduser” (Hadoopi konfigureerimisel kasutatud ID, saate lülituda Hadoopi seadistamise ajal kasutatud kasutajatunnusele).

su - hduser_

MapReduce näide

Step 1) Kopeerige ZIP-fail teie valitud asukohta

MapReduce näide

Step 2) Pakkige ZIP-fail lahti

sudo tar -xvf MapReduceJoin.tar.gz

MapReduce näide

Step 3) Mine kataloogi MapReduceJoin/

cd MapReduceJoin/

MapReduce näide

Step 4) Käivitage Hadoop

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

MapReduce näide

Step 5) DeptStrength.txt ja DeptName.txt on selle MapReduce Join näiteprogrammi jaoks kasutatavad sisendfailid.

Need failid tuleb kopeerida HDFS-i kasutades allolevat käsku-

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

MapReduce näide

Step 6) Käivitage programm, kasutades allolevat käsku -

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

MapReduce näide

MapReduce näide

Step 7) Pärast käivitamist salvestatakse väljundfail (nimega 'part-00000') HDFS-i kataloogi /output_mapreducejoin

Tulemusi saab näha käsurea liidese abil

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

MapReduce näide

Tulemusi saab näha ka veebiliidese kaudu,

MapReduce näide

Nüüd vali "Sirvi failisüsteemi" ja navigeerige üles /output_mapreducejoin

MapReduce näide

avatud osa r-00000

MapReduce näide

Tulemused on näidatud

MapReduce näide

MÄRKUS: Pange tähele, et enne selle programmi järgmist käivitamist peate kustutama väljundkataloogi /output_mapreducejoin

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

Teine võimalus on kasutada väljundkataloogi jaoks teist nime.

Mis on MapReduce'is loendur?

A Loendur rakenduses MapReduce on mehhanism, mida kasutatakse MapReduce'i tööde ja sündmuste statistilise teabe kogumiseks ja mõõtmiseks. Loendurid jälgivad MapReduce'is erinevat tööstatistikat, nagu tehtud toimingute arv ja toimingu edenemine. MapReduce'is kasutatakse probleemide diagnoosimiseks loendureid.

Hadoopi loendurid sarnanevad logiteate lisamisega kaardi või reduktsiooni koodisse. See teave võib olla kasulik MapReduce'i töö töötlemise probleemi diagnoosimisel.

Tavaliselt on need Hadoopi loendurid määratletud programmis (kaardistamine või vähendamine) ja neid suurendatakse täitmise ajal, kui ilmneb konkreetne sündmus või tingimus (selle loenduri jaoks spetsiifiline). Hadoopi loendurite väga hea rakendus on kehtivate ja kehtetute kirjete jälgimine sisendandmestikust.

MapReduce loendurite tüübid

Põhimõtteliselt on 2 tüüpi MapReduce loendurid

  1. Hadoopi sisseehitatud loendurid:Iga töö kohta on olemas mõned sisseehitatud Hadoopi loendurid. Allpool on sisseehitatud loendurirühmad-
    • MapReduce ülesannete loendurid – Kogub selle täitmise ajal ülesande spetsiifilist teavet (nt sisendkirjete arv).
    • Failisüsteemi loendurid – Kogub teavet, nagu ülesande loetud või kirjutatud baitide arv
    • FileInputFormat loendurid – Kogub FileInputFormati kaudu loetud teabe mitme baitide kohta
    • FileOutputFormat loendurid – Kogub FileOutputFormati kaudu kirjutatud baitide arvu teavet
    • Tööloendurid – Neid loendureid kasutab JobTracker. Nende kogutud statistika sisaldab näiteks töö jaoks käivitatud ülesannete arvu.
  2. Kasutaja määratud loendurid

Lisaks sisseehitatud loenduritele saab kasutaja määrata oma loendurid, kasutades sarnaseid funktsioone, mida pakub programmeerimiskeeled. Näiteks aastal Java 'enum' kasutatakse kasutaja määratud loendurite määratlemiseks.

Loendurid Näide

Loenduritega MapClassi näide puuduvate ja kehtetute väärtuste loendamiseks. Selles õpetuses kasutatud sisendandmete fail Meie sisendandmete kogum on CSV-fail, MüükJaan2009.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"));
        }
    }
}

Ülaltoodud koodilõik näitab loendurite rakendamise näidet rakenduses Hadoop Map Reduce.

Siin Müügiloendurid on loendur, mis on määratletud kasutades 'enum'. Seda kasutatakse loendamiseks MISSING ja KEHTETU sisendkirjed.

Koodilõigul, kui 'riik' välja pikkus on null, siis puudub selle väärtus ja seega ka vastav loendur Müügiloendurid.PUUDUB suurendatakse.

Järgmiseks, kui "müük" väli algab tähega a " siis loetakse kirje KEHTETUKS. Seda näitab loenduri suurenemine SalesCounters.INVALID.