1. Einführung – Google Dataproc
Dataproc ist ein vollständig verwalteter, äußerst skalierbarer Dienst für die Ausführung von Apache Spark, Apache Flink, Presto und vielen anderen Open-Source-Tools und Frameworks. Verwenden Sie Dataproc für Data-Lake-Modernisierung, ETL / ELT und sichere Data Science im globalen Maßstab. Dataproc ist auch vollständig in verschiedene Google Cloud-Dienste eingebunden, darunter BigQuery, Cloud Storage, Vertex AI und Dataplex.
Dataproc ist in drei Varianten verfügbar:
- Mit Dataproc Serverless können Sie PySpark-Jobs ausführen, ohne Infrastruktur und Autoscaling konfigurieren zu müssen. Dataproc Serverless unterstützt PySpark-Batcharbeitslasten und ‑Sitzungen / Notebooks.
- Mit Dataproc in Google Compute Engine können Sie einen Hadoop YARN-Cluster für YARN-basierte Spark-Arbeitslasten sowie Open-Source-Tools wie Flink und Presto verwalten. Sie können Ihre cloudbasierten Cluster mit so viel vertikaler oder horizontaler Skalierung anpassen, wie Sie möchten, einschließlich Autoscaling.
- Mit Dataproc in Google Kubernetes Engine können Sie virtuelle Dataproc-Cluster in Ihrer GKE-Infrastruktur konfigurieren, um Spark-, PySpark-, SparkR- oder Spark SQL-Jobs zu senden.
2. Dataproc-Cluster in einer Google Cloud-VPC erstellen
In diesem Schritt erstellen Sie einen Dataproc-Cluster in Google Cloud mit der Google Cloud Console.
Aktivieren Sie als Erstes die Dataproc-Dienst-API in der Console. Wenn die API aktiviert ist, suchen Sie in der Suchleiste nach „Dataproc“ und klicken Sie auf Cluster erstellen.
Wählen Sie Cluster on Compute Engine(Cluster in Compute Engine) aus, um Google Compute Engine-VMs als zugrunde liegende Infrastruktur für die Ausführung von Dataproc-Clustern zu verwenden.

Sie befinden sich jetzt auf der Seite zum Erstellen von Clustern.

Auf dieser Seite:
- Geben Sie einen eindeutigen Namen für den Cluster ein.
- Wählen Sie die gewünschte Region aus. Sie können auch eine Zone auswählen. Dataproc bietet jedoch die Möglichkeit, automatisch eine für Sie auszuwählen. Wählen Sie für dieses Codelab „us-central1“ und „us-central1-c“ aus.
- Wählen Sie den Clustertyp „Standard“ aus. Dadurch wird sichergestellt, dass es einen Masterknoten gibt.
- Prüfen Sie auf dem Tab Knoten konfigurieren, ob zwei Worker erstellt werden.
- Setzen Sie im Abschnitt Cluster anpassen ein Häkchen neben Component Gateway aktivieren. Dies ermöglicht den Zugriff auf Weboberflächen im Cluster, einschließlich der Spark-UI, des Yarn Node Manager und von Jupyter-Notebooks.
- Wählen Sie unter Optionale Komponenten die Option Jupyter Notebook aus. Dadurch wird der Cluster mit einem Jupyter-Notebook-Server konfiguriert.
- Lassen Sie alle anderen Einstellungen unverändert und klicken Sie auf Cluster erstellen.
Dadurch wird ein Dataproc-Cluster eingerichtet.
3. Cluster starten und SSH-Verbindung herstellen
Sobald sich der Clusterstatus in Wird ausgeführt ändert, klicken Sie in der Dataproc-Konsole auf den Clusternamen.

Klicken Sie auf den Tab VM-Instanz, um den Masterknoten und die beiden Worker-Knoten des Clusters aufzurufen.

Klicken Sie neben dem Masterknoten auf SSH, um sich beim Masterknoten anzumelden.

Führen Sie HDFS-Befehle aus, um die Verzeichnisstruktur aufzurufen.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
4. Webschnittstellen und Component Gateways
Klicken Sie in der Dataproc-Clusterkonsole auf den Namen Ihres Clusters und dann auf den Tab WEBOBERFLÄCHEN.

Hier werden die verfügbaren Weboberflächen angezeigt, einschließlich Jupyter. Klicken Sie auf Jupyter, um ein Jupyter-Notebook zu öffnen. Sie können damit Notebooks in PySpark erstellen, die in GCS gespeichert werden. Speichern Sie Ihr Notebook in Google Cloud Storage und öffnen Sie ein PySpark-Notebook, das Sie in diesem Codelab verwenden können.
5. Spark-Jobs überwachen und beobachten
Nachdem der Dataproc-Cluster eingerichtet ist, erstellen Sie einen PySpark-Batchjob und senden Sie ihn an den Dataproc-Cluster.
Erstellen Sie einen Google Cloud Storage-Bucket (GCS), um das PySpark-Skript zu speichern. Achten Sie darauf, dass Sie den Bucket in derselben Region wie den Dataproc-Cluster erstellen.

Nachdem der GCS-Bucket erstellt wurde, kopieren Sie die folgende Datei in diesen Bucket.
https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py
Mit diesem Skript wird ein Beispiel-Spark-DataFrame erstellt und als Hive-Tabelle geschrieben.
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 .....")
Senden Sie dieses Skript als Spark-Batchjob in Dataproc. Klicken Sie im linken Navigationsmenü auf Jobs und dann auf Job senden.

Geben Sie eine Job-ID und eine Region an. Wählen Sie Ihren Cluster aus und geben Sie den GCS-Speicherort des kopierten Spark-Scripts an. Dieser Job wird als Spark-Batchjob in Dataproc ausgeführt.
Fügen Sie unter Properties den Schlüssel spark.submit.deployMode und den Wert client hinzu, damit der Treiber auf dem Dataproc-Masterknoten und nicht auf den Worker-Knoten ausgeführt wird. Klicken Sie auf Senden, um den Batchjob an Dataproc zu senden.

Das Spark-Skript erstellt einen DataFrame und schreibt in eine Hive-Tabelle test_table_1.
Sobald der Job erfolgreich ausgeführt wurde, können Sie die Konsolenausgabe auf dem Tab Monitoring ansehen.

Nachdem die Hive-Tabelle erstellt wurde, senden Sie einen weiteren Hive-Abfragejob, um den Inhalt der Tabelle auszuwählen und in der Konsole anzuzeigen.
Erstellen Sie einen weiteren Job mit den folgenden Attributen:

Beachten Sie, dass Job Type (Jobtyp) auf Hive und der Abfragequelltyp auf Query Text (Abfragetext) festgelegt ist. Das bedeutet, dass wir die gesamte HiveQL-Anweisung in das Textfeld Query Text (Abfragetext) schreiben.
Senden Sie den Job ab und behalten Sie für die restlichen Parameter die Standardeinstellungen bei.

Beachten Sie, dass mit dem HiveQL-Befehl alle Datensätze ausgewählt und in der Konsole angezeigt werden.
6. Autoscaling
Autoscaling ist die Aufgabe, die „richtige“ Anzahl von Cluster-Worker-Knoten für eine Arbeitslast zu schätzen.
Die Dataproc AutoscalingPolicies API bietet einen Mechanismus zur Automatisierung der Clusterressourcenverwaltung und ermöglicht das Autoscaling von Cluster-Worker-VMs. Eine Autoscaling-Richtlinie ist eine wiederverwendbare Konfiguration, die beschreibt, wie Cluster-Worker mit der Autoscaling-Richtlinie skaliert werden sollen. Sie definiert Skalierungsgrenzen, Häufigkeit und Aggressivität, um eine detaillierte Kontrolle über Clusterressourcen während der gesamten Clusterlebensdauer zu ermöglichen.
Dataproc-Autoscaling-Richtlinien werden in YAML-Dateien geschrieben. Diese YAML-Dateien werden entweder im CLI-Befehl zum Erstellen des Clusters übergeben oder aus einem GCS-Bucket ausgewählt, wenn ein Cluster über die Cloud Console erstellt wird.
Hier ist ein Beispiel für eine Dataproc-Autoscaling-Richtlinie :
policy.yaml
workerConfig:
minInstances: 10
maxInstances: 10
secondaryWorkerConfig:
maxInstances: 50
basicAlgorithm:
cooldownPeriod: 4m
yarnConfig:
scaleUpFactor: 0.05
scaleDownFactor: 1.0
gracefulDecommissionTimeout: 1h
7. Optionale Dataproc-Komponenten konfigurieren
Dadurch wird ein Dataproc-Cluster eingerichtet.
Beim Erstellen eines Dataproc-Clusters werden automatisch Komponenten des Apache Hadoop-Systems auf dem Cluster installiert. Weitere Informationen finden Sie unter Liste der Dataproc-Versionen. Sie können beim Erstellen des Clusters auch zusätzliche Komponenten, sogenannte optionale Komponenten, im Cluster installieren.

Beim Erstellen des Dataproc-Clusters über die Konsole haben wir optionale Komponenten aktiviert und Jupyter Notebook als optionale Komponente ausgewählt.
8. Ressourcen bereinigen
Um den Cluster zu bereinigen, klicken Sie in der Dataproc-Konsole auf Beenden, nachdem Sie den Cluster ausgewählt haben. Wenn der Cluster beendet wurde, klicken Sie auf Löschen, um ihn zu löschen.
Nachdem der Dataproc-Cluster gelöscht wurde, löschen Sie die GCS-Buckets, in die der Code kopiert wurde.
Um die Ressourcen zu bereinigen und unerwünschte Abrechnungen zu vermeiden, muss der Dataproc-Cluster zuerst beendet und dann gelöscht werden.
Bevor Sie den Cluster beenden und löschen, müssen Sie dafür sorgen, dass alle in den HDFS-Speicher geschriebenen Daten in GCS kopiert werden, damit sie dauerhaft gespeichert werden.
Klicken Sie auf Beenden, um den Cluster zu beenden.

Wenn der Cluster beendet wurde, klicken Sie auf Löschen, um ihn zu löschen.
Klicken Sie im Bestätigungsdialogfeld auf Löschen, um den Cluster zu löschen.
