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 ausführen.

Lightning Engine verbessert die Verbindung zu Cloud Storage, um die Leistung der nativen Engine zu optimieren. Der verbesserte Cloud Storage-Connector minimiert Metadatenvorgänge, um die Kosten zu senken, während ein optimierter Dateiausgabe-Committer die Leistung und Zuverlässigkeit für Spark-Arbeitslasten erhöht. Füllen Sie das Early Access-Formular aus, um Early Access für diese Funktion in der Vorabversion 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 mit dem Präfix gs:// anstelle von hdfs:// zugreifen.
  • Interoperabilität: Durch das Speichern von Daten in Cloud Storage wird eine nahtlose Interoperabilität zwischen Spark, Hadoop und Google-Diensten ermöglicht.
  • Datenzugänglichkeit: Wenn Sie einen Hadoop-Cluster herunterfahren, haben Sie im Gegensatz zu HDFS weiterhin Zugriff auf Ihre Daten in Cloud Storage.
  • Hohe Datenverfügbarkeit: In Cloud Storage gespeicherte Daten sind hochverfügbar und werden ohne Leistungseinbußen global repliziert.
  • Kein Aufwand für die Speicherverwaltung: Im Gegensatz zu HDFS erfordert Cloud Storage keine routinemäßige Wartung, z. B. die Überprüfung des Dateisystems oder das Upgrade oder Rollback auf eine frühere Version des Dateisystems.
  • Schneller Start: In HDFS kann ein MapReduce-Job erst gestartet werden, wenn der NameNode den abgesicherten Modus verlassen hat. Dieser Vorgang kann je nach Größe und Status Ihrer Daten einige Sekunden bis viele Minuten dauern. In Cloud Storage können Sie Jobs zusammen mit den Aufgabenknoten starten. Hierdurch erzielen Sie im Laufe der Zeit erhebliche Kosteneinsparungen.

Connector-Einrichtung in Managed Service for Apache Spark-Clustern

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

VM-Dienstkonto

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

Das VM-Dienstkonto von Managed Service for Apache Spark muss die Berechtigung haben, auf Ihren Cloud Storage-Bucket zuzugreifen.

Wenn Sie ein benutzerdefiniertes Dienstkonto mit einem 2.2+-Spark-Jobcluster verwenden: Wenn Sie beim Erstellen eines Managed Service for Apache Spark-Clusters mit der Image-Version 2.2+, an den Sie Spark-Jobs senden, ein benutzerdefiniertes Dienstkonto auswählen und Ihre Spark-Jobs aus Cloud Storage lesen oder in Cloud Storage schreiben, fügen Sie dem Code zum Erstellen der Spark-Sitzung die folgende Konfiguration (fett dargestellt) hinzu, 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. Das benutzerdefinierte Dienstkonto muss die Berechtigungen storage.objects.get und storage.objects.create haben:

  1. Aktuellen Zugriff ansehen, um die Rollen aufzulisten, die dem benutzerdefinierten Dienstkonto zugewiesen sind.
  2. Rolle oder Berechtigung suchen, um die mit einer Rolle verknüpften Berechtigungen zu finden.

Vom Nutzer ausgewählte Connector-Versionen

Die Standardversionen des Cloud Storage-Connectors, die in den neuesten Images auf Managed Service for Apache Spark-Clustern installiert sind, sind auf den Seiten mit den Image-Versionen aufgeführt. Wenn Ihre Anwendung von einer nicht standardmäßigen Connector-Version abhängt, die in Ihrem Cluster bereitgestellt wurde, 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, um den Connector, der von Anwendungen im Cluster verwendet wird, auf die angegebene Connector-Version zu aktualisieren.
  • Fügen Sie die Connector-Klassen und Connector-Abhängigkeiten für die von Ihnen verwendete Version in die JAR-Datei Ihrer Anwendung ein und verschieben Sie sie. Das Verschieben ist erforderlich, um einen Konflikt zwischen der von Ihnen bereitgestellten Connector-Version und der Standard-Connector-Version zu vermeiden, die im Managed Service for Apache Spark-Cluster installiert ist. Weitere Informationen finden Sie im Beispiel für die Verlagerung von Maven-Abhängigkeiten.

Connector-Einrichtung auf Nicht-Managed Service for Apache Spark-Clustern

Mit den folgenden Schritten können Sie den Cloud Storage-Connector in einem nicht verwalteten Managed Service for Apache Spark-Cluster einrichten, z. B. in einem Apache Hadoop- oder Spark-Cluster, den Sie zum Verschieben lokaler HDFS-Daten in Cloud Storage verwenden.

  1. Connector herunterladen

  2. Connector installieren

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

Connector-Nutzung

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

Java-Nutzung

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 schattierte 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 von Google Cloud für die Verwendung mitGoogle Cloud -Produkten und -Anwendungsfällen unterstützt. Bei Verwendung mit Managed Service for Apache Spark wird es auf derselben Ebene wie Managed Service for Apache Spark unterstützt. Weitere Informationen finden Sie unter Support erhalten.

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 erfahren Sie, wie Sie den Cloud Storage-Connector für die Verwendung von gRPC aktivieren.

Nutzungshinweise

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

  • Regionaler Bucket-Standort: gRPC kann die Leselatenzen 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 dann den Kanal schließen.
  • Nicht authentifizierte Anfragen: gRPC unterstützt keine nicht authentifizierten Anfragen.

Voraussetzungen

Die folgenden Anforderungen gelten, wenn Sie gRPC mit dem Cloud Storage-Connector verwenden:

  • Das VPC-Netzwerk Ihres Managed Service for Apache Spark-Clusters muss direkte Verbindungen 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 v3.0.0 oder höher mit der Image-Version 2.2.0+ verwenden. Die auf jeder Managed Service for Apache Spark-Image-Version installierte Cloud Storage-Connector-Version ist auf den Managed Service for Apache Spark-Image-Versionsseiten aufgeführt.

  • Sie oder der Administrator Ihrer Organisation müssen IAM-Rollen (Identity and Access Management) zuweisen, die die erforderlichen Berechtigungen zum Einrichten und Senden von gRPC-Anfragen an den Cloud Storage-Connector enthalten. Zu diesen Rollen gehören:

    • Nutzerrolle: Die Rolle Dataproc-Bearbeiter wird Nutzern gewährt, damit sie Cluster erstellen und Jobs einreichen können.
    • Dienstkontorolle: Die Rolle Storage-Objekt-Nutzer, die dem VM-Dienstkonto von Managed Service for Apache Spark zugewiesen ist, 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. Nach der Aktivierung im Cluster verwenden Leseanfragen des Cloud Storage-Connectors gRPC. Wenn die Funktion für einen Job statt auf Clusterebene aktiviert ist, verwenden Cloud Storage-Connector-Leseanfragen gRPC nur für diesen Job.

Cluster aktivieren

Wenn Sie gRPC auf dem Cloud Storage-Connector auf Clusterebene aktivieren möchten, legen Sie das Attribut core:fs.gs.client.type=STORAGE_CLIENT fest, wenn Sie einen Managed Service for Apache Spark-Cluster erstellen. Sobald gRPC auf Clusterebene aktiviert ist, werden für Leseanfragen des Cloud Storage-Connectors, die von Jobs im Cluster gestellt werden, gRPC verwendet.

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 den Cluster an.
  • PROJECT_NAME: Die Projekt-ID des Projekts, in dem sich der Cluster befindet. Projekt-IDs sind im Abschnitt Projektinformationen im Dashboard der Google Cloud 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 ein, wenn Sie einen Job einreichen.

Beispiel: Job auf einem vorhandenen Cluster ausführen, der gRPC zum Lesen aus Cloud Storage verwendet.

  1. Erstellen Sie ein lokales PySpark-Script /tmp/line-count.py, 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 /tmp/line-count-sample.txt-Textdatei.

    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 sind im Abschnitt Projektinformationen im Dashboard der Google Cloud Console aufgeführt.
    • REGION: Die Compute Engine-Region, in der sich der Cluster befindet.
    • BUCKET: Ihr Cloud Storage-Bucket.

Clientseitige gRPC-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 Nutzung und das Verhalten von Anwendungen erhalten

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

Ressourcen