1. Einführung – Google Dataproc
Dataproc ist ein vollständig verwalteter und hoch skalierbarer Dienst zum Ausführen 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 auf globaler Ebene. Dataproc ist außerdem vollständig in mehrere Google Cloud-Dienste wie BigQuery, Cloud Storage, Vertex AI und Dataplex eingebunden.
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 zusätzlich zu Open-Source-Tools wie Flink und Presto einen Hadoop-YARN-Cluster für YARN-basierte Spark-Arbeitslasten verwalten. Sie können Ihre cloudbasierten Cluster beliebig vertikal oder horizontal skalieren, 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 mit der Google Cloud Console einen Dataproc-Cluster in Google Cloud.
Aktivieren Sie zuerst die Dataproc Service API in der Console. Suchen Sie nach der Aktivierung nach „Dataproc“. in die Suchleiste und klicken Sie auf Cluster erstellen.
Wählen Sie Cluster on Compute Engine aus, um Google Compute Engine-VMs(GCE) als zugrunde liegende Infrastruktur zum Ausführen von Dataproc-Clustern zu verwenden.
Sie befinden sich jetzt auf der Seite „Clustererstellung“.
Auf dieser Seite:
- Geben Sie einen eindeutigen Namen für den Cluster an.
- 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“ aus und „us-central1-c“...
- Wählen Sie die Option "Standard" aus. Clustertyp. Dadurch wird sichergestellt, dass ein Master-Knoten vorhanden ist.
- Bestätigen Sie auf dem Tab Knoten konfigurieren, dass nur zwei Worker erstellt werden.
- Klicken Sie im Abschnitt Cluster anpassen auf das Kästchen neben Component Gateway aktivieren. Dadurch wird der Zugriff auf Weboberflächen im Cluster ermöglicht, einschließlich der Spark-UI, des Yarn-Knotenmanagers 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 alles andere unverändert und klicken Sie auf Cluster erstellen.
Dadurch wird ein Dataproc-Cluster gestartet.
3. Cluster starten und SSH-Verbindung herstellen
Sobald sich der Clusterstatus zu Running ändert, klicken Sie in der Dataproc-Konsole auf den Clusternamen.
Klicken Sie auf den Tab VM-Instanz, um den Master-Knoten und die beiden Worker-Knoten des Clusters anzuzeigen.
Klicken Sie neben dem Masterknoten auf SSH, um sich beim Masterknoten anzumelden.
Führen Sie hdfs-Befehle aus, um die Verzeichnisstruktur anzuzeigen.
hadoop_commands_example
sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51
sudo hadoop fs -ls /
4. Weboberflächen und Komponentengateways
Klicken Sie in der Dataproc-Clusterkonsole auf den Namen Ihres Clusters und dann auf den Tab WEB-INTERFACES.
Hier werden die verfügbaren Weboberflächen angezeigt, einschließlich Jupyter. Klicken Sie auf Jupyter, um ein Jupyter-Notebook zu öffnen. Damit können Sie Notebooks in PySpark erstellen, die in GCS gespeichert sind. um Ihr Notebook in Google Cloud Storage zu speichern und ein PySpark-Notebook zu öffnen, das Sie in diesem Codelab verwenden möchten.
5. Spark-Jobs überwachen und beobachten
Wenn der Dataproc-Cluster betriebsbereit 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. Der Bucket muss sich in derselben Region wie der Dataproc-Cluster befinden.
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
Dieses Skript erstellt einen Spark-Beispiel-DataFrame und schreibt ihn als Hive-Tabelle.
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-Skripts an. Dieser Job wird als Spark-Batchjob in Dataproc ausgeführt.
Fügen Sie unter Attribute 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 Submit (Senden), um den Batchjob an Dataproc zu senden.
Das Spark-Skript erstellt einen DataFrame und schreibt in die Hive-Tabelle test_table_1
.
Sobald der Job erfolgreich ausgeführt wurde, können Sie die Druckanweisungen in der Console auf dem Tab Monitoring sehen.
Nachdem die Hive-Tabelle nun 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 der Jobtyp auf Hive festgelegt ist und der Quelltyp der Abfrage Abfragetext ist. Das bedeutet, dass die gesamte HiveQL-Anweisung in das Textfeld Abfragetext geschrieben wird.
Senden Sie den Job und behalten Sie die restlichen Parameter als Standard bei.
Beachten Sie, wie HiveQL alle Datensätze auswählt und in der Konsole angezeigt wird.
6. Autoscaling
Autoscaling ist die Aufgabe, das „richtige“ Anzahl der Cluster-Worker-Knoten für eine Arbeitslast.
Die Dataproc AutoscalingPolicies API bietet einen Mechanismus zur Automatisierung der Verwaltung von Clusterressourcen und aktiviert die automatische Skalierung der Cluster-Worker-VM. Eine Autoscaling-Richtlinie ist eine wiederverwendbare Konfiguration, die beschreibt, wie Cluster-Worker, die die Autoscaling-Richtlinie verwenden, skaliert werden sollen. Darin werden die Skalierungsgrenzen, Häufigkeit und Aggressivität definiert, um eine detailgetreue Steuerung der Clusterressourcen während der gesamten Clusterlebensdauer zu ermöglichen.
Dataproc-Autoscaling-Richtlinien werden mithilfe von YAML-Dateien geschrieben. Diese YAML-Dateien werden entweder im CLI-Befehl zum Erstellen des Clusters übergeben oder beim Erstellen eines Clusters in der Cloud Console aus einem GCS-Bucket ausgewählt.
Hier ist ein Beispiel für eine Dataproc-Richtlinie für die automatische Skalierung :
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 gestartet.
Beim Erstellen eines Dataproc-Clusters werden darin automatisch Komponenten des Apache Hadoop-Systems installiert. Informationen dazu finden Sie in der Liste der Dataproc-Versionen. Beim Erstellen des Clusters können Sie zusätzliche Komponenten, sogenannte optionale Komponenten, auf dem Cluster installieren.
Beim Erstellen des Dataproc-Clusters über die Console haben wir optionale Komponenten aktiviert und Jupyter Notebook als optionale Komponente ausgewählt.
8. Ressourcen bereinigen
Klicken Sie zum Bereinigen des Clusters auf Beenden, nachdem Sie den Cluster in der Dataproc-Konsole ausgewählt haben. Sobald der Cluster beendet ist, klicken Sie auf Löschen, um den Cluster zu löschen.
Löschen Sie nach dem Löschen des Dataproc-Clusters die GCS-Buckets, in die der Code kopiert wurde.
Um die Ressourcen zu bereinigen und unerwünschte Kosten zu vermeiden, muss der Dataproc-Cluster zuerst beendet und dann gelöscht werden.
Achten Sie vor dem Beenden und Löschen des Clusters darauf, dass alle in HDFS-Speicher geschriebenen Daten für langlebigen Speicher in GCS kopiert werden.
Klicken Sie auf Beenden, um den Cluster zu beenden.
Sobald der Cluster beendet ist, klicken Sie auf Löschen, um den Cluster zu löschen.
Klicken Sie im Bestätigungsdialogfeld auf Löschen, um den Cluster zu löschen.