Sparkコネクターのインストールと構成¶
コネクターの複数のバージョンがサポートされていますが、Snowflakeでは、最新バージョンのコネクターを使用することを強くお勧めします。最新バージョンに関するリリース情報を表示するには、 Sparkコネクタリリースノート (サイドバーにあるリンク)をご参照ください。
このトピックの手順を使用して、サポートされているすべてのバージョンのコネクターをインストールして構成できます。
このトピックの内容:
サポートされているバージョン¶
Snowflakeは、コネクターの複数のバージョンをサポートしています。
コネクターのバージョン: |
2.x |
対応するSparkバージョン: |
Spark 3.4、3.3、3.2 |
対応するScalaバージョン: |
Scala 2.13、2.12 |
データソース名: |
|
パッケージ名(インポートされたクラスの場合): |
|
パッケージ配布: |
|
ソースコード: |
spark-snowflake(GitHub): . |
さまざまなバージョンの開発者ノートは、ソースコードでホストされています。
注釈
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コネクタをダウンロードするには、
使用しているScalaのバージョンをMavenリポジトリで検索します。
次のスクリーンショットは、検索結果ページの例を示しています。
Latest Version 列には、利用可能な最新バージョンのドライバーがリストされます。
個々のパッケージでは、次の命名規則を使用します。
N.N.N-spark_P.P
条件:
N.N.N
は、Snowflakeバージョン(例: 2.12.0)。P.P
は、Sparkバージョン(例: 3.4)。
例:
2.12.0-spark_3.4
使用しているサポートされているバージョンのSparkのアーティファクトが表示されない場合は、 Latest Version 列の下の all リンクをクリックします。
Download 列の jar リンクをクリックして、 JAR ファイルをダウンロードします。
パッケージの署名を確認する 場合は、署名ファイルもダウンロードする必要があります。
Version 列の N.N.N-spark_P.P リンクをクリックして、バージョンのページを表示します。
net.snowflake : spark-snowflake_x.xx : N.N.N-spark_P.P リンクをクリックして、そのバージョンのアーティファクトをリストするページをロードします(
x.xx
は、使用する予定のScalaバージョン -- 例:2.12
)。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コネクタを確認するには、
公開キーサーバーから、使用している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
次に、キーサーバーにポート80を使用することを指定します。
gpg --keyserver hkp://keyserver.ubuntu.com:80 ...
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>"
条件:
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.
警告を回避するために、Snowflake GPG 公開キーの暗黙的な信頼を付与できます。
ローカル環境には複数の GPG キーを含めることができます。ただし、セキュリティ上の理由から、Snowflakeは定期的に公開 GPG キーをローテーションします。ベストプラクティスとして、最新の署名済みパッケージで最新のキーが機能することを確認した後、既存の公開キーを削除することをお勧めします。例:
$ gpg --delete-key "Snowflake Computing"
ステップ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
追加パッケージのインストール(必要な場合)¶
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
ファイル用の外部の場所の準備¶
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の認証」をご参照ください。