2013-03-01 14 views
24

W dokumencie Google MapReduce mają zadanie tworzenia kopii zapasowych, myślę, że to samo dzieje się z zadaniem spekulatywnym w Hadoop. W jaki sposób realizowane jest zadanie spekulacyjne? Kiedy uruchamiam zadanie spekulatywne, czy zadanie zaczyna się od początku jako starsze i wolniejsze, czy po prostu zaczyna się od miejsca, w którym osiągnięto starsze zadanie (jeśli tak, czy musi skopiować cały pośredni status i dane?)Wykonanie zadań spekulacyjnych Hadoop

+0

Dodanie na pytanie, jaki byłby listę powodów, jeśli były, aby wyłączyć całkowicie spekulatywny wykonywanie zadania w szerokim poziomie systemu? jakie korzyści zostały osiągnięte, gdy wyłączono spekulacyjne wykonanie. –

Odpowiedz

58

Jednym z problemów z systemem Hadoop jest to, że dzieląc zadania na wiele węzłów, możliwe jest, aby kilka wolnych węzłów ograniczyło stopę reszty programu.

Zadania mogą być wolne z różnych powodów, w tym degradacji sprzętu lub nieprawidłowej konfiguracji oprogramowania, ale przyczyny mogą być trudne do wykrycia, ponieważ zadania nadal kończą się pomyślnie, aczkolwiek po dłuższym czasie niż oczekiwano. Hadoop nie próbuje diagnozować i naprawiać wolno działających zadań; zamiast tego próbuje wykryć, kiedy zadanie działa wolniej niż oczekiwano i uruchamia inne, równoważne zadanie jako kopię zapasową. Nazywa się to spekulacyjną realizacją zadań.

Na przykład, jeśli jeden węzeł ma wolny kontroler dysku, to może odczytać jego wejście z prędkością tylko 10% prędkości wszystkich pozostałych węzłów. Tak więc, gdy 99 zadań mapowych jest już ukończonych, system wciąż czeka na ostateczne zadanie mapowania, które ma miejsce, co zajmuje dużo więcej czasu niż wszystkie inne węzły.

Wymuszając wykonywanie zadań w izolacji od siebie, poszczególne zadania nie wiedzą, skąd pochodzą dane wejściowe. Zadania ufają platformie Hadoop, aby dostarczyć odpowiednie dane wejściowe. Dlatego te same dane wejściowe mogą być przetwarzane wiele razy równolegle, w celu wykorzystania różnic w możliwościach maszyn. Ponieważ większość zadań w pracy zbliża się do końca, platforma Hadoop zaplanuje nadmiarowe kopie pozostałych zadań w kilku węzłach, które nie mają innych zadań do wykonania. Ten proces nazywa się spekulacyjnym wykonaniem. Gdy zadania zakończą się, ogłaszają ten fakt JobTracker. Niezależnie od tego, która kopia zadania zostanie zakończona, staje się ona ostateczną kopią. Jeśli inne kopie wykonywały spekulacje, Hadoop nakazuje TaskTrackerom porzucenie zadań i odrzucenie ich wyników. Reduktorzy następnie otrzymują swoje dane wejściowe od tego, który z nich zakończył się pomyślnie, po pierwsze.

Wykonanie spekulacyjne jest domyślnie włączone. Możesz wyłączyć spekulacyjne wykonanie dla mapperów i reduktorów, ustawiając opcje JobConf na wartość false, odpowiednio przy użyciu starego interfejsu API, podczas gdy w nowszym interfejsie API możesz zmienić mapreduce.map.speculative i mapreduce.reduce.speculative.

Więc, aby odpowiedzieć na twoje pytanie, zaczyna się od nowa i nie ma nic wspólnego z tym, ile inne zadanie wykonało/zakończyło.

referencyjny: http://developer.yahoo.com/hadoop/tutorial/module4.html

+3

Wierzę, że 'mapreduce.map.speculative' oraz' mapreduce.reduce.speculative' są nowszymi odpowiednikami "mapred.map.tasks.speculative.execution" i "mapred.reduce.tasks.speculative.execution", odpowiednio. –

Powiązane problemy