Hadoop MapReduce Join & Counter s příkladem

Co je to Join v Mapreduce?

Mapreduce Připojte se operace se používá ke spojení dvou velkých datových sad. Tento proces však zahrnuje psaní velkého množství kódu k provedení skutečné operace spojení. Spojení dvou datových sad začíná porovnáním velikosti každé datové sady. Pokud je jedna datová sada menší ve srovnání s druhou datovou sadou, pak je menší datová sada distribuována do každého datového uzlu v clusteru.

Jakmile je spojení v MapReduce distribuováno, Mapper nebo Reducer použije menší datovou sadu k vyhledání odpovídajících záznamů z velké datové sady a poté tyto záznamy zkombinuje do výstupních záznamů.

Typy spojení

V závislosti na místě, kde se skutečné spojení provádí, se spojení v Hadoop dělí na

1. Spojení na straně mapy – Když spojení provádí mapovač, nazývá se spojení na straně mapy. U tohoto typu se spojení provede dříve, než jsou data skutečně spotřebována mapovou funkcí. Je povinné, aby vstup do každé mapy byl ve formě oddílu a byl seřazen. Také musí existovat stejný počet oddílů a musí být seřazeny podle spojovacího klíče.

2. Spojení na zmenšené straně – Když spojení provádí reduktor, nazývá se to spojení na straně zmenšení. V tomto spojení není nutné mít datovou sadu ve strukturované podobě (nebo rozdělenou).

Zde zpracování na straně mapy generuje spojovací klíč a odpovídající n-tice obou tabulek. V důsledku tohoto zpracování všechny n-tice se stejným spojovacím klíčem spadají do stejného reduktoru, který pak spojuje záznamy se stejným spojovacím klíčem.

Celkový procesní tok spojení v Hadoop je znázorněn na níže uvedeném diagramu.

Typy spojení v Hadoop MapReduce
Typy spojení v Hadoop MapReduce

Jak spojit dvě sady dat: Příklad MapReduce

Existují dvě sady dat ve dvou různých souborech (zobrazeno níže). Klíč Dept_ID je společný v obou souborech. Cílem je použít MapReduce Join ke spojení těchto souborů

Příklad MapReduce
Soubor 1
Příklad MapReduce
Soubor 2

Vstup: Vstupní datový soubor je soubor txt, DeptName.txt & DepStrength.txt

Stáhněte si vstupní soubory odtud

Ujistěte se, že máte nainstalovaný Hadoop. Než začnete se skutečným procesem příkladu MapReduce Join, změňte uživatele na 'hduser' (ID používané při konfiguraci Hadoop, můžete přepnout na uživatelské ID používané během konfigurace Hadoop ).

su - hduser_

Příklad MapReduce

Krok 1) Zkopírujte soubor zip do vámi zvoleného umístění

Příklad MapReduce

Krok 2) Dekomprimujte soubor ZIP

sudo tar -xvf MapReduceJoin.tar.gz

Příklad MapReduce

Krok 3) Přejít do adresáře MapReduceJoin/

cd MapReduceJoin/

Příklad MapReduce

Krok 4) Spusťte Hadoop

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

Příklad MapReduce

Krok 5) DeptStrength.txt a DeptName.txt jsou vstupní soubory používané pro tento ukázkový program MapReduce Join.

Tyto soubory je třeba zkopírovat do HDFS pomocí níže uvedeného příkazu-

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

Příklad MapReduce

Krok 6) Spusťte program pomocí níže uvedeného příkazu -

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

Příklad MapReduce

Příklad MapReduce

Krok 7) Po spuštění se výstupní soubor (s názvem 'part-00000') uloží do adresáře /output_mapreducejoin na HDFS

Výsledky lze zobrazit pomocí rozhraní příkazového řádku

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

Příklad MapReduce

Výsledky lze také zobrazit prostřednictvím webového rozhraní jako-

Příklad MapReduce

Nyní vyberte 'Procházet souborový systém' a přejděte nahoru /output_mapreducejoin

Příklad MapReduce

Otevřená část-r-00000

Příklad MapReduce

Jsou zobrazeny výsledky

Příklad MapReduce

POZNÁMKA: Upozorňujeme, že před dalším spuštěním tohoto programu budete muset smazat výstupní adresář /output_mapreducejoin

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

Alternativou je použití jiného názvu výstupního adresáře.

Co je Counter v MapReduce?

A Počítadlo v MapReduce je mechanismus používaný pro sběr a měření statistických informací o úlohách a událostech MapReduce. Počítadla sledují různé statistiky úloh v MapReduce, jako je počet provedených operací a průběh operace. Čítače se používají pro diagnostiku problémů v MapReduce.

Hadoop čítače jsou podobné vložení zprávy protokolu do kódu pro mapu nebo redukci. Tyto informace mohou být užitečné pro diagnostiku problému při zpracování úlohy MapReduce.

Obvykle jsou tyto čítače v Hadoopu definovány v programu (mapovat nebo redukovat) a jsou zvýšeny během provádění, když nastane určitá událost nebo podmínka (specifická pro daný čítač). Velmi dobrou aplikací čítačů Hadoop je sledování platných a neplatných záznamů ze vstupní datové sady.

Typy čítačů MapReduce

V zásadě existují 2 typy MapReduce pulty

  1. Vestavěné čítače Hadoop:Existuje několik vestavěných čítačů Hadoop, které existují pro každou úlohu. Níže jsou vestavěné skupiny čítačů-
    • MapReduce Task Counters – Shromažďuje informace specifické pro úlohu (např. počet vstupních záznamů) během doby jejího provádění.
    • Čítače systému souborů – Shromažďuje informace, jako je počet bajtů přečtených nebo zapsaných úlohou
    • Čítače FileInputFormat – Shromažďuje informace o počtu bajtů přečtených prostřednictvím FileInputFormat
    • Čítače FileOutputFormat – Shromažďuje informace o počtu bajtů zapsaných prostřednictvím FileOutputFormat
    • Pracovní přepážky – Tyto čítače používá JobTracker. Statistiky, které shromažďují, zahrnují např. počet úloh spuštěných pro úlohu.
  2. Uživatelem definované čítače

Kromě vestavěných čítačů může uživatel definovat své vlastní čítače pomocí podobných funkcí, které poskytuje programovací jazyky. Například v Java 'enum' se používají k definování uživatelem definovaných čítačů.

Příklad počítadel

Příklad MapClass s Counters pro počítání počtu chybějících a neplatných hodnot. Soubor vstupních dat použitý v tomto tutoriálu Naše vstupní datová sada je soubor CSV, ProdejJan2009.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"));
        }
    }
}

Výše uvedený fragment kódu ukazuje příklad implementace čítačů v Hadoop Map Reduce.

Zde, Prodejní pulty je čítač definovaný pomocí 'výčet'. Používá se k počítání CHYBÍ si NEPLATNÝ vstupní záznamy.

Ve fragmentu kódu, pokud 'země' pole má nulovou délku, pak chybí jeho hodnota a tedy odpovídající čítač Prodejní pulty.CHYBÍ je zvýšena.

Další, pokud 'odbyt' pole začíná na a " pak je záznam považován za NEPLATNÝ. To je indikováno zvyšujícím se čítačem SalesCounters.INVALID.