1. Wprowadzenie do usługi zarządzanej dla Apache Spark
Usługa zarządzana dla Apache Spark to w pełni zarządzana i wysoce skalowalna usługa do uruchamiania Apache Spark, Apache Flink, Presto oraz wielu innych narzędzi i platform open source. Możesz wykorzystać usługę zarządzaną dla Apache Spark do modernizacji jezior danych, realizacji procesów ETL / ELT i bezpiecznego badania danych na globalną skalę. Usługa zarządzana dla Apache Spark jest też w pełni zintegrowana z kilkoma usługami Google Cloud, w tym BigQuery, Cloud Storage, Gemini Enterprise Agent Engine i Knowledge Catalog.
Usługa zarządzana dla Apache Spark jest dostępna w 2 trybach wdrażania:
- Zarządzana usługa Apache Spark bez serwera umożliwia uruchamianie zadań PySpark bez konieczności konfigurowania infrastruktury i autoskalowania. Usługa zarządzana Apache Spark obsługuje zadania wsadowe i sesje / notatniki PySpark.
- Zarządzane klastry Apache Spark umożliwiają zarządzanie klastrem Hadoop YARN dla zadań Spark opartych na YARN, a także narzędziami open source, takimi jak Flink i Presto. Możesz dostosować klastry w chmurze za pomocą dowolnego skalowania w pionie lub w poziomie, w tym autoskalowania.
2. Tworzenie zarządzanego klastra Apache Spark w sieci VPC Google Cloud
W tym kroku utworzysz zarządzany klaster Apache Spark w Google Cloud za pomocą konsoli Google Cloud.
Najpierw włącz interfejs API usługi zarządzanej Apache Spark w konsoli. Po włączeniu wyszukaj „Zarządzany Apache Spark” na pasku wyszukiwania i kliknij Utwórz klaster.
Wybierz Klaster w Compute Engine, aby używać maszyn wirtualnych Google Compute Engine(GCE) jako podstawowej infrastruktury do uruchamiania klastrów zarządzanych Apache Spark.

Wyświetli się strona tworzenia klastra.

Na tej stronie:
- Nadaj klastrowi niepowtarzalną nazwę.
- Wybierz konkretny region. Możesz też wybrać strefę, ale usługa zarządzana Apache Spark umożliwia automatyczne wybranie strefy. Na potrzeby tego samouczka wybierz „us-central1” i „us-central1-c”.
- Wybierz typ klastra „Standardowy”. Dzięki temu będzie tylko 1 węzeł główny.
- Na karcie Skonfiguruj węzły sprawdź, czy utworzone zostaną 2 instancje robocze.
- W sekcji Dostosuj klaster zaznacz pole obok opcji Włącz bramę komponentów. Umożliwia to dostęp do interfejsów internetowych w klastrze, w tym interfejsu Spark, menedżera węzłów Yarn i notatników Jupyter.
- W sekcji Komponenty opcjonalne wybierz Notatnik Jupyter.Spowoduje to skonfigurowanie klastra z serwerem notatnika Jupyter.
- Pozostaw wszystko inne bez zmian i kliknij Utwórz klaster.
Spowoduje to uruchomienie klastra usługi zarządzanej dla Apache Spark.
3. Uruchamianie klastra i łączenie się z nim przez SSH
Gdy stan klastra zmieni się na Uruchomiono, kliknij nazwę klastra w konsoli usługi zarządzanej Apache Spark.

Kliknij kartę Instancja maszyny wirtualnej, aby wyświetlić węzeł główny i 2 węzły robocze klastra.

Aby zalogować się na węzeł główny, kliknij SSH obok węzła głównego.

Uruchom polecenia hdfs, aby wyświetlić strukturę katalogu.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
4. Interfejsy internetowe i bramy komponentów
W konsoli klastra zarządzanego Apache Spark kliknij nazwę klastra, a następnie kliknij kartę INTERFEJSY SIECIOWE.

Wyświetlą się dostępne interfejsy internetowe, w tym Jupyter. Kliknij Jupyter, aby otworzyć notatnik Jupyter. Możesz go użyć do tworzenia notatników w PySpark przechowywanych w GCS. Aby zapisać notatnik w Google Cloud Storage i otworzyć notatnik PySpark, którego będziesz używać w tym ćwiczeniu, wykonaj te czynności.
5. Monitorowanie i obserwowanie zadań Spark
Po uruchomieniu klastra usługi zarządzanej dla Apache Spark utwórz zadanie wsadowe PySpark i prześlij je do klastra usługi zarządzanej dla Apache Spark.
Utwórz zasobnik Google Cloud Storage (GCS), w którym będzie przechowywany skrypt PySpark. Pamiętaj, aby utworzyć zasobnik w tym samym regionie co zarządzany klaster Apache Spark.

Teraz, gdy zasobnik GCS został utworzony, skopiuj do niego ten plik.
https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py
Ten skrypt tworzy przykładową ramkę danych Spark i zapisuje ją jako tabelę Hive.
hive_job.py
from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row
spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()
df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
(2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")
Prześlij ten skrypt jako zadanie wsadowe Spark w usłudze zarządzanej Apache Spark. W menu nawigacyjnym po lewej stronie kliknij Zadania, a następnie Prześlij zadanie.

Podaj identyfikator zadania i region. Wybierz klaster i podaj lokalizację w GCS skopiowanego skryptu Spark. To zadanie zostanie uruchomione jako zadanie wsadowe Spark w usłudze zarządzanej Apache Spark.
W sekcji Properties (Właściwości) dodaj klucz spark.submit.deployMode i wartość client, aby mieć pewność, że sterownik działa w węźle głównym usługi zarządzanej Apache Spark, a nie w węzłach roboczych. Kliknij Prześlij, aby przesłać zadanie wsadowe do usługi zarządzanej Apache Spark.

Skrypt Spark utworzy ramkę danych i zapisze ją w tabeli Hivetest_table_1.
Po pomyślnym uruchomieniu zadania możesz wyświetlić instrukcje drukowania w konsoli na karcie Monitorowanie.

Po utworzeniu tabeli Hive prześlij kolejne zadanie zapytania Hive, aby wybrać zawartość tabeli i wyświetlić ją w konsoli.
Utwórz kolejne zadanie o tych właściwościach:

Zwróć uwagę, że Typ zadania jest ustawiony na Hive, a typ źródła zapytania to Tekst zapytania, co oznacza, że całą instrukcję HiveQL wpiszemy w polu tekstowym Tekst zapytania.
Prześlij zadanie, pozostawiając pozostałe parametry jako domyślne.

Zwróć uwagę, jak HiveQL wybiera wszystkie rekordy i wyświetla je w konsoli.
6. Autoskalowanie
Autoskalowanie to szacowanie „odpowiedniej” liczby węzłów roboczych klastra dla danego zadania.
Interfejs Managed Apache Spark AutoscalingPolicies API zapewnia mechanizm automatyzacji zarządzania zasobami klastra i umożliwia autoskalowanie maszyn wirtualnych instancji roboczych klastra. Zasada autoskalowania to konfiguracja wielokrotnego użytku, która opisuje sposób, w jaki powinny być skalowane instancje robocze klastra, w których stosowana jest dana zasada autoskalowania. Definiuje ona granice, częstotliwość i agresywność skalowania, co zapewnia szczegółową kontrolę nad zasobami klastra od początku jego istnienia.
Zarządzane zasady autoskalowania Apache Spark są zapisywane w plikach YAML, które są przekazywane w poleceniu CLI służącym do tworzenia klastra lub wybierane z zasobnika GCS podczas tworzenia klastra w konsoli Cloud.
Oto przykład zasad automatycznego skalowania usługi zarządzanej Apache Spark :
policy.yaml
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
maxInstances: 50
basicAlgorithm:
cooldownPeriod: 4m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
gracefulDecommissionTimeout: 1h
7. Konfigurowanie opcjonalnych komponentów zarządzanej usługi Apache Spark
Spowoduje to uruchomienie klastra usługi zarządzanej dla Apache Spark.
Podczas tworzenia klastra usługi zarządzanej dla Apache Spark w klastrze automatycznie instalowane są standardowe komponenty ekosystemu Apache Hadoop (patrz Lista wersji usługi zarządzanej dla Apache Spark). Podczas tworzenia klastra możesz zainstalować w nim dodatkowe komponenty, zwane komponentami opcjonalnymi.

Podczas tworzenia zarządzanego klastra Apache Spark w konsoli włączyliśmy komponenty opcjonalne i wybraliśmy Jupyter Notebook jako komponent opcjonalny.
8. Zwalnianie miejsca
Aby wyczyścić klaster, kliknij Zatrzymaj po wybraniu klastra w konsoli usługi zarządzanej Apache Spark. Po zatrzymaniu klastra kliknij Usuń, aby go usunąć.
Po usunięciu klastra zarządzanego Apache Spark usuń zasobniki GCS, do których skopiowano kod.
Aby wyczyścić zasoby i uniknąć niechcianych opłat, musisz najpierw zatrzymać, a potem usunąć zarządzany klaster Apache Spark.
Zanim zatrzymasz i usuniesz klaster, upewnij się, że wszystkie dane zapisane w pamięci HDFS zostały skopiowane do GCS w celu trwałego przechowywania.
Aby zatrzymać klaster, kliknij Zatrzymaj.

Gdy klaster się zatrzyma, kliknij Usuń, aby go usunąć.
W oknie potwierdzenia kliknij Usuń, aby usunąć klaster.
