Cloud Storage-Connector

Mit der Open-Source-Java-Bibliothek des Cloud Storage-Connectors können Sie Apache Hadoop oder Apache Spark-Jobs direkt für Daten in Cloud Storage erstellen.

Lightning Engine verbessert die Konnektivität zu Cloud Storage, um die Leistung der nativen Engine zu optimieren. Der verbesserte Cloud Storage-Connector minimiert Metadatenvorgänge, um Kosten zu senken. Gleichzeitig sorgt ein optimierter FileOutputCommitter für mehr Leistung und Zuverlässigkeit bei Spark-Arbeitslasten. Füllen Sie das Formular für den Vorabzugriff aus, um vorab Zugriff auf diese private Vorschaufunktion anzufordern.

Vorteile des Cloud Storage-Connectors

  • Direkter Datenzugriff:Speichern Sie Ihre Daten in Cloud Storage und greifen Sie direkt darauf zu. Sie müssen sie nicht zuerst in HDFS übertragen.
  • HDFS-Kompatibilität:Sie können auf Ihre Daten in Cloud Storage zugreifen, wenn Sie das Präfix gs:// anstelle von hdfs:// verwenden.
  • Interoperabilität:Das Speichern von Daten in Cloud Storage ermöglicht eine nahtlose Interoperabilität zwischen Spark-, Hadoop- und Google-Diensten.
  • Datenzugriff:Wenn Sie einen Hadoop-Cluster herunterfahren, haben Sie im Gegensatz zu HDFS in Cloud Storage weiterhin Zugriff auf Ihre Daten.
  • Hohe Datenverfügbarkeit:In Cloud Storage gespeicherte Daten sind hochverfügbar und werden ohne Leistungsverlust global repliziert.
  • Kein Speicherverwaltungs-Overhead:Im Gegensatz zu HDFS erfordert Cloud Storage keine routinemäßigen Verwaltungsmaßnahmen wie das Prüfen des Dateisystems, Aktualisieren oder Zurücksetzen auf eine frühere Version des Dateisystems usw.
  • Schnellstart:In HDFS kann ein MapReduce-Job nur gestartet werden, wenn sich der NameNode außerhalb des abgesicherten Modus befindet. Der Vorgang kann je nach Größe und Status der Daten einige Sekunden bis zu mehreren Minuten in Anspruch nehmen. In Cloud Storage können Sie Jobs zusammen mit den Aufgabenknoten starten. Hierdurch erzielen Sie im Laufe der Zeit erhebliche Kosteneinsparungen.

Connector in Managed Service for Apache Spark-Clustern einrichten

Der Cloud Storage-Connector wird standardmäßig auf allen Managed Service for Apache Spark-Clusterknoten im Verzeichnis /usr/local/share/google/managed-spark/lib/ installiert. In den folgenden Unterabschnitten werden die Schritte beschrieben, die Sie ausführen können, um die Einrichtung des Connectors in Managed Service for Apache Spark-Clustern abzuschließen.

VM-Dienstkonto

Wenn Sie den Connector auf Managed Service for Apache Spark-Cluster knoten und anderen Compute Engine-VMs ausführen, ist die google.cloud.auth.service.account.enable Eigenschaft standardmäßig auf false gesetzt. Das bedeutet, dass Sie die Anmeldedaten für das VM-Dienstkonto für den Connector nicht konfigurieren müssen. Die Anmeldedaten für das VM-Dienstkonto werden vom VM-Metadatenserver bereitgestellt.

Das VM-Dienstkonto von Managed Service for Apache Spark muss die Berechtigung für den Zugriff auf Ihren Cloud Storage-Bucket haben.

Wenn Sie ein benutzerdefiniertes Dienstkonto mit einem 2.2+-Spark-Job-Cluster verwenden: Wenn Sie beim Erstellen eines Managed Service for Apache Spark-Clusters mit der Image-Version 2.2+ ein benutzerdefiniertes Dienstkonto auswählen, an das Sie Spark-Jobs senden, und wenn Ihre Spark-Jobs Daten aus Cloud Storage lesen oder in Cloud Storage schreiben, fügen Sie dem Code zum Erstellen der Spark-Sitzung die folgende Konfiguration hinzu (fett dargestellt), um Berechtigungsprobleme zu vermeiden, die zu Jobfehlern führen können:

spark = SparkSession.builder \
.appName(appName) \
.config("fs.gs.auth.type", "SERVICE_ACCOUNT_JSON_KEYFILE") \
.config("fs.gs.auth.service.account.json.keyfile", "path/to/your/keyfile.json") \
.getOrCreate()

Prüfen Sie, ob die Berechtigungen richtig festgelegt sind. Dazu müssen Sie prüfen, ob das benutzerdefinierte Dienstkonto die Berechtigungen storage.objects.get und storage.objects.create hat:

  1. Aktuellen Zugriff anzeigen, um die Rollen aufzulisten, die dem benutzerdefinierten Dienstkonto gewährt wurden.
  2. Suchen Sie nach einer Rolle oder Berechtigung um die Berechtigungen aufzurufen, die mit einer Rolle verknüpft sind.

Vom Nutzer ausgewählte Connector-Versionen

Die Standardversionen des Cloud Storage-Connectors, die in den neuesten Images verwendet werden, die auf Managed Service for Apache Spark-Clustern installiert sind, finden Sie auf den Seiten zu den Image-Versionen. Wenn Ihre Anwendung von einer nicht standardmäßigen Connector-Version abhängt, die auf Ihrem Cluster bereitgestellt ist, können Sie eine der folgenden Aktionen ausführen, um die ausgewählte Connector-Version zu verwenden:

  • Erstellen Sie einen Cluster mit dem Flag --metadata=GCS_CONNECTOR_VERSION=x.y.z. Dadurch wird der von Anwendungen verwendete Connector, die auf dem Cluster ausgeführt werden, auf die angegebene Connector-Version aktualisiert.
  • Fügen Sie der JAR-Datei Ihrer Anwendung die Connector-Klassen und -Abhängigkeiten für die verwendete Version hinzu und verschieben Sie diese. Die Verschiebung ist erforderlich, um einen Konflikt zwischen der bereitgestellten Connector-Version und der Standard-Connector-Version zu vermeiden, die auf dem Managed Service for Apache Spark-Cluster installiert ist. Weitere Informationen finden Sie im Beispiel für die Verschiebung von Maven-Abhängigkeiten.

Connector in Non-Managed Service for Apache Spark-Clustern einrichten

Sie können den Cloud Storage-Connector in einem Non-Managed Service for Apache Spark-Cluster einrichten, z. B. in einem Apache Hadoop- oder Spark-Cluster, den Sie verwenden, um lokale HDFS-Daten nach Cloud Storage zu verschieben.

  1. Connector herunterladen

  2. Connector installieren

    Folgen Sie der GitHub-Anleitung um den Cloud Storage-Connector zu installieren, zu konfigurieren und zu testen.

Connector verwenden

Sie können den Connector verwenden, um auf folgende Arten auf Cloud Storage-Daten zuzugreifen:

Java-Verwendung

Der Cloud Storage-Connector erfordert Java 8.

Im Folgenden finden Sie einen Beispielabschnitt zur Maven-POM-Abhängigkeitsverwaltung für den Cloud Storage-Connector. Weitere Informationen finden Sie unter Abhängigkeitsverwaltung.

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
</dependency>

Für eine Shading-Version:

<dependency>
    <groupId>com.google.cloud.bigdataoss</groupId>
    <artifactId>gcs-connector</artifactId>
    <version>hadoopX-X.X.XCONNECTOR VERSION</version>
    <scope>provided</scope>
    <classifier>shaded</classifier>
</dependency>

Connector-Support

Der Cloud Storage-Connector wird für die Verwendung mit Google Cloud Produkten und Anwendungsfällen unterstützt. Google Cloud Bei Verwendung mit Managed Service for Apache Spark erhalten Sie für den Connector den gleichen Support wie für Managed Service for Apache Spark. Weitere Informationen finden Sie unter Support.

Mit Cloud Storage mithilfe von gRPC verbinden

Standardmäßig verwendet der Cloud Storage-Connector in Managed Service for Apache Spark die Cloud Storage JSON API. In diesem Abschnitt wird beschrieben, wie Sie den Cloud Storage-Connector so konfigurieren, dass er gRPC verwendet.

Nutzungshinweise

Bei der Verwendung des Cloud Storage-Connectors mit gRPC sind folgende Punkte zu beachten:

  • Regionaler Bucket-Standort: gRPC kann die Leselatenz nur verbessern, wenn sich Compute Engine-VMs und Cloud Storage-Buckets in derselben Compute Engine-Region befinden.
  • Jobs mit vielen Lesevorgängen:gRPC kann die Leselatenz bei lang andauernden Lesevorgängen verbessern und bei Arbeitslasten mit vielen Lesevorgängen helfen. Es wird nicht für Anwendungen empfohlen, die einen gRPC-Kanal erstellen, eine kurze Berechnung ausführen und den Kanal dann schließen.
  • Nicht authentifizierte Anfragen:gRPC unterstützt keine nicht authentifizierten Anfragen.

Voraussetzungen

Bei der Verwendung von gRPC mit dem Cloud Storage-Connector gelten die folgenden Voraussetzungen:

  • Das VPC-Netzwerk Ihres Managed Service for Apache Spark-Clusters muss eine direkte Verbindung unterstützen. Das bedeutet, dass die Routen und Firewallregeln des Netzwerks ausgehenden Traffic zu 34.126.0.0/18 und 2001:4860:8040::/42 zulassen müssen.

  • Wenn Sie einen Managed Service for Apache Spark-Cluster erstellen, müssen Sie die Cloud Storage-Connector-Version 2.2.23 oder höher mit der Image-Version 2.1.56+ oder die Cloud Storage Connector-Version `3.0.0` oder höher mit der Image-Version `2.2.0+` verwenden. Die Cloud Storage-Connector-Version, die in jeder Managed Service for Apache Spark-Image-Version installiert ist, finden Sie auf den Seiten zu den Managed Service for Apache Spark-Image-Versionen.

    • Wenn Sie einen Managed Service for Apache Spark-Cluster in GKE für Ihre gRPC Cloud Storage-Anfragen erstellen und verwenden, wird die GKE-Version 1.28.5-gke.1199000 mit gke-metadata-server 0.4.285 empfohlen. Diese Kombination unterstützt eine direkte Verbindung.
  • Sie oder der Administrator Ihrer Organisation müssen IAM-Rollen (Identity and Access Management) gewähren, die die Berechtigungen enthalten, die zum Einrichten und Senden von gRPC-Anfragen an den Cloud Storage-Connector erforderlich sind. Diese Rollen können Folgendes umfassen:

    • Nutzerrolle: Dataproc-Bearbeiter Rolle wird Nutzern gewährt, damit sie Cluster erstellen und Jobs senden können.
    • Dienstkontorolle: Storage-Objekt-Nutzer Rolle, die dem VM-Dienstkonto von Managed Service for Apache Spark gewährt wird, damit Anwendungen, die auf Cluster-VMs ausgeführt werden, Cloud Storage-Objekte ansehen, lesen, erstellen und schreiben können.

gRPC für den Cloud Storage-Connector aktivieren

Sie können gRPC für den Cloud Storage-Connector auf Cluster- oder Jobebene aktivieren. Wenn gRPC auf Clusterebene aktiviert ist, verwenden Leseanfragen des Cloud Storage-Connectors gRPC. Wenn gRPC stattdessen auf Jobebene aktiviert ist, verwenden Leseanfragen des Cloud Storage-Connectors gRPC nur für den Job.

Cluster aktivieren

Wenn Sie gRPC für den Cloud Storage-Connector auf Clusterebene aktivieren möchten, legen Sie beim Erstellen eines Managed Service for Apache Spark-Clusters die Eigenschaft core:fs.gs.client.type=STORAGE_CLIENT fest. Sobald gRPC auf Clusterebene aktiviert ist, verwenden Leseanfragen des Cloud Storage-Connectors, die von Jobs gesendet werden, die auf dem Cluster ausgeführt werden, gRPC.

Beispiel für die gcloud CLI:

gcloud dataproc clusters create CLUSTER_NAME \
    --project=PROJECT_ID \
    --region=REGION \
    --properties=core:fs.gs.client.type=STORAGE_CLIENT

Dabei gilt:

  • CLUSTER_NAME: Geben Sie einen Namen für Ihren Cluster an.
  • PROJECT_NAME: Die Projekt-ID des Projekts, in dem sich der Cluster befindet. Projekt-IDs werden im Bereich Projektinformationen im Dashboard Google Cloud der Console aufgeführt.
  • REGION: Geben Sie eine Compute Engine-Region an, in der sich der Cluster befinden soll.

Job aktivieren

Wenn Sie gRPC für den Cloud Storage-Connector für einen bestimmten Job aktivieren möchten, fügen Sie --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT hinzu, wenn Sie einen Job senden.

Beispiel: Job in einem vorhandenen Cluster ausführen, der gRPC verwendet, um Daten aus Cloud Storage zu lesen.

  1. Erstellen Sie ein lokales /tmp/line-count.py-PySpark-Skript, das gRPC verwendet, um eine Cloud Storage-Textdatei zu lesen und die Anzahl der Zeilen in der Datei auszugeben.

    cat <<EOF >"/tmp/line-count.py"
    #!/usr/bin/python
    import sys
    from pyspark.sql import SparkSession
    path = sys.argv[1]
    spark = SparkSession.builder.getOrCreate()
    rdd = spark.read.text(path)
    lines_counter = rdd.count()
    print("There are {} lines in file: {}".format(lines_counter,path))
    EOF
    
  2. Erstellen Sie eine lokale Textdatei /tmp/line-count-sample.txt.

    cat <<EOF >"/tmp/line-count-sample.txt"
    Line 1
    Line 2
    line 3
    EOF
    
  3. Laden Sie die lokalen Dateien /tmp/line-count.py und /tmp/line-count-sample.txt in Ihren Bucket in Cloud Storage hoch.

    gcloud storage cp /tmp/line-count* gs://BUCKET
    
  4. Führen Sie den Job line-count.py in Ihrem Cluster aus. Legen Sie --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT fest, um gRPC für Leseanfragen des Cloud Storage-Connectors zu aktivieren.

    gcloud dataproc jobs submit pyspark gs://BUCKET/line-count.py \
    --cluster=CLUSTER_NAME \
    --project=PROJECT_ID  \
    --region=REGION \
    --properties=spark.hadoop.fs.gs.client.type=STORAGE_CLIENT \
    -- gs://BUCKET/line-count-sample.txt
    

    Dabei gilt:

    • CLUSTER_NAME: Der Name eines vorhandenen Clusters.
    • PROJECT_NAME: Ihre Projekt-ID. Projekt-IDs werden im Bereich Projektinformationen im Google Cloud Dashboard der Console aufgeführt.
    • REGION: Die Compute Engine-Region, in der sich der Cluster befindet.
    • BUCKET: Ihr Cloud Storage-Bucket.

gRPC-clientseitige Messwerte generieren

Sie können den Cloud Storage-Connector so konfigurieren, dass gRPC-bezogene Messwerte in Cloud Monitoring generiert werden. Die gRPC-bezogenen Messwerte können Ihnen bei Folgendem helfen:

  • Leistung von gRPC-Anfragen an Cloud Storage überwachen und optimieren
  • Probleme beheben und Fehler beheben
  • Einblick in die Anwendungsnutzung und das Verhalten erhalten

Informationen zum Konfigurieren des Cloud Storage-Connectors zum Generieren von gRPC-bezogenen Messwerten finden Sie unter gRPC-clientseitige Messwerte verwenden.

Ressourcen