Próbuję zrozumieć związek między liczbą rdzeni i liczbą wykonawców podczas uruchamiania zadania Spark w YARN.
Środowisko testowe wygląda następująco:
- Liczba węzłów danych: 3
- Specyfikacja maszyny węzła danych:
- Procesor: Core i7-4790 (liczba rdzeni: 4, liczba wątków: 8)
- RAM: 32 GB (8 GB x 4)
- HDD: 8 TB (2 TB x 4)
Sieć: 1 Gb
Wersja Spark: 1.0.0
Wersja Hadoop: 2.4.0 (Hortonworks HDP 2.1)
Przepływ pracy Spark: sc.textFile -> filtr -> mapa -> filtr -> mapToPair -> zmniejszByKey -> mapa -> saveAsTextFile
Dane wejściowe
- Wpisz: pojedynczy plik tekstowy
- Rozmiar: 165 GB
- Liczba linii: 454,568,833
Wynik
- Liczba linii po drugim filtrze: 310,640,717
- Liczba linii pliku wynikowego: 99,848,268
- Rozmiar pliku wynikowego: 41 GB
Zadanie zostało uruchomione z następującymi konfiguracjami:
--master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3
(executory na węzeł danych, użyj tyle co rdzenie)--master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3
(liczba rdzeni zredukowana)--master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12
(mniej rdzenia, więcej executora)
Czasy, które upłynęły:
50 min 15 sek
55 min 48 sek
31 min 23 sek
Ku mojemu zaskoczeniu (3) było znacznie szybsze.
Myślałem, że (1) będzie szybszy, ponieważ podczas tasowania komunikacja między wykonawcami będzie mniejsza.
Chociaż liczba rdzeni z (1) jest mniejsza niż (3), liczba rdzeni nie jest kluczowym czynnikiem, ponieważ 2) działała dobrze.
(Dodano odpowiedzi po odpowiedzi pwilmot.)
Aby uzyskać informacje, zrzut ekranu monitora wydajności wygląda następująco:
- Podsumowanie węzła danych Ganglia dla (1) - zadanie rozpoczęto o 04:37.
- Podsumowanie węzła danych Ganglia dla (3) - zadanie rozpoczęto o 19:47. Zignoruj wykres przed tym czasem.
Wykres z grubsza dzieli się na 2 sekcje:
- Po pierwsze: od początku do zmniejszenia Klucz: intensywny procesor, brak aktywności sieciowej
- Po drugie: po zmniejszeniu Klucz: obniżenie procesora, sieciowe operacje we / wy są gotowe.
Jak pokazuje wykres, (1) może zużywać tyle mocy procesora, ile zostało podane. Może to nie być problem z liczbą wątków.
Jak wytłumaczyć ten wynik?