Installation et configuration du connecteur Spark

Plusieurs versions du connecteur sont prises en charge. Cependant, Snowflake recommande fortement d’utiliser la version la plus récente du connecteur. Pour voir les informations de publication sur la dernière version, voir les notes de version du connecteur Spark (lien dans la barre latérale).

Les instructions de ce chapitre peuvent être utilisées pour installer et configurer toutes les versions du connecteur prises en charge.

Dans ce chapitre :

Versions prises en charge

Snowflake prend en charge plusieurs versions du connecteur :

Versions du connecteur :

2.x

Versions Spark prises en charge :

Spark 3.1, 3.0, 2.4

Versions Scala prises en charge :

Scala 2.12, 2.11

Nom de source de données :

net.snowflake.spark.snowflake — 2.4.14 (ou version supérieure) du connecteur autorise snowflake comme nom de source de données

Nom de pack (pour des classes importées) :

net.snowflake.spark.snowflake

Distribution de pack :

Maven Central Repository

Code source :

spark-snowflake (GitHub) : . master (pour la dernière version), . previous_spark_version (pour les versions antérieures)

Les notes du développeur des différentes versions sont hébergées avec le code source.

Note

Le connecteur Snowflake Spark prend généralement en charge les trois versions les plus récentes de Spark. Téléchargez une version du connecteur spécifique à votre version de Spark.

Par exemple, pour utiliser la version 2.8.3 du connecteur avec Spark 2.4 (version plus ancienne), téléchargez la version 2.8.3-spark_2.4 du connecteur.

Exigences

Pour installer et utiliser Snowflake avec Spark, vous avez besoin des éléments suivants :

  • Un système d’exploitation pris en charge. Pour obtenir la liste des systèmes d’exploitation pris en charge, voir Prise en charge par les systèmes d’exploitation.

  • Connecteur Snowflake pour Spark.

  • Pilote JDBC de Snowflake (la version compatible avec la version du connecteur).

  • Environnement Apache Spark, auto-hébergé ou hébergé dans l’une des formes suivantes :

  • De plus, vous pouvez utiliser un compartiment Amazon S3 dédié ou un conteneur Azure Blob Storage comme zone de mise en zone de préparation entre les deux systèmes. Cependant, cela n’est pas nécessaire avec la version 2.2.0 (et supérieure) du connecteur qui utilise une zone de préparation interne temporaire Snowflake (par défaut) pour tout échange de données.

  • Le rôle utilisé dans la connexion nécessite les privilèges USAGE et CREATE STAGE sur le schéma qui contient la table que vous allez lire ou dans laquelle vous allez écrire.

Note

Si vous utilisez Databricks ou Qubole pour héberger Spark, vous n’avez pas besoin de télécharger ou d’installer le connecteur Snowflake pour Spark (ni aucun de ses prérequis). Databricks et Qubole ont tous deux intégré le connecteur pour fournir une connectivité native.

Pour plus de détails, voir :

Vérification de la version du connecteur ou du pilote OCSP

Snowflake utilise OCSP pour évaluer la chaîne de certificats lors d’une connexion à Snowflake. La version du pilote ou du connecteur et sa configuration déterminent le comportement OCSP. Pour plus d’informations sur la version du pilote ou du connecteur, leur configuration et le comportement de OCSP, voir Configuration d’OCSP.

Téléchargement et installation du connecteur

Les instructions de cette section concernent la version 2.x et les versions supérieures du connecteur Snowflake pour Spark.

Important

Snowflake publie périodiquement de nouvelles versions du connecteur. Les tâches d’installation suivantes doivent être effectuées chaque fois que vous installez une nouvelle version. Ceci s’applique également au pilote JDBC Snowflake qui est une condition préalable pour le connecteur Spark.

Étape 1 : Téléchargement de la dernière version du connecteur Snowflake pour Spark

Snowflake fournit plusieurs versions du connecteur. Téléchargez la version appropriée en fonction des éléments suivants :

  • La version du connecteur Snowflake pour Spark que vous souhaitez utiliser.

  • La version de Spark que vous utilisez.

  • La version de Scala que vous utilisez.

Vous pouvez télécharger le connecteur Snowflake Spark à partir de Maven. Si vous voulez construire le pilote, vous pouvez accéder au code source sur Github.

Maven Central Repository

Snowflake fournit des artefacts de package distincts pour chaque version de Scala prise en charge (2.11 et 2.12). Pour chacune de ces versions de Scala, Snowflake fournit différentes versions du connecteur Spark ainsi que des artefacts séparés qui prennent en charge différentes versions de Spark.

Pour télécharger le connecteur Spark :

  1. Recherchez dans le dépôt Maven la version de Scala que vous utilisez :

    • Pour Scala 2.12, recherchez les artefacts correspondants en cliquant sur ce lien.

    • Pour Scala 2.11, recherchez les artefacts correspondants en cliquant sur ce lien.

    La capture d’écran suivante fournit un exemple de la page de résultats de recherche :

    Snowflake Connector for Spark download page in Maven

    La colonne Latest Version indique la dernière version disponible du pilote.

    Les packages individuels utilisent la convention de dénomination suivante :

    N.N.N-spark_P.P
    

    où :

    • N.N.N est la version de Snowflake (par exemple 2.8.3).

    • P.P est la version Spark (par ex. 2.4).

    Par exemple :

    2.9.1-spark_3.1
    
  2. Si vous ne voyez pas l’artefact pour la version prise en charge de Spark que vous utilisez, cliquez sur le lien all sous la colonne Latest Version.

  3. Téléchargez le fichier JAR en cliquant sur le lien jar dans la colonne Download.

  4. Si vous prévoyez de vérifier la signature du pack, vous devez également télécharger le fichier de signature.

    1. Cliquez sur le lien N.N.N-spark_P.P dans la colonne Version pour afficher la page de la version.

    2. Cliquez sur le lien net.snowflake : spark-snowflake_x.xx : N.N.N-spark_P.P pour charger la page qui liste les artefacts pour cette version (où x.xx est la version de Scala que vous prévoyez d’utiliser – par exemple 2.12).

    3. Cliquez sur le lien spark-snowflake_2.1x-N.N.N-spark_P.P.jar.asc pour télécharger le fichier de signature.

GitHub

Le code source du connecteur Spark Snowflake est disponible sur GitHub. Cependant, les packages compilés ne sont pas disponibles sur GitHub. Vous pouvez télécharger les packages compilés depuis Maven.

Étape 2 : Téléchargement de la version compatible du pilote JDBC Snowflake

Ensuite, vous devez télécharger la version du pilote JDBC de Snowflake qui est compatible avec la version du connecteur Snowflake Spark que vous utilisez.

Le pilote JDBC Snowflake est fourni comme pack Java standard via le Maven Central Repository. Vous pouvez soit télécharger le pack sous la forme d’un fichier .jar, ou vous pouvez directement faire référence au pack. Ces instructions supposent que vous faites référence au pack.

Pour trouver la version prise en charge par le pilote JDBC de Snowflake pour la version du Snowflake Spark Connector que vous utilisez, voir les notes de mise à jour Notes de version du connecteur Snowflake pour Spark.

Pour plus de détails sur le téléchargement et l’installation du pilote JDBC Snowflake, voir Téléchargement/intégration du pilote JDBC.

Étape 3 (facultative) : Vérification du connecteur Snowflake pour la signature du pack Spark

Pour vérifier le connecteur Snowflake pour la signature du pack Spark :

  1. Téléchargez et importez la dernière clé publique GPG de Snowflake à partir du serveur de clés publiques :

    $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys <GPG_KEY_ID>
    

    Pour <GPG_KEY_ID>, indiquez l’un des IDs de clés suivants :

    Version du connecteur Spark Snowflake

    ID de clé GPG

    2.8.2 et supérieur

    37C7086698CB005C

    2.4.13 par le biais de 2.8.1

    EC218558EABB25A1

    Jusqu’à 2.4.12

    93DB296A69BE019A

    Note

    Si cette commande échoue avec l’erreur suivante :

    gpg: keyserver receive failed: Server indicated a failure
    

    alors spécifiez que vous voulez utiliser le port 80 pour le serveur de clés :

    gpg --keyserver hkp://keyserver.ubuntu.com:80  ...
    
  2. Exécutez la commande gpg --verify pour vérifier la signature du pack.

    Pour l’indicateur de ligne de commande --verify, spécifiez le fichier .asc que vous avez téléchargé précédemment comme fichier de signature et le fichier JAR comme fichier contenant les données signées.

    $ 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>"
    

    où :

    • x.xx est la version de Scala (par exemple 2.12).

    • N.N.N est la version de Snowflake (par exemple 2.8.3).

    • P.P est la version Spark (par ex. 2.4).

    Note

    La vérification de la signature crée un avertissement similaire à celui qui suit :

    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.
    

    Pour éviter l’avertissement, vous pouvez accorder la confiance implicite à la clé publique GPG Snowflake.

  3. Votre environnement local peut contenir plusieurs clés GPG. Cependant, pour des raisons de sécurité, Snowflake fait tourner périodiquement la clé publique GPG. Nous recommandons de supprimer la clé publique existante après avoir confirmé que la dernière clé fonctionne avec le dernier pack signé. Par exemple :

    $ gpg --delete-key "Snowflake Computing"
    

Étape 4 : Configuration du cluster local Spark ou de l’environnement Spark hébergé sur Amazon EMR

Si vous avez une installation Spark locale ou une installation Spark dans Amazon EMR, vous devez configurer le programme spark-shell pour inclure le pilote JDBC Snowflake et le connecteur Spark :

  • Pour inclure le pilote JDBC Snowflake, utilisez l’option --package pour faire référence au pack JDBC hébergé dans le Maven Central Repository fournissant la version exacte du pilote que vous désirez utiliser (c-à-d net.snowflake:snowflake-jdbc:3.12.17).

  • Pour inclure le connecteur Spark, utilisez l’option --package pour faire référence au pack correspondant ( Scala 2.11 ou Scala 2.12 ) hébergé dans le Maven Central Repository fournissant la version exacte du pilote que vous désirez utiliser (c-à-d net.snowflake:spark-snowflake_2.12:2.8.4-spark_3.0).

Par exemple :

spark-shell --packages net.snowflake:snowflake-jdbc:3.12.17,net.snowflake:spark-snowflake_2.12:2.8.4-spark_3.0

Installation de packs supplémentaires (si nécessaire)

En fonction de votre installation Spark, certains packs requis par le connecteur peuvent être manquants. Vous pouvez ajouter des packs manquants à votre installation en utilisant l’indicateur correspondant pour spark-shell :

  • --packages

  • --jars (si les packs ont été téléchargés en tant que fichiers .jar)

Les packs requis sont répertoriés ci-dessous, avec la syntaxe (y compris le numéro de version) pour utiliser l’indicateur --packages pour faire référence aux packs :

  • 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

Par exemple, s’il manque les packs Apache, pour ajouter les packs par référence :

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

Préparation d’un emplacement externe pour les fichiers

Vous devrez peut-être préparer un emplacement externe pour les fichiers que vous voulez transférer entre Snowflake et Spark.

Cette tâche est requise si l’une des situations suivantes est vraie :

  • Vous exécuterez des tâches qui mettent plus de temps que 36 heures. Il s’agit de la durée maximale du jeton utilisé par le connecteur pour accéder à la zone de préparation interne pour l’échange de données.

  • La version Snowflake Connector pour Spark est la 2.1.x ou inférieure (même si vos tâches nécessitent moins de 36 heures).

    Note

    Si vous n’utilisez pas actuellement la version 2.2.0 (ou supérieure) du connecteur, Snowflake recommande vivement la mise à niveau vers la dernière version.

Préparation d’un compartiment S3 AWS externe

Préparez un compartiment S3 externe que le connecteur peut utiliser pour échanger des données entre Snowflake et Spark. Vous fournissez ensuite au connecteur les informations d’emplacement, ainsi que les informations d’identification AWS nécessaires pour l’emplacement. Pour plus de détails, voir Authentification S3 pour l’échange de données dans le chapitre suivant.

Important

Si vous utilisez un compartiment S3 externe, le connecteur ne supprime pas automatiquement les données intermédiaires/temporaires de cet emplacement. Par conséquent, il est préférable d’utiliser un compartiment ou un chemin spécifique (préfixe), et de définir une politique de cycle de vie sur le compartiment/chemin pour nettoyer automatiquement les anciens fichiers. Voir la documentation Amazon S3 pour plus de détails sur la configuration d’une politique de cycle de vie.

Préparation d’un conteneur de stockage Azure Blob

Préparez un conteneur de stockage externe Azure Blob que le connecteur peut utiliser pour échanger des données entre Snowflake et Spark. Vous fournissez ensuite au connecteur les informations d’emplacement, ainsi que les informations d’identification Azure nécessaires pour l’emplacement. Pour plus de détails, voir Authentification Azure pour l’échange de données dans le chapitre suivant.