Hadoop MapReduce Dołącz & Licznik z przykładem

Spisie treści:

Anonim

Co to jest Dołącz w Mapreduce?

Operacja Mapreduce Join służy do łączenia dwóch dużych zestawów danych. Jednak ten proces obejmuje napisanie dużej ilości kodu w celu wykonania rzeczywistej operacji łączenia. Łączenie dwóch zbiorów danych rozpoczyna się od porównania rozmiaru każdego zbioru danych. Jeśli jeden zestaw danych jest mniejszy w porównaniu z drugim, mniejszy zestaw danych jest dystrybuowany do każdego węzła danych w klastrze.

Po rozproszeniu sprzężenia w MapReduce Mapper lub Reducer używa mniejszego zestawu danych do wyszukiwania pasujących rekordów z dużego zestawu danych, a następnie łączy te rekordy w celu utworzenia rekordów wyjściowych.

W tym samouczku nauczysz się:

  • Co to jest łączenie w MapReduce?
  • Rodzaje połączeń
  • Jak połączyć dwa zestawy danych: przykład MapReduce
  • Co to jest Counter w MapReduce?
  • Typy liczników MapReduce
  • Przykład liczników

Rodzaje połączeń

W zależności od miejsca, w którym wykonywane jest rzeczywiste sprzężenie, sprzężenia w Hadoop są klasyfikowane jako:

1. Łączenie po stronie mapy - gdy łączenie jest wykonywane przez program mapujący, nazywane jest łączeniem po stronie mapy. W tym typie łączenie jest wykonywane, zanim dane zostaną faktycznie zużyte przez funkcję map. Obowiązkowe jest, aby dane wejściowe do każdej mapy miały postać podziału i były posortowane. Ponadto musi istnieć równa liczba partycji i muszą być sortowane według klucza łączenia.

2. Łączenie po stronie redukcyjnej - gdy łączenie jest wykonywane przez reduktor, nazywane jest łączeniem po stronie redukcyjnej. W tym połączeniu nie ma konieczności posiadania zestawu danych w formie ustrukturyzowanej (lub podzielonej na partycje).

Tutaj przetwarzanie po stronie mapy emituje klucz łączenia i odpowiadające mu krotki obu tabel. W wyniku tego przetwarzania wszystkie krotki z tym samym kluczem łączenia wpadają do tego samego reduktora, który następnie łączy rekordy z tym samym kluczem łączenia.

Ogólny przebieg procesu łączenia w Hadoop jest przedstawiony na poniższym diagramie.

Typy połączeń w Hadoop MapReduce

Jak połączyć dwa zestawy danych: przykład MapReduce

Istnieją dwa zestawy danych w dwóch różnych plikach (pokazane poniżej). Key Dept_ID jest wspólny w obu plikach. Celem jest użycie MapReduce Join do połączenia tych plików

Plik 1
Plik 2

Dane wejściowe: zbiór danych wejściowych to plik txt, DeptName.txt i DepStrength.txt

Pobierz pliki wejściowe stąd

Upewnij się, że masz zainstalowany Hadoop. Zanim zaczniesz od rzeczywistego procesu MapReduce Join, zmień użytkownika na „hduser” (identyfikator używany podczas konfiguracji Hadoop, możesz przełączyć się na identyfikator użytkownika używany podczas konfiguracji Hadoop).

su - hduser_

Krok 1) Skopiuj plik zip do wybranej lokalizacji

Krok 2) Rozpakuj plik Zip

sudo tar -xvf MapReduceJoin.tar.gz

Krok 3) Przejdź do katalogu MapReduceJoin /

cd MapReduceJoin/

Krok 4) Uruchom Hadoop

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

Krok 5) DeptStrength.txt i DeptName.txt to pliki wejściowe używane dla tego przykładowego programu MapReduce Join.

Ten plik należy skopiować do HDFS za pomocą poniższego polecenia-

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

Krok 6) Uruchom program za pomocą poniższego polecenia-

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

Krok 7) Po wykonaniu plik wyjściowy (o nazwie „part-00000”) zostanie zapisany w katalogu / output_mapreducejoin na HDFS

Wyniki można zobaczyć za pomocą interfejsu wiersza poleceń

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

Wyniki można również wyświetlić za pomocą interfejsu internetowego jako

Teraz wybierz „Przeglądaj system plików” i przejdź do / output_mapreducejoin

Otwórz część r-00000

Wyświetlane są wyniki

UWAGA: Należy pamiętać, że przed następnym uruchomieniem tego programu należy usunąć katalog wyjściowy / output_mapreducejoin

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

Alternatywą jest użycie innej nazwy dla katalogu wyjściowego.

Co to jest Counter w MapReduce?

Licznik w MapReduce jest to mechanizm służący do gromadzenia i pomiaru informacje statystyczne o pracy mapreduce i wydarzeń. Liczniki śledzą różne statystyki pracy w MapReduce, takie jak liczba wykonanych operacji i postęp operacji. Liczniki są używane do diagnozowania problemów w MapReduce.

Liczniki Hadoop są podobne do umieszczania komunikatu dziennika w kodzie dla mapy lub zmniejszania. Te informacje mogą być przydatne do diagnozowania problemu w przetwarzaniu zadań MapReduce.

Zazwyczaj te liczniki w Hadoop są zdefiniowane w programie (mapowanie lub zmniejszanie) i są zwiększane podczas wykonywania, gdy wystąpi określone zdarzenie lub warunek (specyficzny dla tego licznika). Bardzo dobrym zastosowaniem liczników Hadoop jest śledzenie prawidłowych i nieprawidłowych rekordów z wejściowego zestawu danych.

Typy liczników MapReduce

Istnieją zasadniczo 2 typy liczników MapReduce

    1. Wbudowane liczniki Hadoop: istnieje kilka wbudowanych liczników Hadoop, które istnieją dla zadania. Poniżej znajdują się wbudowane grupy liczników
      • Liczniki zadań MapReduce - zbiera informacje dotyczące zadania (np. Liczbę rekordów wejściowych) w czasie jego wykonywania.
      • FileSystem Counters - zbiera informacje, takie jak liczba bajtów odczytanych lub zapisanych przez zadanie
      • FileInputFormat Counters - zbiera informacje o liczbie bajtów odczytanych przez FileInputFormat
      • FileOutputFormat Counters - zbiera informacje o liczbie bajtów zapisanych przez FileOutputFormat
      • Liczniki zadań - te liczniki są używane przez JobTracker. Gromadzone przez nich statystyki obejmują np. Liczbę uruchomionych zadań na zlecenie.
    2. Liczniki zdefiniowane przez użytkownika

Oprócz wbudowanych liczników, użytkownik może definiować własne liczniki, korzystając z podobnych funkcjonalności udostępnionych przez języki programowania. Na przykład w Javie „wyliczenia” służą do definiowania liczników zdefiniowanych przez użytkownika.

Przykład liczników

Przykład MapClass z Counters do zliczania liczby brakujących i nieprawidłowych wartości. Plik danych wejściowych używany w tym samouczku Nasz zestaw danych wejściowych to plik CSV 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"));}}}

Powyższy fragment kodu przedstawia przykładową implementację liczników w Hadoop Map Reduce.

Tutaj SalesCounters jest licznikiem zdefiniowanym za pomocą „enum” . Służy do liczenia rekordów wejściowych MISSING i INVALID .

Jeśli we fragmencie kodu pole „kraj” ma zerową długość, to brakuje jego wartości, a zatem odpowiedni licznik SalesCounters.MISSING jest zwiększany.

Następnie, jeśli pole „sprzedaż” zaczyna się od „, to rekord jest uważany za NIEPRAWIDŁOWY. Wskazuje na to rosnący licznik SalesCounters.INVALID.