安装和配置 Spark Connector

支持该连接器的多种版本;但是,Snowflake 强烈建议使用该连接器的最新版本。要查看有关最新版本的发行信息,请参阅 *Spark Connector 版本说明*(侧栏中的链接)。

本主题中的说明可用于安装和配置该连接器所有受支持的版本。

本主题内容:

支持的版本

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 中的“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): . master (对于最新版本), . previous_spark_version (对于早期版本)

不同版本的开发者说明与源代码一起托管。

备注

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,请执行以下步骤:

  1. 在 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)

    以下屏幕截图提供了搜索结果页面的示例:

    Maven 中的 Snowflake Connector for Spark 下载页面

    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

在 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 包签名,请执行以下步骤:

  1. 从公钥服务器中,下载并导入您正使用的 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
    
    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 是 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.
    
    Copy

    为了避免警告,您可以授予 Snowflake GPG 公钥隐式信任。

  3. 您的本地环境可以包含多个 GPG 密钥;然而,出于安全原因,Snowflake 会定期轮换 GPG 公钥。作为最佳实践,我们建议在确认最新密钥适用于最新签名的包后删除现有公钥。例如:

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

第 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
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 小时的作业(该连接器使用令牌访问内部暂存区以交换数据,但时间不能超过 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 进行身份验证以进行数据交换

语言: 中文