2012-04-29 14 views
5

Mam program "tylko mapa" (bez fazy redukcji). Rozmiar pliku wejściowego jest wystarczająco duży, aby utworzyć 7 zadań mapowych i zweryfikowałem to przez sprawdzenie uzyskanego wyniku (część-000 na part006). Teraz mój klaster ma 8 węzłów, każdy z 8 rdzeniami i 8 GB pamięci oraz współużytkowany system plików hostowany w węźle głównym.Jak zaplanować zadania mapy Hadoop w wielordzeniowym klastrze z 8 węzłami?

Moje pytanie jest następujące: mogę wybrać pomiędzy uruchomieniem wszystkich 7 zadań mapowych w jednym węźle lub uruchomieniem 7 zadań map w 7 różnych węzłach podrzędnych (1 zadanie na węzeł). Jeśli mogę to zrobić, potrzebuję jakiej zmiany w moim kodzie i pliku konfiguracyjnym.

Próbowałem ustawić parametr "mapred.tasktracker.map.tasks.maximum" na 1 i 7 tylko w moim kodzie, ale nie znalazłem żadnej znaczącej różnicy czasu. W moim pliku konfiguracyjnym jest ustawiony jako 1.

Odpowiedz

4

"mapred.tasktracker.map.tasks.maximum" dotyczy liczby zadań map, które należy uruchomić na każdym węźle, a nie liczby węzłów, które mają być używane dla każdego zadania mapy. W architekturze Hadoop jest 1 tasktracker dla każdego węzła (slave) i 1 job tracker na węźle głównym (master). Jeśli więc ustawisz właściwość mapred.tasktracker.map.tasks.maximum, zmieni ona tylko liczbę zadań map do wykonania na węzeł. Zakres "mapred.tasktracker.map.tasks.maximum" wynosi od 1/2*cores/node do 2*cores/node

liczby zadań map, które mają ogólny powinien być ustawiony za pomocą setNumMapTasks(int)

1

Teraz moja klaster ma 8 węzłów, każdy z 8 rdzeniami i 8 GB pamięci i współużytkowany system plików hostowany w węźle głównym.

Kiedy mówisz, że wspólny system plików hostuje węzeł główny, masz na myśli dane hostowane na HDFS lub na jakimś systemie plików podobnym do NFS zamontowanym w każdym węźle? Przypuszczam, że masz na myśli HDFS, ale jeśli używasz NFS lub czegoś podobnego, to powinieneś spodziewać się większej przepustowości dzięki HDFS (chcesz przenieść kod przetwarzania do danych, zamiast przenosić dane do maszyny przetwarzającej)

Jak duży jest twój plik wejściowy i jaki jest jego rozmiar, format pliku (tekst, kolejność itp.), Współczynnik replikacji i metoda kompresji?

W zależności od odpowiedzi na powyższe pytania, w konfiguracji 8x8, możesz uzyskać lepszą przepustowość, jeśli zmniejszysz rozmiar podziału mapy i zwiększysz współczynnik replikacji.

1

Zdecydowanie powinieneś uruchomić 7 zadań mapy na 7 różnych węzłach, jeśli to możliwe. Całą zaletą MapReduce jest możliwość równoległego przetwarzania komputerów, aby każde zadanie działało tak wydajnie, jak to tylko możliwe. Jeśli wykonałeś 7 zadań mapowania na jednym węźle, każde zadanie byłoby konkurencyjne dla tych samych zasobów (RAM, CPU, IO) w tym pojedynczym węźle.

Standardowe ustawienie mapred.tasktracker.map.tasks.maximum jest na rdzeń więc można zmienić ustawienia do 8.

Dodatkowo, jeśli masz pracę Mapa tylko będziemy chcieli dobry powód, aby ustawić liczbę mappers do pewnej liczby. Ustawienie liczby zadań na mapie jest tylko "wskazówką" dla jobtracker'a na temat liczby map do uruchomienia, ale ostatecznie decyduje o tym jobtracker w oparciu o sposób przechowywania danych wejściowych przez DFS. This wiki has more details.

Użytkownik chce jednak kontrolować liczbę zadań zmniejszania w niektórych przypadkach. Na przykład, jeśli chcę mieć listę posortowanych liczb, chciałbym, aby wszystkie moje dane przeszły przez jeden reduktor.

Powiązane problemy