Podziel rozmiar vs rozmiar bloku w Hadoop

Jaka jest zależność między rozmiarem podzielonym a rozmiarem bloku w Hadoop? Jak przeczytałem w to , rozmiar dzielenia musi być n-krotnym rozmiarem bloku (n jest liczbą całkowitą i N > 0), czy to prawda? Czy istnieje jakaś konieczność w związku między rozmiarem podzielonym a rozmiarem bloku?

Author: duong_dajgja, 2015-05-30

3 answers

W architekturze HDFS istnieje pojęcie bloków. Typowy rozmiar bloku używany przez HDFS to 64 MB. Gdy umieścimy duży plik w HDFS to podzielimy go na kawałki 64 MB (w oparciu o domyślną konfigurację bloków), Załóżmy, że masz plik 1GB i chcesz umieścić ten plik w HDFS, wtedy będzie 1GB/64MB = 16 split / blocks i te bloki będą rozprowadzane po Datanodach. Te bloki / fragmenty będą znajdować się na innym Datanodzie bazującym na Twoim klastrze konfiguracja.

Dzielenie danych odbywa się na podstawie przesunięć plików. Celem dzielenia pliku i przechowywania go na różne bloki, jest równoległe przetwarzanie i awaria danych.

Różnica między rozmiarem bloku a rozmiarem podzielonym.

Split jest logicznym podziałem danych, zasadniczo używanym podczas przetwarzania danych przy użyciu programu Map/Reduce lub innych technik przetwarzania danych w ekosystemie Hadoop. Podziel rozmiar jest wartością zdefiniowaną przez użytkownika i możesz wybrać swój własny podziel rozmiar na podstawie ilość danych użytkownika (ilość danych przetwarzanych przez użytkownika).

Split jest w zasadzie używany do kontrolowania liczby maperów w programie Map/Reduce. Jeśli nie zdefiniowano żadnego rozmiaru podziału wejściowego w programie Map/Reduce, domyślny podział bloków HDFS będzie uważany za podział wejściowy.

Przykład:

Załóżmy, że masz plik 100MB, a domyślna konfiguracja bloku HDFS to 64MB, wtedy zostanie on podzielony na 2 bloki i zajmie 2 bloki. Teraz masz program Map/Reduce do przetworzenia tego dane ale nie podałeś żadnego podziału wejściowego wtedy na podstawie liczby bloków (2 bloki) podział wejściowy będzie brany pod uwagę dla przetwarzania Map/Reduce i 2 maper zostanie przypisany do tego zadania.

Ale załóżmy, że określiłeś rozmiar podziału (powiedzmy 100MB) w programie Map/Reduce, wtedy oba bloki(2 bloki) będą traktowane jako pojedynczy podział dla przetwarzania Map/Reduce, a 1 maper zostanie przypisany do tego zadania.

Załóżmy, że podałeś rozmiar podziału (powiedzmy 25MB) w Twój program Map/Reduce następnie zostanie podzielony na 4 wejścia dla programu Map/Reduce, a 4 Mapper zostanie przypisany do zadania.

Wniosek:

  1. Split jest logicznym podziałem danych wejściowych, podczas gdy block jest fizycznym podziałem danych.
  2. domyślny rozmiar bloku HDFS jest domyślnym rozmiarem podzielonym, jeśli nie podano podziału wejściowego.
  3. Split jest zdefiniowany przez użytkownika i użytkownik może kontrolować rozmiar split w swoim programie Map/Reduce.
  4. jeden podział może być odwzorowany na wiele bloków i może być wiele podziału jednego bloku.
  5. liczba zadań map (Mapper) jest równa liczbie podziałów.
 69
Author: Sandeep Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-31 05:36:01
  • Załóżmy, że mamy plik 400MB z 4 rekordami(e. G : plik csv 400MB i ma 4 wiersze, po 100MB każdy)

Tutaj wpisz opis obrazka

  • Jeśli rozmiar bloku HDFS jest skonfigurowany jako 128MB, to 4 rekordy nie będą równomiernie rozdzielane między bloki. To będzie wyglądało tak.

Tutaj wpisz opis obrazka

  • Blok 1 zawiera cały pierwszy rekord i 28MB fragmentu drugi rekord.
  • Jeśli maper ma być uruchomiony na Bloku 1 , maper nie może go przetworzyć, ponieważ nie będzie miał całego drugiego rekordu.

  • Jest to dokładnie problem, który input splits rozwiązuje. Input splits respektuje logiczne granice rekordów.

  • Przyjmijmy, że rozmiar input split wynosi 200MB

Tutaj wpisz opis obrazka

  • Dlatego input split 1 powinien mieć oba rekord 1 i rekord 2. I input split 2 nie rozpocznie się od rekordu 2, ponieważ rekord 2 został przypisany do Input split 1. Input split 2 rozpocznie się od rekordu 3.

  • Dlatego podział danych wejściowych jest tylko logicznym fragmentem danych. Wskazuje miejsca rozpoczęcia i zakończenia w blokach.

  • Jeśli rozmiar podziału wejściowego jest N razy większy od rozmiaru bloku, to podział wejściowy może zmieścić wiele bloków, a tym samym mniejszą liczbę maperów potrzebnych dla całego pracy, a tym samym mniej paralelizmu. (Liczba maperów jest liczbą podziałów wejściowych)

  • Input split size = rozmiar bloku jest idealną konfiguracją.

Mam nadzieję, że to pomoże.
 11
Author: tharindu_DG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-11 04:50:02

Tworzenie podziału zależy od używanego formatu wejściowego. Poniższy diagram wyjaśnia, w jaki sposób Metoda Getsplits() FileInputFormat decyduje o podziale dla dwóch różnych plików.
zwróć uwagę na rolę, jaką odgrywa Splitu (1.1).
Tutaj wpisz opis obrazka

Odpowiednie źródło Javy, które dokonuje podziału jest:

Tutaj wpisz opis obrazka
Metoda computeSplitSize() powyżej rozszerza się do Max (minSize, min (maxSize, blockSize)), gdzie Rozmiar min / max może być skonfigurowany przez ustawienie mapreduce.wejście.fileinputformat.split.minsize / maxsize

 1
Author: Avinash Ganta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-20 05:20:29