Installieren und Konfigurieren des Spark-Konnektors

Es werden mehrere Versionen des Konnektors unterstützt. Snowflake empfiehlt jedoch dringend die Verwendung der neuesten Version des Konnektors. Hinweise zur Anzeige von Release-Informationen zur neueste Version finden Sie unter Versionshinweise zum Spark-Konnektor (Link in der Seitenleiste).

Die Anweisungen unter diesem Thema können zur Installation und Konfiguration aller unterstützten Versionen des Konnektors verwendet werden.

Unter diesem Thema:

Unterstützte Versionen

Snowflake unterstützt mehrere Versionen des Konnektors:

Konnektorversionen:

2.x

Unterstützte Spark-Versionen:

Spark 3.4, 3.3, 3.2

Unterstützte Scala-Versionen:

Scala 2.13 und 2.12

Name der Datenquelle:

net.snowflake.spark.snowflake – v2.4.14 (oder höher) des Konnektors erlaubt snowflake als Datenquellennamen

Paketname (für importierte Klassen):

net.snowflake.spark.snowflake

Paketverteilung:

Seite für den Snowflake-Konnektor für Spark im Maven Central Repository

Quellcode:

spark-snowflake (GitHub): . master (für neueste Version), . previous_spark_version (für frühere Versionen)

Die Entwicklerhinweise für die verschiedenen Versionen werden zusammen mit dem Quellcode gehostet.

Bemerkung

Der Snowflake-Konnektor für Spark unterstützt im Allgemeinen die drei neuesten Versionen von Spark. Laden Sie eine Version des Konnektors herunter, die für Ihre Spark-Version entwickelt wurde.

Laden Sie beispielsweise die Version 2.12.0-spark_3.4 des Konnektors herunter, um Version 2.12.0 des Konnektors mit der Spark-Version 3.4 zu verwenden.

Anforderungen

Um Snowflake mit Spark zu installieren und zu verwenden, benötigen Sie Folgendes:

  • Ein unterstütztes Betriebssystem. Eine Liste der unterstützten Betriebssysteme finden Sie unter Betriebssystemunterstützung.

  • Snowflake-Konnektor für Spark

  • Snowflake-JDBC-Treiber (die mit der Version des Konnektors kompatible Version).

  • Apache Spark-Umgebung, entweder selbst gehostet oder in einer der folgenden Umgebungen gehostet:

  • Darüber hinaus können Sie einen dedizierten Amazon S3-Bucket oder einen Azure Blob-Speichercontainer als Stagingzone zwischen den beiden Systemen verwenden. Dies ist jedoch ab Version 2.2.0 des Konnektors nicht mehr erforderlich, da dieser (standardmäßig) einen temporären internen Snowflake-Stagingbereich für den gesamten Datenaustausch verwendet.

  • Die für die Verbindung verwendete Rolle benötigt USAGE- und CREATE STAGE-Berechtigungen für das Schema, das die Tabelle enthält, aus der Sie lesen bzw. in die Sie schreiben werden.

Bemerkung

Wenn Sie Databricks oder Qubole für das Hosting von Spark verwenden, müssen Sie den Snowflake-Konnektor für Spark (oder eine seiner anderen Voraussetzungen) nicht herunterladen oder installieren. Sowohl bei Databricks als auch Qubole ist der Konnektor integriert, um eine native Konnektivität sicherzustellen.

Weitere Details dazu finden Sie unter:

Überprüfen der OCSP-Konnektor- oder Treiber-Version

Snowflake verwendet OCSP, um die Zertifikatkette beim Herstellen einer Verbindung zu Snowflake auszuwerten. Die Version von Treiber oder Konnektor bestimmt zusammen mit deren Konfiguration das OCSP-Verhalten. Weitere Informationen zur Treiber- oder Konnektor-Version, ihrer Konfiguration und zum OCSP-Verhalten finden Sie unter OCSP-Konfiguration.

Herunterladen und Installieren des Konnektors

Die Anweisungen in diesem Abschnitt beziehen sich auf die Version 2.x und höher des Snowflake-Konnektors für Spark.

Wichtig

Snowflake veröffentlicht regelmäßig neue Versionen des Konnektors. Die folgenden Installationsaufgaben müssen bei jeder Installation einer neuen Version durchgeführt werden. Dies gilt auch für den Snowflake-JDBC-Treiber, der eine Voraussetzung für den Spark-Konnektor ist.

Schritt 1: Neueste Version des Snowflake-Konnektors für Spark herunterladen

Snowflake bietet mehrere Versionen des Konnektors an. Sie müssen die entsprechende Version auf Basis folgender Aspekte herunterladen:

  • Die Version des Snowflake-Konnektors für Spark, die Sie verwenden möchten.

  • Die Spark-Version, die Sie verwenden.

  • Die Scala-Version, die Sie verwenden.

Sie können den Snowflake-Konnektor für Spark von Maven herunterladen. Wenn Sie den Treiber erstellen möchten, können Sie den Quellcode von Github abrufen.

Zentrales Maven-Repository

Snowflake stellt für jede unterstützte Scala-Version (2.12 und 2.13) separate Paketartefakte bereit. Für jede dieser Scala-Versionen bietet Snowflake verschiedene Versionen des Spark-Konnektors sowie separate Artefakte, die verschiedene Versionen von Spark unterstützen.

So laden Sie den Spark-Konnektor herunter:

  1. Durchsuchen Sie das Maven-Repository nach der Version von Scala, die Sie verwenden möchten:

    Der folgende Screenshot zeigt ein Beispiel für die Suchergebnisseite:

    Snowflake Connector for Spark download page in Maven

    In der Spalte Latest Version ist die letzte verfügbare Version des Treibers aufgeführt.

    Für die einzelnen Pakete wird folgende Namenskonvention verwendet:

    N.N.N-spark_P.P
    
    Copy

    Wobei:

    • N.N.N ist die Snowflake-Version (z. B. 2.12.0).

    • P.P ist die Spark-Version (z. B. 3.4).

    Beispiel:

    2.12.0-spark_3.4
    
    Copy
  2. Wenn das Artefakt für die von Ihnen verwendete unterstützte Spark-Version nicht angezeigt wird, klicken Sie unter der Spalte Latest Version auf den Link all.

  3. Laden Sie die JAR-Datei herunter, indem Sie in der Spalte Download auf den Link jar klicken.

  4. Wenn Sie die Paketsignatur überprüfen möchten, müssen Sie die Signaturdatei ebenfalls herunterladen.

    1. Klicken Sie in der Spalte Version auf den Link N.N.N-spark_P.P, um die Seite für die Version anzuzeigen.

    2. Klicken Sie auf den Link net.snowflake : spark-snowflake_x.xx : N.N.N-spark_P.P, um die Seite zu laden, die die Artefakte für diese Version auflistet (wobei x.xx die Scala-Version ist, die Sie verwenden möchten, z. B. 2.12).

    3. Klicken Sie auf den Link spark-snowflake_2.1x-N.N.N-spark_P.P.jar.asc, um die Signaturdatei herunterzuladen.

GitHub

Der Quellcode für den Snowflake-Konnektor für Spark ist auf GitHub verfügbar. Die kompilierten Pakete sind jedoch nicht auf GitHub verfügbar. Sie können die kompilierten Pakete von Maven herunterladen.

Schritt 2: Kompatible Version des Snowflake-JDBC-Treibers herunterladen

Als Nächstes müssen Sie die Version des Snowflake-JDBC-Treibers herunterladen, die mit der von Ihnen verwendeten Version des Snowflake-Spark-Konnektor kompatibel ist.

Der Snowflake-JDBC-Treiber wird als Standard-Java-Paket über die Seite für den JDBC-Treiber im Maven Central Repository bereitgestellt. Sie können das Paket entweder als .jar-Datei herunterladen oder direkt das Paket referenzieren. Bei dieser Anleitung wird davon ausgegangen, dass Sie das Paket referenzieren.

Informationen zu der für Ihre Version des Snowflake-Spark-Konnektors unterstützte Version des Snowflake-JDBC-Treibers finden Sie unter Snowflake Connector for Spark-Versionshinweise.

Weitere Informationen zum Herunterladen und Installieren des Snowflake-JDBC-Treibers finden Sie unter Herunterladen und Integrieren des JDBC-Treibers.

Schritt 3 (optional): Überprüfen der Paketsignatur des Snowflake-Konnektors für Spark

So überprüfen Sie die Paketsignatur des Snowflake-Konnektors für Spark:

  1. Laden Sie vom öffentlichen Keyserver den öffentlichen Snowflake-GPG-Schlüssel in der von Ihnen verwendeten Version des Snowflake-Konnektors für Spark herunter, und importieren Sie diesen:

    • Für Version 2.11.1 und höher:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
    • Für die Versionen 2.8.2 bis 2.11.0:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
    • Für Version 2.4.13 bis 2.8.1:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
    • Für Version 2.4.12 und niedriger:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 93DB296A69BE019A

    Bemerkung

    Wenn dieser Befehl mit der folgenden Fehlermeldung fehlschlägt:

    gpg: keyserver receive failed: Server indicated a failure
    
    Copy

    Geben Sie an, dass Sie für den Keyserver Port 80 verwenden möchten:

    gpg --keyserver hkp://keyserver.ubuntu.com:80  ...
    
    Copy
  2. Führen Sie den Befehl gpg --verify aus, um die Signatur des Pakets zu überprüfen.

    Geben Sie für das Kommandozeilenflag --verify die .asc-Datei, die sie zuvor heruntergeladen haben, als Signaturdatei an, und die JAR-Datei als Datei mit den signierten Daten.

    $ gpg --verify spark-snowflake_x.xx-N.N.N-spark_P.P.jar.asc spark-snowflake_x.xx-N.N.N-spark_P.P.jar
    gpg: Signature made Wed 22 Feb 2017 04:31:58 PM UTC using RSA key ID <gpg_key_id>
    gpg: Good signature from "Snowflake Computing <snowflake_gpg\ @snowflake.net>"
    
    Copy

    Wobei:

    • x.xx ist die Scala-Version (z. B. 2.12).

    • N.N.N ist die Version des Snowflake-Konnektors für Spark (z. B. 2.12.0).

    • P.P ist die Spark-Version (z. B. 3.4).

    Bemerkung

    Die Überprüfung der Signatur führt zu einer Warnung ähnlich der folgenden:

    gpg: Signature made Mon 24 Sep 2018 03:03:45 AM UTC using RSA key ID <gpg_key_id>
    gpg: Good signature from "Snowflake Computing <snowflake_gpg@snowflake.net>" unknown
    gpg: WARNING: This key is not certified with a trusted signature!
    gpg: There is no indication that the signature belongs to the owner.
    
    Copy

    Um die Warnung zu vermeiden, können Sie dem öffentlichen Snowflake-GPG-Schlüssel implizites Vertrauen gewähren.

  3. Ihre lokale Umgebung kann mehrere GPG-Schlüssel enthalten. Aus Sicherheitsgründen rotiert Snowflake jedoch regelmäßig den öffentlichen GPG-Schlüssel. Als Best Practice empfehlen wir, den vorhandenen öffentlichen Schlüssel zu löschen, nachdem wir bestätigt haben, dass der letzte Schlüssel mit dem zuletzt signierten Paket funktioniert. Beispiel:

    $ gpg --delete-key "Snowflake Computing"
    
    Copy

Schritt 4: Lokales Spark-Cluster oder die von Amazon EMR gehostete Spark-Umgebung konfigurieren

Wenn Sie eine lokale Spark-Installation oder eine Spark-Installation in Amazon EMR verwenden, müssen Sie das spark-shell-Programm so konfigurieren, dass es sowohl den Snowflake-JDBC-Treiber als auch den Spark-Konnektor enthält:

  • Zum Einbinden des Snowflake-JDBC-Treibers verwenden Sie die Option --package mit der Referenz zum JDBC-Paket auf der Seite für den JDBC-Treiber im Maven Central Repository, das die passende Version des gewünschten Treibers bereitstellt (z. B. net.snowflake:snowflake-jdbc:3.13.30).

  • Zum Einbinden des Spark-Konnektors verwenden Sie die Option --package mit der Referenz zum entsprechenden Paket (Scala 2.12 oder Scala 2.13), das im Maven Central Repository gehostet wird und die passende Version des gewünschten Treibers enthält (z. B. net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.4).

Beispiel:

spark-shell --packages net.snowflake:snowflake-jdbc:3.13.22,net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.4
Copy

Installieren zusätzlicher Pakete (falls erforderlich)

Abhängig von Ihrer Spark-Installation fehlen möglicherweise einige vom Konnektor benötigte Pakete. Sie können Pakete, die Ihrer Installation fehlen, hinzufügen, indem Sie das entsprechende Flag für spark-shell verwenden:

  • --packages

  • --jars (wenn die Pakete als .jar-Dateien heruntergeladen wurden)

Die erforderlichen Pakete sind unten mit der Syntax (einschließlich Versionsnummer) für die Verwendung des --packages-Flags zum Verweisen auf die Pakete aufgeführt:

  • org.apache.hadoop:hadoop-aws:2.7.1

  • org.apache.httpcomponents:httpclient:4.3.6

  • org.apache.httpcomponents:httpcore:4.3.3

  • com.amazonaws:aws-java-sdk-core:1.10.27

  • com.amazonaws:aws-java-sdk-s3:1.10.27

  • com.amazonaws:aws-java-sdk-sts:1.10.27

Wenn beispielsweise die Apache-Pakete fehlen, können Sie die Pakete per Referenz hinzufügen:

spark-shell --packages org.apache.hadoop:hadoop-aws:2.7.1,org.apache.httpcomponents:httpclient:4.3.6,org.apache.httpcomponents:httpcore:4.3.3
Copy

Vorbereiten eines externen Speicherorts für Dateien

Möglicherweise müssen Sie einen externen Speicherort für Dateien vorbereiten, die Sie zwischen Snowflake und Spark übertragen möchten.

Die Ausführung dieser Aufgabe ist erforderlich, wenn eine der folgenden Situationen zutrifft:

  • Sie möchten Jobs ausführen, die länger als 36 Stunden dauern. Dies ist die maximale Dauer für das Token, das der Konnektor verwendet, um auf den internen Stagingbereich für den Datenaustausch zuzugreifen.

  • Die Snowflake-Konnektor für Spark-Version ist 2.1.x oder niedriger (auch wenn Ihre Jobs weniger als 36 Stunden benötigen).

    Bemerkung

    Wenn Sie derzeit nicht die Version 2.2.0 (oder höher) des Konnektors verwenden, empfiehlt Snowflake dringend ein Upgrade auf die neueste Version.

Vorbereiten eines externen AWS S3-Buckets

Bereiten Sie einen externen S3-Bucket vor, mit dem der Konnektor Daten zwischen Snowflake und Spark austauschen kann. Anschließend stellen Sie dem Konnektor die Speicherortinformationen sowie die für den AWS-Zugang am Speicherort erforderlichen Anmeldeinformationen zur Verfügung. Weitere Details dazu finden Sie unter dem nächsten Thema unter Authentifizierung von S3 für den Datenaustausch.

Wichtig

Wenn Sie einen externen S3-Bucket verwenden, entfernt der Konnektor nicht automatisch die zwischengespeicherten/temporären Daten von diesem Speicherort. Daher ist es am besten, einen bestimmten Bucket oder Pfad (Präfix) zu verwenden und eine Lebenszyklusrichtlinie für den Bucket/Pfad festzulegen, um ältere Dateien automatisch zu bereinigen. Weitere Informationen zur Konfiguration einer Lebenszyklusrichtlinie finden Sie in der Amazon S3-Dokumentation.

Vorbereiten eines Azure Blob-Speichercontainers

Bereiten Sie einen externen Azure Blob-Speichercontainer vor, über den der Konnektor Daten zwischen Snowflake und Spark austauschen kann. Stellen Sie anschließend dem Konnektor die Speicherortinformationen sowie die für den Azure-Zugang am Speicherort erforderlichen Anmeldeinformationen zur Verfügung. Weitere Details dazu finden Sie unter dem nächsten Thema unter Authentifizieren von Azure für den Datenaustausch.