安装和配置 Spark Connector¶
支持该连接器的多种版本;但是,Snowflake 强烈建议使用该连接器的最新版本。要查看有关最新版本的发行信息,请参阅 *Spark Connector 版本说明*(侧栏中的链接)。
本主题中的说明可用于安装和配置该连接器所有受支持的版本。
本主题内容:
支持的版本¶
Snowflake 支持该连接器的多个版本:
连接器版本: |
2.x |
支持的 Spark 版本: |
Spark 3.4、3.3、3.2 |
支持的 Scala 版本: |
Scala 2.13、2.12 |
数据源名称: |
|
包名称(对于导入的类): |
|
包分发: |
Maven Central Repository 中的“Snowflake Connector for Spark”页面 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20spark-snowflake&sort=published) |
源代码: |
spark-snowflake (GitHub) (https://github.com/snowflakedb/spark-snowflake): . |
不同版本的开发者说明与源代码一起托管。
备注
Snowflake Spark Connector 通常支持 Spark 的三个最新版本。请下载特定于您的 Spark 版本的连接器版本。
例如,要将该连接器的 2.12.0 版与 Spark 3.4 版一起使用,请下载该连接器的 2.12.0-spark_3.4
版本。
要求¶
要安装 Snowflake 并将其与 Spark 一起使用,您需要满足以下条件:
安装了支持的操作系统。有关支持的操作系统的列表,请参阅 操作系统支持。
安装了 Snowflake Connector for Spark。
安装了 Snowflake JDBC 驱动程序(与该连接器的版本兼容的版本)。
设置了 Apache Spark 环境(自托管或在以下任一环境中托管):
Qubole Data Service (https://www.qubole.com/products/qubole-data-service/apache-spark-service/)。
Databricks (http://www.databricks.com)。
Amazon EMR (http://aws.amazon.com/elasticmapreduce)。
此外,您可以使用专用的 Amazon S3 桶或 Azure Blob 存储容器作为两个系统之间的暂存区;但是,该连接器的 2.2.0 版(及更高版本)不需要这样做,因为该版本默认使用临时的 Snowflake 内部暂存区进行所有数据交换。
连接中使用的角色必须对架构(包含您通过 Qubole 读取或写入的表)具有 USAGE 和 CREATE STAGE 权限。
备注
如果您使用 Databricks 或 Qubole 托管 Spark,则无需下载或安装 Snowflake Connector for Spark(或任何其他要求的组件)。Databricks 和 Qubole 都集成了该连接器,以提供原生连接。
有关更多详细信息,请参阅:
验证 OCSP 连接器或驱动程序版本¶
在连接到 Snowflake 时,Snowflake 使用 OCSP 评估证书链。驱动程序或连接器版本及其配置都决定了 OCSP 行为。有关驱动程序或连接器版本及其配置和 OCSP 行为的更多信息,请参阅 OCSP 配置。
下载并安装该连接器¶
本部分中的说明适用于 Snowflake Connector for Spark 的 2.x 版及更高版本。
重要
Snowflake 会定期发布该连接器的新版本。每次安装新版本时,都必须执行以下安装任务。这也适用于 Snowflake JDBC 驱动程序,它是 Spark Connector 的必备组件。
第 1 步:下载 Snowflake Connector for Spark 的最新版本¶
Snowflake 提供该连接器的多个版本。根据以下版本下载合适的版本:
您要使用的 Snowflake Connector for Spark 版本。
您正在使用的 Spark 版本。
您正在使用的 Scala 版本。
您可以从 Maven 下载 Snowflake Spark Connector。如果您想构建驱动程序,可以从 Github 访问源代码。
Maven Central Repository¶
Snowflake 为每个受支持的 Scala 版本(2.12 和 2.13)提供单独的包构件。对于每个 Scala 版本,Snowflake 提供 Spark Connector的不同版本,以及支持 Spark 不同版本的单独构件。
要下载 Spark Connector,请执行以下步骤:
在 Maven 存储库中搜索您正在使用的 Scala 版本:
Scala 2.13 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20a%3Aspark-snowflake_2.13)
Scala 2.12 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20a%3Aspark-snowflake_2.12)
以下屏幕截图提供了搜索结果页面的示例:
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¶
在 GitHub 上,可找到 Spark Snowflake 连接器的源代码。但是,在 GitHub 上无法找到经过编译的包。您可以通过 Maven 下载经过编译的包。
第 2 步:下载 Snowflake JDBC 驱动程序的兼容版本¶
接下来,需要下载与您正使用的 Snowflake Spark 连接器版本兼容的 Snowflake JDBC 驱动程序版本。
在 Maven Central Repository 的 JDBC Driver 页面 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20snowflake-jdbc) 中,Snowflake JDBC 驱动程序作为标准的 Java 包提供。您可以将该包作为 .jar
文件下载,也可以直接引用该包。这些说明假设您引用了该包。
要查找您正使用的 Snowflake Spark Connector 版本支持的 Snowflake JDBC 驱动程序版本,请参阅 Snowflake Connector for Spark 版本说明。
有关下载和安装 Snowflake JDBC 驱动程序的更多详细信息,请参阅 下载/集成 JDBC 驱动程序。
第 3 步(可选):验证 Snowflake Connector for Spark 包签名¶
要验证 Snowflake Connector for Spark 包签名,请执行以下步骤:
从公钥服务器中,下载并导入您正使用的 Snowflake Connector for Spark 版本的 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
是 Snowflake Connector for Spark 的版本(例如 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 安装 (http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-spark-shell.html),则需要配置 spark-shell
程序,以包含 Snowflake JDBC 驱动程序和 Spark Connector:
要包含 Snowflake JDBC 驱动程序,请使用
--package
选项引用来自 Maven Central Repository 的 JDBC Driver 页面 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20snowflake-jdbc) 的 JDBC 包,并提供 您要使用的驱动程序的确切版本 (例如net.snowflake:snowflake-jdbc:3.13.30
)。要包含 Spark Connector,请使用
--package
选项引用在 Maven Central Repository 中托管的合适的包(Scala 2.12 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20a%3Aspark-snowflake_2.12) 或者 Scala 2.13 (https://central.sonatype.com/search?q=g%3Anet.snowflake%20a%3Aspark-snowflake_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 小时的作业(该连接器使用令牌访问内部暂存区以交换数据,但时间不能超过 36 小时)。
Snowflake Connector for Spark 版本为 2.1.x 或更低版本(即使作业所需的时间少于 36 小时)。
备注
如果当前没有使用该连接器的 v2.2.0(或更高版本),Snowflake 强烈建议升级到最新版本。
准备一个 AWS 外部 S3 桶¶
准备一个外部 S3 桶,供该连接器用于在 Snowflake 和 Spark 之间交换数据。然后,您向该连接器提供位置信息,以及位置的必要 AWS 凭据。有关更多详细信息,请参阅下一个主题中的 对 S3 进行身份验证以进行数据交换。
重要
如果您使用外部 S3 桶,该连接器不会自动从此位置移除任何中间/临时数据。因此,最好使用特定的桶或路径(前缀),并在桶/路径上设置生命周期策略,以自动清理旧文件。有关配置生命周期策略的更多详细信息,请参阅 Amazon S3 文档 (http://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html)。
准备 Azure Blob 存储容器¶
准备一个外部 Azure Blob 存储容器,供该连接器用于在 Snowflake 和 Spark 之间交换数据。然后,您向该连接器提供位置信息,以及位置的必要 Azure 凭据。有关更多详细信息,请参阅下一个主题中的 对 Azure 进行身份验证以进行数据交换。