Jak dane są dzielone w Hadoop

Czy Hadoop dzieli dane na podstawie liczby maperów ustawionych w programie? Oznacza to, że mając zestaw danych o rozmiarze 500MB, jeśli liczba maperów wynosi 200 (zakładając, że klaster Hadoop pozwala na 200 maperów jednocześnie), czy każdy maper ma 2,5 MB danych?

Poza tym, czy wszystkie mapery działają jednocześnie, czy niektóre mogą być uruchamiane seryjnie?

Author: H.Z., 2013-07-04

5 answers

Właśnie uruchomiłem przykładowy program MR na podstawie Twojego pytania i oto moje znalezisko

Input: plik mniejszy niż rozmiar bloku.

Case 1: Number of mapper =1 Result : 1 map task launched. Inputsplit rozmiar dla każdego mapera(w tym przypadku tylko jednego) jest taki sam jak plik wejściowy rozmiar.

Przypadek 2: Liczba maperów = 5 wynik: 5 uruchomionych zadań mapowych. Rozmiar Inputsplit dla każdego mapera jest jedną piątą rozmiaru pliku wejściowego.

Przypadek 3: Liczba maperów = 10 Wynik: uruchomiono 10 zadań na mapie. Rozmiar Inputsplit dla każdego mapera to jedna dziesiąta wielkości pliku wejściowego.

Więc na podstawie powyższego, dla pliku mniejszego niż rozmiar bloku,

Podziel rozmiar = Całkowity Rozmiar pliku wejściowego / liczba uruchomionych zadań mapy.

Uwaga: Należy jednak pamiętać, że nie. o zadaniu mapy decyduje się na podstawie podziałów wejściowych.

 0
Author: Arijit Banerjee,
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
2015-04-24 08:03:25

Jest odwrotnie. Liczba maperów jest ustalana na podstawie liczby podziałów. W rzeczywistości jest to zadanie InputFormat, którego używasz, do tworzenia podziałów. Nie masz pojęcia o liczbie maperów, dopóki nie zostanie określona liczba podziałów. I nie zawsze jest tak, że podziały będą tworzone na podstawie rozmiaru bloku HDFS. To całkowicie zależy od logiki wewnątrz metody getSplits() twojego InputFormat.

Aby lepiej to zrozumieć, Załóżmy, że przetwarzasz przechowywane dane w MySQL za pomocą Mr. ponieważ nie ma koncepcji bloków w tym przypadku, teoria, że podziały są zawsze tworzone na podstawie bloku HDFS zawodzi. Prawda? A co z tworzeniem splitów? Jedną z możliwości jest tworzenie podziałów na podstawie zakresów wierszy w tabeli MySQL (i to właśnie robi DBInputFormat, Format wejściowy do odczytu danych z relacyjnej bazy danych). Załóżmy, że masz 100 rzędów. Wtedy możesz mieć 5 po 20 rzędów.

Jest tylko dla Inputformatów opartych na FileInputFormat (an InputFormat do obsługi danych przechowywanych w plikach), że podziały są tworzone na podstawie całkowitego rozmiaru, w bajtach, plików wejściowych. Jednak rozmiar bloku systemu plików wejściowych jest traktowany jako górna granica dla podziałów wejściowych. Jeśli Masz plik mniejszy niż rozmiar bloku HDFS, otrzymasz tylko 1 maper dla tego pliku. Jeśli chcesz mieć inne zachowanie, możesz użyć mapred./ min.split.rozmiar. Ale to znowu zależy wyłącznie od getSplits () Twojego InputFormat.

Istnieje podstawowa różnica między MR split i HDFS block i ludzie często się tym mylą. Blok jest fizycznym kawałkiem danych, podczas gdy split jest tylko logicznym kawałkiem, który zostanie przekazany maperowi. Podział nie zawiera danych wejściowych, jest tylko odniesieniem do danych. Więc co to jest podział? Podział zasadniczo składa się z dwóch rzeczy: length in bytes i zestawu storage locations, które są po prostu łańcuchami nazw hostów.

Wracając do twojego pytania. Hadoop pozwala na znacznie więcej niż 200 maperów. Powiedziawszy, że, nie ma sensu mieć 200 maperów dla zaledwie 500MB danych. Zawsze pamiętaj, że kiedy mówisz o Hadoop, masz do czynienia z bardzo dużymi danymi. Wysyłanie tylko 2,5 MB danych do każdego mapera byłoby przesadą. I tak, jeśli nie ma wolnych slotów CPU, niektórzy maperzy mogą działać po zakończeniu obecnych maperów. Ramy MR są jednak bardzo inteligentne i starają się unikać tego rodzaju sytuacji. Jeśli maszyna, na której są przetwarzane dane, nie ma wolnego procesora sloty, dane zostaną przeniesione do pobliskiego węzła, gdzie dostępne są wolne sloty i zostaną przetworzone.

HTH

 24
Author: Tariq,
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-12-15 13:08:31

Gdy wprowadzasz dane do systemu plików Hadoop Distributed File System (HDFS), Hadoop dzieli dane w zależności od rozmiaru bloku (domyślnie 64 MB) i rozprowadza je po klastrze. Więc twoje 500 MB zostanie podzielone na 8 bloków. Nie zależy od liczby maperów, jest własnością HDFS.

Teraz, kiedy uruchamiasz zadanie MapReduce, Hadoop domyślnie przypisuje 1 mapera na blok, więc jeśli masz 8 bloków, hadoop uruchomi 8 zadań map.

Jeśli jednak podasz liczbę 200), wtedy Rozmiar danych przetwarzanych przez każdą mapę zależy od rozkładu bloków i na którym węźle jest uruchomiony Twój maper. To, ilu maperów faktycznie przetwarza Twoje dane, zależy od Twojego podziału danych wejściowych.

W Twoim przypadku, zakładając 500 MB podzielonych na 8 bloków, nawet jeśli podasz 200 maperów, nie wszystkie z nich będą przetwarzać dane, nawet jeśli zostaną zainicjowane.

 6
Author: Chaos,
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-05 16:07:30

Jeśli maper 200 działa dla 500MB danych, to należy sprawdzić każdy Rozmiar pliku. Jeśli ten Rozmiar pliku jest mniejszy niż rozmiar bloku (64 mb), to uruchomi zadanie map dla każdego pliku.

Zwykle łączymy mniejsze pliki w dużym pliku (rozmiar większy niż rozmiar bloku)

 0
Author: hjamali52,
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-09-20 10:09:55

Nie. Nie jest.

Liczba maperów dla zadania jest określona przez Framework.

[[0]} spójrz na Apache MapReduce tutorial link.

Ile Map?

Liczba map jest zwykle zależna od całkowitego rozmiaru wejść, czyli całkowitej liczby bloków plików wejściowych.

Odpowiedni poziom równoległości dla map wydaje się być około 10-100 map na węzeł, chociaż został ustawiony do 300 map dla bardzo zadania mapy cpu-light. Konfiguracja zadań zajmuje trochę czasu, więc najlepiej, jeśli wykonanie map zajmie co najmniej minutę.

Tak więc, jeśli spodziewasz się 10TB danych wejściowych i masz rozmiar bloku 128MB, skończysz z 82 000 map, chyba że konfiguracja.set(MRJobConfig.NUM_MAPS, int) (który dostarcza tylko podpowiedzi do frameworka) jest używany do ustawiania go jeszcze wyżej .

Wracając do Twoich zapytań:

Czyli mając zbiór danych o rozmiarze 500MB, jeśli liczba mapperów jest 200 (zakładając, że klaster Hadoop pozwala na 200 maperów jednocześnie), czy każdy maper ma 2,5 MB danych?

Jeśli rozmiar bloku DFS i podzielonego wejścia wynosi 128 MB, to500 MB plik wymaga 4 Mappers do przetwarzania danych. Framework uruchomi 4 zadania Mapera w powyższym przypadku.

Czy wszystkie mapery działają jednocześnie, czy niektóre mogą być uruchamiane seryjnie?

Wszystkie Mapery działają jednocześnie. Ale Reduktor będzie działać tylko wtedy, gdy dane wyjściowe wszystkich maperów zostały skopiowane i dostępne dla nich.

 0
Author: Ravindra babu,
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-02-01 12:22:00