Ustawianie liczby zadań na mapie i zmniejszanie zadań

Aktualnie prowadzę zadanie poprawiłem liczbę zadań map na 20 ale i otrzymałem wyższą liczbę. Ustawiłem również zadanie reduce na zero, ale wciąż otrzymuję liczbę inną niż zero. Całkowity czas wykonania zadania MapReduce również nie jest wyświetlany. Czy ktoś może mi powiedzieć, co robię źle? Używam tego polecenia

hadoop jar Test_Parallel_for.jar Test_Parallel_for Matrix/test4.txt Result 3 \ -D mapred.map.tasks = 20 \ -D mapred.reduce.tasks =0

Wyjście:

11/07/30 19:48:56 INFO mapred.JobClient: Job complete: job_201107291018_0164
11/07/30 19:48:56 INFO mapred.JobClient: Counters: 18
11/07/30 19:48:56 INFO mapred.JobClient:   Job Counters 
11/07/30 19:48:56 INFO mapred.JobClient:     Launched reduce tasks=13
11/07/30 19:48:56 INFO mapred.JobClient:     Rack-local map tasks=12
11/07/30 19:48:56 INFO mapred.JobClient:     Launched map tasks=24
11/07/30 19:48:56 INFO mapred.JobClient:     Data-local map tasks=12
11/07/30 19:48:56 INFO mapred.JobClient:   FileSystemCounters
11/07/30 19:48:56 INFO mapred.JobClient:     FILE_BYTES_READ=4020792636
11/07/30 19:48:56 INFO mapred.JobClient:     HDFS_BYTES_READ=1556534680
11/07/30 19:48:56 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=6026699058
11/07/30 19:48:56 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=1928893942
11/07/30 19:48:56 INFO mapred.JobClient:   Map-Reduce Framework
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce input groups=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Combine output records=0
11/07/30 19:48:56 INFO mapred.JobClient:     Map input records=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce shuffle bytes=1974162269
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce output records=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Spilled Records=120000000
11/07/30 19:48:56 INFO mapred.JobClient:     Map output bytes=1928893942
11/07/30 19:48:56 INFO mapred.JobClient:     Combine input records=0
11/07/30 19:48:56 INFO mapred.JobClient:     Map output records=40000000
11/07/30 19:48:56 INFO mapred.JobClient:     Reduce input records=40000000
[hcrc1425n30]s0907855: 
Author: ZeissS, 2011-07-30

15 answers

Liczba zadań map dla danego zadania zależy od liczby podziałów wejściowych, a nie od mapred.Mapa.parametr zadania. Dla każdego podziału wejściowego wyświetlane jest zadanie mapy. Tak więc, w czasie trwania zadania mapreduce liczba zadań map jest równa liczbie podziałów wejściowych. mapred.Mapa.zadania to tylko podpowiedź do InputFormat dla liczby map.

W twoim przykładzie Hadoop ustalił, że są 24 wejścia i pojawią się łącznie 24 zadania na mapie. Ale możesz kontrolować, ile zadania mapy mogą być wykonywane równolegle przez każdy z trackerów zadań.

Również usunięcie spacji po -D może rozwiązać problem reduce.

Aby uzyskać więcej informacji na temat liczby map i zmniejszenia zadań, spójrz na poniższy adres url

Http://wiki.apache.org/hadoop/HowManyMapsAndReduces

 55
Author: Praveen Sripati,
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-03-05 07:01:56

Jak wspomina Praveen powyżej, podczas korzystania z podstawowych klas FileInputFormat jest tylko liczba podziałów wejściowych, które składają się na dane. Liczba reduktorów jest kontrolowana przez mapred.reduce.tasks określona w sposób, w jaki ją posiadasz: -D mapred.reduce.tasks=10 określiłaby 10 reduktorów. Zauważ, że spacja po -D jest wymagana ; jeśli pominiesz spację, właściwość konfiguracyjna jest przekazywana do odpowiedniego JVM, a nie do Hadoop.

Czy określasz 0, ponieważ nie ma pracy redukcyjnej do wykonania? W w takim przypadku, jeśli masz problemy z parametrem run-time, możesz również ustawić wartość bezpośrednio w kodzie. W przypadku wystąpienia JobConf job, wywołanie

job.setNumReduceTasks(0);

Wewnątrz, powiedzmy, Twojej implementacji Tool.run. To powinno produkować dane wyjściowe bezpośrednio z maperów. Jeśli Twoje zadanie nie generuje żadnych danych wyjściowych (ponieważ używasz frameworka tylko do efektów ubocznych, takich jak Połączenia sieciowe lub przetwarzanie obrazów, lub jeśli wyniki są w całości rozliczane w licznikach), możesz wyłączyć wyjście również wywołując

job.setOutputFormat(NullOutputFormat.class);
 19
Author: Matt Tenenbaum,
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
2012-07-06 01:12:43

Ważne jest, aby pamiętać, że Framework MapReduce w Hadoop pozwala nam tylko

Zaproponuj liczbę zadań na mapie dla zadania

Które, jak wskazano powyżej, odpowiadają liczbie podziałów wejściowych dla zadania. W przeciwieństwie do jego zachowania dla liczby reduktorów (które jest bezpośrednio związane z liczbą plików wyjściowych przez zadanie MapReduce), gdzie możemy

Żądać , aby dostarczał N reduktorów.

 9
Author: Engineiro,
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-04-15 21:34:21

Aby wyjaśnić to na przykładzie:

Załóżmy, że rozmiar pliku wejściowego hadoop wynosi 2 GB i ustawiłeś rozmiar bloku jako 64 MB, więc 32 zadania maperów są ustawione do uruchomienia, podczas gdy każdy maper będzie przetwarzał 64 MB bloku, aby zakończyć zadanie Mapera Twojego zadania Hadoop.

= = > Liczba uruchamianych maperów jest całkowicie zależna od 1) rozmiaru pliku i 2) rozmiaru bloku

Załóżmy, że uruchomiłeś hadoop na klastrze o rozmiarze 4: Załóżmy, że ustawiłeś mapred.Mapa.zadania i mapred.zmniejsz.parametry zadań w Twoim konf plik do węzłów w następujący sposób:

Node 1: mapred.map.tasks = 4 and mapred.reduce.tasks = 4
Node 2: mapred.map.tasks = 2 and mapred.reduce.tasks = 2
Node 3: mapred.map.tasks = 4 and mapred.reduce.tasks = 4
Node 4: mapred.map.tasks = 1 and mapred.reduce.tasks = 1

Załóżmy, że ustawiłeś powyższe paramtery dla 4 węzłów w tym klastrze. Jeśli zauważysz, że węzeł 2 ustawił odpowiednio tylko 2 i 2, ponieważ zasoby przetwarzania węzła 2 mogą być mniejsze, np. (2 procesory, 2 rdzenie), a węzeł 4 jest nawet ustawiony niżej, odpowiednio, tylko 1 i 1, może to być spowodowane zasobami przetwarzania na tym węźle jest 1 Procesor, 2 rdzenie, więc nie można uruchomić więcej niż 1 zadanie mapera i 1 reduktora.

Więc po uruchomieniu zadania Node 1, Node 2, Node 3, Node 4 są skonfigurowane do pracy na max. ogółem (4+2+4+1)11 zadania mapera jednocześnie spośród 42 zadań mapera, które muszą zostać ukończone przez zadanie. Po wykonaniu przez każdy węzeł zadań mapowych, zajmie on pozostałe zadania mapera pozostawione w 42 zadaniach mapera.

Teraz przechodzimy do reduktorów, jak ustawisz mapred.zmniejsz.tasks = 0, więc otrzymujemy tylko wyjście mappera w 42 plikach (1 plik dla każdego zadania mappera) i bez wyjścia reduktora.

 7
Author: praveenak,
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-24 07:28:47

W nowszej wersji Hadoop, istnieje znacznie więcej ziarnistych mapreduce.job.running.map.limit i mapreduce.job.running.reduce.limit, które pozwalają ustawić liczbę maperów i reduktorów niezależnie od rozmiaru podziału plików hdfs. Jest to pomocne, jeśli jesteś pod przymusem, aby nie zabierać dużych zasobów w klastrze.

JIRA

 2
Author: Joel,
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-08-20 16:04:31

Z Twojego dziennika zrozumiałem, że masz 12 plików wejściowych, ponieważ generowanych jest 12 map lokalnych. Lokalne mapy Rack są generowane dla tego samego pliku, jeśli niektóre bloki tego pliku znajdują się w innym węźle danych. Ile macie węzłów danych?

 1
Author: Sandeep,
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
2012-02-23 07:34:20

W twoim przykładzie części -D nie są pobierane:

hadoop jar Test_Parallel_for.jar Test_Parallel_for Matrix/test4.txt Result 3 \ -D mapred.map.tasks = 20 \ -D mapred.reduce.tasks =0

Powinny pojawić się po części classname w następujący sposób:

hadoop jar Test_Parallel_for.jar Test_Parallel_for -Dmapred.map.tasks=20 -Dmapred.reduce.tasks=0 Matrix/test4.txt Result 3

Spacja po -D jest jednak dozwolona.

Zauważ również, że zmiana liczby maperów jest prawdopodobnie złym pomysłem, o czym inni ludzie tutaj wspominali.

 1
Author: Bert Hekman,
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-09-02 12:40:54

Liczba zadań map jest bezpośrednio określona przez liczbę części, które zostały podzielone. Rozmiar fragmentu danych (tj. rozmiar bloku HDFS) jest kontrolowany i może być ustawiony dla pojedynczego pliku, zestawu plików, katalogu(-ów). Tak więc ustawienie określonej liczby zadań map w zadaniu jest możliwe, ale wymaga ustawienia odpowiedniego rozmiaru bloku HDFS dla danych wejściowych zadania. mapred.Mapa.zadania mogą być również użyte do tego celu, ale tylko wtedy, gdy podana wartość jest większa niż liczba podziałów dla wejścia zadania data.

Kontrolowanie liczby reduktorów poprzez mapred.zmniejsz.zadania {[2] } jest poprawne. Jednak ustawienie go na zero jest raczej szczególnym przypadkiem: wyjście zadania jest połączeniem wyjść maperów (niezasortowanych). W odpowiedzi Matta widać więcej sposobów na ustawienie liczby reduktorów.

 1
Author: Denis,
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-02-21 13:06:45

Jednym ze sposobów na zwiększenie liczby maperów jest podanie danych wejściowych w postaci podzielonych plików[można użyć polecenia Split Linuksa]. Hadoop streaming zwykle przypisuje, że wielu maperów, ponieważ istnieją pliki wejściowe [jeśli istnieje duża liczba plików], jeśli nie będzie próbował podzielić dane wejściowe na równe części.

 0
Author: viper,
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-08-13 17:05:48
  • Użyj -d property=value zamiast-d property = value (wyeliminuj dodatkowe spacje). Tak więc-d mapred.zmniejsz.tasks=value would work dobrze.

  • Ustawienie liczby zadań na mapie nie zawsze odzwierciedla posiadaną wartość Ustaw, ponieważ zależy to od rozmiaru podzielonego i zastosowanego formatu wejścia.

  • Ustawienie liczby redukcji zdecydowanie nadpisze liczbę redukuje ustawienia po stronie klastra/klienta.

 0
Author: Shailvi,
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-03-28 20:41:12

Zgadzam się, że zadanie number mapp zależy od podziału wejściowego, ale w niektórych scenariuszach widziałem jego trochę inny

Case-1 stworzyłem proste zadanie mapp tylko on tworzy 2 duplikaty z pliku put (dane ia same) Komenda, którą podałem poniżej

Bin / hadoop jar contrib / streaming / hadoop-streaming-1.2.1.jar-d mapred.zmniejsz.tasks=0-input / home / sample.csv-output / home / sample_csv112.txt-mapper /home/amitav/workpython/readcsv.py

Case-2 więc zrestartowałem zadanie mapp do 1 wyjście wyszło poprawnie z jednym plikiem wyjściowym, ale jeden reduktor również znalazł się na ekranie interfejsu użytkownika, chociaż ograniczyłem pracę reduktora. Polecenie jest podane poniżej.

Bin / hadoop jar contrib / streaming / hadoop-streaming-1.2.1.jar-d mapred.Mapa.zadania = 1 mapred.zmniejsz.tasks=0-input / home / sample.csv-output / home / sample_csv115.txt-mapper /home/amitav/workpython/readcsv.py

 0
Author: amitav Swain,
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-10-04 22:12:36

Pierwsza część już została wysłuchana, " tylko sugestia" W drugiej części również odpowiedź: "usuń dodatkowe spacje wokół =" Jeśli oba nie zadziałały, czy jesteś pewien, że zaimplementowałeś ToolRunner ?

 0
Author: killjoy,
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-08 18:08:09

Liczba zadań map zależy od rozmiaru pliku, jeśli chcesz n liczby Map, podziel Rozmiar Pliku przez N w następujący sposób:

conf.set("mapred.max.split.size", "41943040"); // maximum split file size in bytes
conf.set("mapred.min.split.size", "20971520"); // minimum split file size in bytes
 0
Author: Victor,
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-03-28 21:50:40

Ludzie z tej teorii wygląda na to, że nie możemy uruchomić map reduce jobs równolegle.

Powiedzmy, że skonfigurowałem łącznie 5 zadań mapera do działania na danym węźle.Chcę również użyć tego w taki sposób, że job1 może używać 3 maperów, a JOB2 może używać 2 maperów, aby job mógł działać równolegle. Ale powyższe właściwości są ignorowane, a następnie jak można wykonywać zadania równolegle.

 -2
Author: user1927808,
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-29 10:29:10

Z tego co rozumiem czytając wyżej, to zależy od plików wejściowych. Jeśli pliki wejściowe są 100 oznacza - Hadoop utworzy 100 zadań map. Zależy to jednak od konfiguracji węzła, od tego, ile można uruchomić w danym momencie. Jeśli węzeł jest skonfigurowany do uruchamiania 10 zadań mapowych - tylko 10 zadań mapowych będzie działać równolegle, wybierając 10 różnych plików wejściowych ze 100 dostępnych. Zadania mapy będą nadal pobierać więcej plików po zakończeniu przetwarzania pliku.

 -2
Author: Sri,
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-02-12 11:58:24