ten dokument zawiera krótkI przegląd działania programu Spark na klastrach, aby ułatwić zrozumienie zaangażowanych komponentów. Przeczytaj przewodnik składania aplikacjiaby dowiedzieć się o uruchamianiu aplikacji w klastrze.
aplikacje Spark działają jako niezależne zestawy procesów w klastrze, koordynowane przez obiekt SparkContext
w głównym programie (zwanym programem sterowników).
w szczególności, aby uruchomić na klastrze, SparkContext może łączyć się z kilkoma typami menedżerów klastrów (albo z niezależnym menedżerem klastrów Spark, Mesos lub YARN), które przydzielają zasoby do różnych aplikacji. Po podłączeniu Spark nabywa wykonawców na węzłach w klastrze, które sąprocesami, które uruchamiają obliczenia i przechowują dane dla Twojej aplikacji.Następnie wysyła kod aplikacji (zdefiniowany przez pliki JAR lub Python przekazane do SparkContext) do wykonawców. Wreszcie, SparkContext wysyła zadania do wykonawców do uruchomienia.
jest kilka przydatnych rzeczy do zapamiętania na temat tej architektury:
- każda aplikacja otrzymuje własne procesy wykonujące, które pozostają na czas trwania całej aplikacji i uruchamiają zadania w wielu wątkach. Ma to zaletę izolowania aplikacji od siebie, zarówno po stronie planowania (każdy sterownik planuje własne zadania), jak i po stronie wykonującej (zadania z różnych aplikacji uruchamiane w różnych JVMs). Oznacza to jednak również, że dane nie mogą być współdzielone między różnymi aplikacjami Spark (instancjami SparkContext) bez zapisania ich do zewnętrznego systemu pamięci masowej.
- Spark jest agnostykiem dla menedżera klastrów bazowych. Tak długo, jak może nabywać procesy Executor, a te komunikują się ze sobą, stosunkowo łatwo jest go uruchomić nawet na Cluster managerze, który obsługuje również inne aplikacje (np. Mesos/YARN).
- program sterownika musi nasłuchiwać i akceptować połączenia przychodzące od swoich wykonawców przez cały okres użytkowania (np. patrz spark.kierowca.port w konfiguracji sieci). W związku z tym program sterownika musi być sieciowyadresowalny z węzłów roboczych.
- ponieważ sterownik planuje zadania w klastrze, powinien być uruchamiany blisko workernodes, najlepiej w tej samej sieci lokalnej. Jeśli chcesz wysyłać żądania do clustera zdalnie, lepiej otworzyć sterownik RPC dla sterownika i zlecić mu przesyłanie operacji z pobliskiego miejsca, niż uruchomić sterownik z dala od węzłów roboczych.
typy menedżerów klastrów
system obsługuje obecnie kilka menedżerów klastrów:
- Standalone – prosty menedżer klastrów dołączony do programu Spark, który ułatwia konfigurowanie klastra.
- Apache Mesos-ogólny menedżer klastrów, który może również uruchamiać Hadoop MapReduce i aplikacje usługowe.
- Hadoop – Menedżer zasobów w Hadoop 2.
- Kubernetes-system open-source do automatyzacji wdrażania,skalowania i zarządzania aplikacjami kontenerowymi.
istnieje projekt innej firmy (nieobsługiwany przez projekt Spark), aby dodać obsługę forNomad jako menedżera klastrów.
składanie wniosków
wnioski można składać do klastra dowolnego typu za pomocą skryptu spark-submit
.Przewodnik składania wniosków opisuje, jak to zrobić.
monitorowanie
każdy sterownik ma interfejs WWW, zazwyczaj na porcie 4040, który wyświetla informacje o runningtasks, executorach i użyciu pamięci masowej. Po prostu przejdź do w przeglądarce, aby uzyskać dostęp do tego interfejsu użytkownika. W przewodniku dotyczącym monitorowania opisano również inne opcje monitorowania.
planowanie zadań
Spark daje kontrolę nad alokacją zasobów zarówno w aplikacjach (na poziomie clustermanagera), jak i wewnątrz aplikacji (jeśli na tym samym SparkContext odbywa się wiele obliczeń).Omówienie harmonogramu zadań opisuje to bardziej szczegółowo.
Słowniczek
poniższa tabela podsumowuje terminy używane w odniesieniu do pojęć klastrowych:
termin | Znaczenie |
---|---|
aplikacja | program użytkownika zbudowany na bazie Spark. Składa się z programu sterownika i executorów w klastrze. |
Jar aplikacji | jar zawierający aplikację Spark użytkownika. W niektórych przypadkach użytkownicy będą chcieli utworzyć „jar uber” zawierający ich aplikację wraz z jej zależnościami. Jar użytkownika nigdy nie powinien zawierać bibliotek Hadoop ani Spark, jednak zostaną one dodane w czasie wykonywania. |
Driver program | proces uruchamiający funkcję main () aplikacji i tworzący SparkContext |
Menedżer klastra | zewnętrzna usługa pozyskiwania zasobów na klastrze (np. samodzielny menedżer, Mesos, YARN) |
tryb wdrażania | rozróżnia, gdzie działa proces sterownika. W trybie” klastra ” framework uruchamia sterownik wewnątrz klastra. W trybie” klient ” zgłaszający uruchamia sterownik poza klastrem. |
węzeł roboczy | każdy węzeł, który może uruchamiać kod aplikacji w klastrze |
Executor | proces uruchamiany dla aplikacji na węźle roboczym, który uruchamia zadania i przechowuje dane w pamięci lub na dysku. Każda aplikacja ma swoich wykonawców. |
zadanie | jednostka pracy, która zostanie wysłana do jednego wykonawcy |
zadanie | równoległe obliczenia składające się z wielu zadań, które powstają w odpowiedzi na działanie iskry (np. save , collect ); zobaczysz ten termin używany w dziennikach kierowców. |
etap | każde zadanie jest podzielone na mniejsze zestawy zadań zwane etapami, które zależą od siebie nawzajem( podobnie jak mapa i redukcja etapów w MapReduce); zobaczysz ten termin używany w dziennikach sterowników. |