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.
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ů
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_
Krok 1) Zkopírujte soubor zip do vámi zvoleného umístění
Krok 2) Dekomprimujte soubor ZIP
sudo tar -xvf MapReduceJoin.tar.gz
Krok 3) Přejít do adresáře MapReduceJoin/
cd MapReduceJoin/
Krok 4) Spusťte Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
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 /
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
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
Výsledky lze také zobrazit prostřednictvím webového rozhraní jako-
Nyní vyberte 'Procházet souborový systém' a přejděte nahoru /output_mapreducejoin
Otevřená část-r-00000
Jsou zobrazeny výsledky
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
- 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.
- 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.