Hadoop input split size vs block size

Przechodzę przez hadoop definitive guide, gdzie jasno wyjaśnia o podziałach wejściowych. It goes like

Input splits nie zawiera rzeczywistych danych, a raczej przechowuje lokalizacje danych na HDFS

I

Zazwyczaj rozmiar podziału wejściowego jest taki sam jak rozmiar bloku

1) Załóżmy, że blok 64MB znajduje się na węźle A i jest replikowany między 2 innymi węzłami (B, C), a rozmiar podziału wejściowego dla programu Map-reduce wynosi 64MB, czy to split ma tylko lokalizację węzła A? Czy będzie miał lokalizacje dla wszystkich trzech węzłów A, b,C?

2) ponieważ dane są lokalne dla wszystkich trzech węzłów, w jaki sposób framework decyduje (wybiera) maskę maptask do uruchomienia na danym węźle?

3) Jak to jest obsługiwane, jeśli rozmiar podziału wejściowego jest większy lub mniejszy niż rozmiar bloku?

Author: tharindu_DG, 2013-07-18

7 answers

  • Odpowiedź od @ user1668782 jest doskonałym wyjaśnieniem pytania i postaram się podać graficzny obraz tego pytania.

  • Załóżmy, że mamy Plik 400MB z 4 rekordami(e. G : plik csv o pojemności 400MB i ma 4 wiersze po 100MB każdy)

Tutaj wpisz opis obrazka

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

Tutaj wpisz opis obrazka

  • Blok 1 zawiera cały pierwszy rekord i 28MB fragmentu drugiego rekordu.
  • jeśli maper ma być uruchomiony nabloku 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 input split rozmiar to 200MB

Tutaj wpisz opis obrazka

  • Dlatego input split 1 powinien mieć zarówno rekord 1, jak 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.

Mam nadzieję, że to pomoże.
 19
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:27

Blok jest fizyczną reprezentacją danych. Split jest logiczną reprezentacją danych obecnych w bloku.

Rozmiar bloku i dzielenia można zmienić we właściwościach.

Map odczytuje dane z bloku przez podziały tzn. split działa jako broker pomiędzy blokiem a maperem.

Rozważmy dwa bloki:

Blok 1

Aa bb CC dd EE ff gg Hh ii jj

Blok 2

Ww ee yy uu oo ii oo pp Kk ll NN

Teraz Mapa czyta block 1 do aa do JJ i nie wie jak odczytac block 2 tzn. block nie wie jak przetworzyc inny blok informacji. Oto podział, który utworzy logiczne grupowanie bloku 1 i bloku 2 jako pojedynczy blok, a następnie utworzy offset (klucz) i linię (wartość) za pomocą inputformat i czytnika rekordów i wyśle mapę do dalszego przetwarzania.

Jeśli Twój zasób jest ograniczony i chcesz ograniczyć liczbę map, możesz zwiększyć rozmiar podziału. Na przykład: Jeśli mamy 640 MB z 10 bloki tzn. każdy blok 64 MB i zasób jest ograniczony wtedy można wymienić rozmiar podziału jako 128 MB następnie powstaje logiczne grupowanie 128 MB i tylko 5 map zostanie wykonanych o rozmiarze 128 MB.

Jeśli określimy rozmiar split false, to cały plik utworzy jeden podział wejściowy i będzie przetwarzany przez jedną mapę, co zajmuje więcej czasu, gdy plik jest duży.

 20
Author: VG P,
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
2014-08-20 19:58:45

Podziały wejściowe są logicznym podziałem Twoich rekordów, podczas gdy bloki HDFS są fizycznym podziałem danych wejściowych. Jest niezwykle wydajny, gdy są takie same, ale w praktyce nigdy nie jest idealnie dopasowany. Zapisy mogą przekraczać granice bloków. Hadoop gwarantuje przetwarzanie wszystkich rekordów . Maszyna przetwarzająca dany split może pobrać fragment rekordu z bloku innego niż jego" główny " blok i który może znajdować się zdalnie. Koszt komunikacji przy pobieraniu rekordu fragment jest nieistotny, ponieważ zdarza się stosunkowo rzadko.

 4
Author: SAIKAT MOHAJAN,
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
2014-01-08 05:51:24

Do 1) i 2): nie jestem pewien w 100%, ale jeśli zadanie nie może zostać ukończone-z jakiegokolwiek powodu, w tym jeśli coś jest nie tak z podziałem wejściowym - wtedy jest ono zakończone, a inny uruchomiony w jego miejscu: więc każda maptask dostaje dokładnie jeden podział z informacją o pliku (możesz szybko stwierdzić, czy tak jest, debugując w lokalnym klastrze, aby zobaczyć, jakie informacje są przechowywane w obiekcie input split: wydaje mi się, że pamiętam, że to tylko jedna lokalizacja).

Do 3): Jeśli format pliku jest splittable, a następnie Hadoop spróbuje wyciąć plik do rozmiaru" inputSplit"; jeśli nie, to jest to jedno zadanie na plik, niezależnie od rozmiaru pliku. Jeśli zmienisz wartość minimum-input-split, możesz zapobiec powstawaniu zbyt wielu zadań mappera, jeśli każdy z Twoich plików wejściowych jest podzielony na rozmiar bloku, ale możesz tylko połączyć wejścia, jeśli zrobisz coś magicznego z klasą combiner (myślę, że tak się nazywa).

 0
Author: davek,
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
2013-07-18 15:28:11

Siła szkieletu Hadoop to jego dane locality.So ilekroć klient żąda danych hdfs, framework zawsze sprawdza lokalizację, w której szuka Niewielkiego wykorzystania we / wy.

 0
Author: neeraj,
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
2014-05-30 13:56:48

Input splits są logicznymi jednostkami danych przekazywanymi do każdego mapera. Dane są dzielone na ważne rekordy. Podziały wejściowe zawierają adresy bloków i przesunięć bajtów.

Załóżmy, że masz plik tekstowy, który obejmuje 4 bloki.

Plik:

a b c D
e f g h
i j k L
m n O P

Bloki:

Block1: a b c D e
block2: f g H i j
block3: k L m n o
block4: p

Podział:

Split1: a b c d e F H
Split2: i j k l m N O P

Obserwuj podziały są w linii z granicami (rekordami) z pliku. Teraz każdy podział jest podawany maperowi.

Jeśli rozmiar podziału wejściowego jest mniejszy niż rozmiar bloku, w końcu użyjesz więcej no.mapperów na odwrót.

Mam nadzieję, że to pomoże.

 0
Author: RANJIT M,
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
2017-09-09 07:55:26

Rozmiar bloku HDFS jest dokładną liczbą, ale Rozmiar podziału wejściowego jest oparty na naszym logika danych, która może być nieco inna z ustawionym numerem

 0
Author: hadooper,
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-02-12 05:43:57