Prowadzę pracę Sparka i wydaje się, że zadania nie są dobrze rozmieszczone (patrz załącznik). Czy istnieje sposób na równomierne rozłożenie zadań? Dzięki!Zadania Iskra nie wydają się być dobrze rozmieszczone.
Odpowiedz
myślę zadaniem są równomiernie rozłożone po drugiej różnymi pracownikami, ponieważ każde zadanie ma inny numer portu w kolumnie adresu.
Patrząc tylko na zrzut ekranu, trudno jest coś z tym zrobić. Istnieje jednak dwie rzeczy, które warto rozważyć:
Spark UI (jak z 1.3.1, nie próbowałem jeszcze w 1.4.0) jest wyświetlana tylko sumę statystyk dla gotowych zadań. Jeśli zrobiłeś ten zrzut ekranu podczas działania aplikacji, możliwe jest, że niektóre zadania zostały uruchomione i po prostu nie pojawiły się jeszcze w statystykach!
Na danej scenie Iskra nie można mieć więcej zadań niż partycja danych. Bez więcej kodu, trudno powiedzieć, ale może chcesz używać rdd.partition() funkcji, zazwyczaj można użyć
rdd.repartition(sparkContext.getConf.getInt("spark.executor.instances", defaultValueInt)
generować więcej partycji przed obróbką, a tym samym wygładzenie obciążenia nad wykonawców
Jeśli chcą równego podziału, można użyć funkcji partycji iskry podczas ładowania pliku do RDD,
val ratings = sc.textFile(File_name,partition)
jak masz 10 węzłów 2 rdzenie każdy, wówczas można mieć wartość 20 partycji i podobnie.
Biorąc bliżej do Dołączona grafika, mogę zidentyfikować dwa zasadnicze fakty:
- Numer zadań została równomiernie, przy czym maksymalna różnica 20 zadań.
- Czas działania przydzielony dla każdego executora różni się istotnie, od 3,0 min (~ 80 zadań) do 17,0 min (~ 60 zadań).
To sprawia, że zastanawiam się nad naturą twojej aplikacji. Czy wszystkie zadania są takie same, czy też niektóre z nich potrzebują więcej czasu na ukończenie niż inne? Jeśli zadania są niejednorodne, należy bardziej ostrożnie przeanalizować problem. Wyobraźmy sobie następujący scenariusz:
liczba zadań: 20, gdzie każdy z nich potrzebuje sekund, aby zakończyć z wyjątkiem tego ostatniego:
Task 01: 10 seconds Task 02: 10 seconds Task 03: 10 seconds Task ... Task 20: 120 seconds
- Ilość wykonawców: (każdy z jednym rdzeniem)
Gdybyśmy musieli równomiernie rozdzielić zadania, zobaczylibyśmy że każdy wykonawca będzie musiał przetwarzać łącznie 5 zadań.Biorąc pod uwagę, że jedna wykonawca jest przypisana 20 zadań, co wymaga 120 sekund do wykonania, przepływ wykonania będzie następujący:
- przez drugi 40, z których każdy wykonawca będzie w stanie wykonać pierwsze 4 zadania , biorąc pod uwagę, że 20 zadanie zostało na końcu.
- W drugim 50, każdy wykonawca, ale jeden zakończy wszystkie swoje zadania. Pozostały executor nadal będzie obliczał 20 zadań, które zakończyłyby się po 120 sekundach.
Na końcu interfejs użytkownika wyświetli wynik podobny do twojego, z liczbą zadań równomiernie rozłożonych, ale nie rzeczywistym czasem obliczeniowym.
Executor 01 -> tasks completed: 5 -> time: 0:50 minutes
Executor 02 -> tasks completed: 5 -> time: 0:50 minutes
Executor 03 -> tasks completed: 5 -> time: 0:50 minutes
Executor 04 -> tasks completed: 5 -> time: 2:40 minutes
Mimo że nie jest to to samo, podobna sytuacja może mieć miejsce w Twojej sytuacji.
Czy istnieje zalecane rozwiązanie dla zadań o nierównomiernym obciążeniu pracą? – sthomps
- 1. Zmienne sesji wydają się nie być zapisywane
- 2. Numpy procedury nie wydają się być tak szybkie
- 3. Fragmenty wydają się być przesadą? Nie jest możliwa architektura MVC?
- 4. Wyniki metody podsumowania nie wydają się być dokładne dla wektorów
- 5. Związki w C#: budowa Użytkownicy wydają się nie być wyrównany
- 6. Gniazdka nie wydają się być zamknięcie przy użyciu node.js http.get
- 7. stream_notification_callback nie wydają się działać
- 8. jQuery remove (selektor) nie wydają się działać
- 9. Wyniki MapReduce wydają się być ograniczone do 100?
- 10. jsdom: dispatchEvent/addEventListener nie wydają się działać
- 11. Ustawienie Context.Response.StatusCode nie wydają się działać
- 12. Co powoduje, że moje obrazy nie ładują się początkowo na safari. Wszystkie inne przeglądarki wydają się działać dobrze
- 13. Firefox nie wydają się być szybciej przy użyciu profilu asm.js, ale Chrome jest
- 14. git remote nie wydają się działać na wszystkich
- 15. onbeforeunload nie wydają się działać w Safari lub Chrome
- 16. iskra Apache w buforowaniu pamięci
- 17. Rozszerzenia TFS/Git wydają się ignorować .gitignore
- 18. Nie mogę wykonać prostego zadania na klastrze iskra ec2 z lokalnego pyspark
- 19. obiekty factory_boy wydają się brakować kluczy podstawowych
- 20. sed na OSX - nie wydają się użyć + w wyrażeniach regularnych
- 21. Metody UIStringDrawing nie wydają się bezpieczne w iOS 6
- 22. Generic funkcja konwersji nie wydają się działać z GUID
- 23. Ustawianie default_url_options w środowisku testowym nie wydają się działać
- 24. Błąd zrzucania sterty Java - metadane nie wydają się polimorficzne
- 25. Dlaczego nie można odwoływać się do modułów, które wydają się być automatycznie ładowane przez interpreter bez dodatkowej instrukcji `import`?
- 26. EMR iskra skorupa nie zbierając słoików
- 27. Działka legendą i dobrze rozmieszczone uniwersalny osi y, a główne tytuły w grid.arrange
- 28. Co to jest "iskra" w Haskell?
- 29. Widoki układu Android obracają się i są rozmieszczone wokół koła?
- 30. Jak oceniać obiekty iskra Dstream z ramki danych iskra
U oznacza równomiernie rozdzielić zadania wśród executorów lub kontrolować brak zadań? –
Czy możesz podać więcej informacji na temat swojej aplikacji i sposobu jej uruchomienia za pomocą iskry? Na pierwszy rzut oka wydaje się, że liczba zadań jest równomiernie rozłożona, więc zgaduję, że każde zadanie ma inny nakład pracy. Ponownie, więcej informacji byłoby dobrze. –