Sparkコネクターのインストールと構成

コネクターの複数のバージョンがサポートされていますが、Snowflakeでは、最新バージョンのコネクターを使用することを強くお勧めします。最新バージョンに関するリリース情報を表示するには、 Sparkコネクタリリースノート (サイドバーにあるリンク)をご参照ください。

このトピックの手順を使用して、サポートされているすべてのバージョンのコネクターをインストールして構成できます。

このトピックの内容:

サポートされているバージョン

Snowflakeは、コネクターの複数のバージョンをサポートしています。

コネクターのバージョン:

2.x

対応するSparkバージョン:

Spark 3.4、3.3、3.2

対応するScalaバージョン:

Scala 2.13、2.12

データソース名:

net.snowflake.spark.snowflake --- v2.4.14(またはそれ以上)のコネクタは、データソース名として snowflake を許可します

パッケージ名(インポートされたクラスの場合):

net.snowflake.spark.snowflake

パッケージ配布:

Maven Central RepositoryのSpark用Snowflakeコネクタのページ

ソースコード:

spark-snowflake(GitHub). master (最新バージョンの場合)、 . previous_spark_version (以前のバージョンの場合)

さまざまなバージョンの開発者ノートは、ソースコードでホストされています。

注釈

SnowflakeのSparkコネクターは、通常、Sparkの最新の3つのバージョンをサポートしています。Sparkバージョンに固有のコネクタバージョンをダウンロードします。

たとえば、Sparkバージョン3.4でバージョン2.12.0のコネクタを使用するには、コネクタの 2.12.0-spark_3.4 バージョンをダウンロードします。

要件

SparkでSnowflakeをインストールして使用するには、次が必要です。

  • サポートされているオペレーティングシステム。サポートされているオペレーティングシステムのリストについては、 オペレーティングシステムのサポート をご参照ください。

  • Spark用Snowflakeコネクタ。

  • Snowflake JDBC ドライバー(コネクタのバージョンと互換性のあるバージョン)。

  • 自己ホスト型または次のいずれかでホストされるApache Spark環境:

  • 加えて、2つのシステム間のステージングゾーンとして、専用のAmazon S3バケットまたはAzure Blobストレージコンテナを使用できます。ただし、これは、すべてのデータ交換に一時的なSnowflake内部ステージ(デフォルト)を使用するコネクターのバージョン2.2.0(以降)では必要ありません。

  • 接続で使用されるロールには、読み取りまたは書き込みを行うテーブルを含むスキーマに対する USAGE および CREATE STAGE 権限が必要です。

注釈

DatabricksまたはQuboleを使用してSparkをホストしている場合、Spark用のSnowflakeコネクター(またはその他の要件)をダウンロードまたはインストールする必要はありません。DatabricksとQuboleの両方がコネクターを統合して、ネイティブ接続を提供します。

詳細については、以下をご参照ください。

OCSP コネクターまたはドライバーバージョンの確認

Snowflakeは、Snowflakeへの接続の際、 OCSP を使用して証明書チェーンを評価します。ドライバーまたはコネクターのバージョンとその構成により、 OCSP の動作が決まります。ドライバーまたはコネクタのバージョン、それらの構成、および OCSP の動作の詳細については、 OCSP 設定 をご参照ください。

コネクターのダウンロードとインストール

このセクションの手順は、Spark用のSnowflakeコネクターのバージョン2.x以降に関連しています。

重要

Snowflakeは定期的に新しいバージョンのコネクターをリリースします。新しいバージョンをインストールするたびに、次のインストールタスクを実行する必要があります。これは、Spark用コネクタの前提条件であるSnowflake JDBC ドライバーにも適用されます。

ステップ1:Spark用Snowflakeコネクタの最新バージョンをダウンロードする

Snowflakeでは、コネクタの複数のバージョンを提供しています。以下に基づいて、適切なバージョンをダウンロードします。

  • 使用するSpark用Snowflakeコネクタのバージョン。

  • 使用しているSparkのバージョン。

  • 使用しているScalaのバージョン。

Snowflake Sparkコネクタは、Mavenからダウンロードできます。ドライバーを構築する場合は、Githubからソースコードにアクセスできます。

Maven Central Repository

サポートされるScalaバージョン(2.12、および2.13)ごとに、個別のパッケージアーティファクトがSnowflakeにより提供されます。これらのScalaバージョンごとに、異なるバージョンのSparkコネクタと、異なるバージョンのSparkをサポートする個別のアーティファクトがSnowflakeにより提供されます。

Sparkコネクタをダウンロードするには、

  1. 使用しているScalaのバージョンをMavenリポジトリで検索します。

    次のスクリーンショットは、検索結果ページの例を示しています。

    MavenのSpark用Snowflakeコネクタのダウンロードページ

    Latest Version 列には、利用可能な最新バージョンのドライバーがリストされます。

    個々のパッケージでは、次の命名規則を使用します。

    N.N.N-spark_P.P
    
    Copy

    条件:

    • N.N.N は、Snowflakeバージョン(例: 2.12.0)。

    • P.P は、Sparkバージョン(例: 3.4)。

    例:

    2.12.0-spark_3.4
    
    Copy
  2. 使用しているサポートされているバージョンのSparkのアーティファクトが表示されない場合は、 Latest Version 列の下の all リンクをクリックします。

  3. Download 列の jar リンクをクリックして、 JAR ファイルをダウンロードします。

  4. パッケージの署名を確認する 場合は、署名ファイルもダウンロードする必要があります。

    1. Version 列の N.N.N-spark_P.P リンクをクリックして、バージョンのページを表示します。

    2. net.snowflake : spark-snowflake_x.xx : N.N.N-spark_P.P リンクをクリックして、そのバージョンのアーティファクトをリストするページをロードします(x.xx は、使用する予定のScalaバージョン -- 例: 2.12)。

    3. spark-snowflake_2.1x-N.N.N-spark_P.P.jar.asc リンクをクリックして、署名ファイルをダウンロードします。

GitHub

Spark用のSnowflakeコネクターのソースコードは GitHub で入手できます。ただし、コンパイルされたパッケージは GitHub では入手できません。コンパイルされたパッケージは、 Maven からダウンロードできます。

ステップ2: Snowflake JDBC ドライバーの互換バージョンをダウンロードする

次に、使用しているSnowflake Sparkコネクタのバージョンと互換性のあるSnowflake JDBC ドライバーのバージョンをダウンロードする必要があります。

Snowflake JDBC ドライバーは、 Maven Central Repositoryの JDBC ドライバーページ を介して標準Javaパッケージとして提供されます。パッケージを .jar ファイルとしてダウンロードするか、パッケージを直接参照します。これらの手順は、パッケージを参照していることを前提としています。

使用しているSnowflake SparkコネクタのバージョンでサポートされているSnowflake JDBC ドライバーのバージョンを見つけるには、 Snowflake Connector for Spark リリースノート をご参照ください。

Snowflake JDBC ドライバーのダウンロードとインストールの詳細については、 JDBC ドライバーのダウンロード/統合 をご参照ください。

ステップ3(オプション): Sparkパッケージ署名用Snowflakeコネクタを確認する

Sparkパッケージ署名用Snowflakeコネクタを確認するには、

  1. 公開キーサーバーから、使用しているSpark用SnowflakeコネクタのバージョンのSnowflake GPG 公開キーをダウンロードしてインポートします。

    • バージョン2.11.1以上の場合、

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 630D9F3CAB551AF3
    • バージョン2.8.2から2.11.0までの場合:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 37C7086698CB005C
    • バージョン2.4.13から2.8.1までの場合:

      $ gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys EC218558EABB25A1
    • バージョン2.4.12以下の場合:

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

    注釈

    このコマンドが次のエラーを発生して失敗した場合、

    gpg: keyserver receive failed: Server indicated a failure
    
    Copy

    次に、キーサーバーにポート80を使用することを指定します。

    gpg --keyserver hkp://keyserver.ubuntu.com:80  ...
    
    Copy
  2. gpg --verify コマンドを実行して、パッケージの署名を確認します。

    --verify コマンドラインフラグには、署名ファイルとして 以前にダウンロード した .asc ファイルを指定し、署名済みデータを含むファイルとして JAR ファイルを指定します。

    $ 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

    条件:

    • x.xx は、Scalaバージョン(例: 2.12)。

    • N.N.N はSpark用Snowflakeコネクタのバージョン(例: 2.12.0)。

    • P.P は、Sparkバージョン(例: 3.4)。

    注釈

    署名の検証により、次のような警告が生成されます。

    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

    警告を回避するために、Snowflake GPG 公開キーの暗黙的な信頼を付与できます。

  3. ローカル環境には複数の GPG キーを含めることができます。ただし、セキュリティ上の理由から、Snowflakeは定期的に公開 GPG キーをローテーションします。ベストプラクティスとして、最新の署名済みパッケージで最新のキーが機能することを確認した後、既存の公開キーを削除することをお勧めします。例:

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

ステップ4:ローカルSparkクラスターまたはAmazon EMR がホストするSpark環境を構成する

ローカルのSparkインストール、または Amazon EMR でのSparkインストール がある場合は、Snowflake JDBC ドライバーとSparkコネクタの両方を含めるように spark-shell プログラムを構成する必要があります。

  • Snowflake JDBC ドライバーを含めるには、 --package オプションを使用して、 Maven Central Repositoryの JDBC ドライバーページ から JDBC パッケージを参照し、 使用するドライバーの正確なバージョン (例: net.snowflake:snowflake-jdbc:3.13.30)を提供します。

  • Sparkコネクタを含めるには、 --package オプションを使用して、Maven Central Repositoryでホストされている適切なパッケージ(Scala 2.12 または Scala 2.13)を参照し、使用するドライバーの正確なバージョン(例: net.snowflake:spark-snowflake_2.12:2.12.0-spark_3.4)を提供します。

例:

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

追加パッケージのインストール(必要な場合)

Sparkのインストールによっては、コネクタに必要な一部のパッケージが欠落している場合があります。 spark-shell の適切なフラグを使用して、欠落しているパッケージをインストールに追加できます。

  • --packages

  • --jars (パッケージが .jar ファイルとしてダウンロードされた場合)

必要なパッケージは、 --packages フラグを使用してパッケージを参照するための構文(バージョン番号を含む)とともに以下にリストされています。

  • 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

たとえば、Apacheパッケージが欠落している場合に、参照でパッケージを追加するには、次を実行します。

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

ファイル用の外部の場所の準備

SnowflakeとSparkの間で転送するファイルの外部の場所を準備する必要が生じることがあります。

次のいずれかの状況に該当する場合、このタスクが必要です。

  • 36時間より長い時間がかかるジョブを実行する場合。これは、データ交換のために内部ステージにアクセスするためにコネクターが使用するトークンの最大期間です。

  • Spark用のSnowflakeコネクターのバージョンが2.1.x以下の場合(ジョブの所要時間が36時間未満の場合でも)。

    注釈

    現在、コネクターのv2.2.0(またはそれ以降)を使用していない場合は、Snowflakeは最新バージョンにアップグレードすることを強くお勧めします。

AWS 外部S3バケットの準備

コネクターでSnowflakeとSparkの間でデータを交換するために使用する外部S3バケットを準備します。次に、場所に必要な AWS 認証情報とともに、場所情報をコネクターに提供します。詳細については、次のトピックの「データ交換のためのS3の認証」をご参照ください。

重要

外部S3バケットを使用する場合、コネクタはこの場所から中間/仮データを自動的に削除しません。そのため、特定のバケットまたはパス(プレフィックス)を使用し、バケット/パスにライフサイクルポリシーを設定して、古いファイルを自動的にクリーンアップすることをお勧めします。ライフサイクルポリシーの設定の詳細については、 Amazon S3のドキュメント をご参照ください。

Azure Blobストレージコンテナの準備

コネクターでSnowflakeとSparkの間でデータを交換するために使用する外部Azure Blobストレージコンテナを準備します。次に、場所に必要なAzure認証情報とともに、場所情報をコネクターに提供します。詳細については、次のトピックの「データ交換のためのAzureの認証」をご参照ください。