这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

Apache Spark 集成

Apache Spark 是一个开源的通用群集计算框架。有关详细信息,请参阅 Apache Spark 网站。Vertica 提供了一个安装到 Spark 中的 Spark 连接器,可用来在 Vertica 和 Spark 之间传输数据。

使用该连接器,您可以:

  • 将大量数据从 Spark DataFrames 复制到 Vertica 表。此功能可用来将 Spark 分析保存在 Vertica 中。

  • 将数据从 Vertica 复制到 Spark RDD 或 DataFrame,以便与 Python、R、Scala 和 Java 一起使用。该连接器在加载数据之前有效地将列选择和谓词筛选下推到 Vertica。

通过该连接器,您可以使用 Spark 为 Vertica 预处理数据,并在 Spark 应用程序中使用 Vertica 数据。您甚至可以在 Vertica 和 Spark 之间往返传输数据 — 将数据从 Vertica 复制到 Spark 进行分析,然后将该分析结果保存回 Vertica。

有关该连接器的更多信息,请参阅 GitHub 上的 spark-connector 项目

连接器的工作原理

Spark 连接器是一个库,您可以将其合并到 Spark 应用程序中,以便从/向 Vertica 读取/写入数据。在传输数据时,该连接器使用中间存储位置作为 Vertica 和 Spark 群集之间的缓冲区。通过中间存储位置,可以让 Vertica 和 Spark 使用其群集中的所有节点并行传输数据。

将数据从 Vertica 传输到 Spark 时,连接器要求 Vertica 将数据作为 Parquet 文件写入中间存储位置。在此过程中,连接器将所需的列和任何 Spark 数据筛选器作为 SQL 下推到 Vertica。这种下推让 Vertica 可以预筛选数据,使其仅复制 Spark 需要的数据。Vertica 完成数据复制后,连接器会让 Spark 将其从中间位置加载到 DataFrame 中。

将数据从 Spark 传输到 Vertica 时,过程相反。Spark 将数据写入中间存储位置。然后它连接到 Vertica 并运行 COPY 语句,以将数据从中间位置加载到表中。

获取连接器

Spark 连接器是一个开源项目。有关该连接器的最新信息,请访问 GitHub 上的 spark-connector 项目。要在连接器有更新时收到警报,您可以登录 GitHub 帐户并单击任何项目页面上的通知 按钮。

您可以通过三种方式获取 Spark 连接器:

  • Maven Central 获取连接器。如果您使用 Gradle、Maven 或 SBT 来管理 Spark 应用程序,您可以向项目添加一个依赖项,以自动获取连接器及其依赖项并将它们添加到您的 Spark 应用程序中。请参阅下文中的 从 Maven Central 获取连接器

  • 从 GitHub 项目的发布页面下载预编译的程序集。下载连接器后,您必须配置 Spark 方可使用它。请参阅下面的将连接器部署到 Spark 群集

  • 克隆连接器项目并对其进行编译。如果您需要尚未发布的功能或错误修复,则此选项非常有用。请参阅下面的编译连接器

有关部署和使用连接器的详细说明,请参阅 GitHub 上的 Spark 连接器项目

从 Maven Central 获取连接器

Vertica Spark 连接器可从 Maven Central 存储库获取。如果您的构建工具支持从连接器下载依赖项,那么使用 Maven Central 是获取连接器的最简单方法。

如果您的 Spark 项目由 Gradle、Maven 或 SBT 管理,您可以通过在其配置文件中将 Spark 连接器列为依赖项来添加它。如果您的构建工具没有自动启用,您可能还必须启用 Maven Central。

例如,假设您使用 SBT 来管理 Spark 应用程序。在这种情况下,Maven Central 存储库默认启用。您需要做的就是将 com.vertica.spark 依赖项添加到 build.sbt 文件中。

请参阅 Maven 存储库站点上的 com.vertica.spark 页面,了解有关构建系统的可用 Spark 连接器版本和依赖项信息的更多信息。

编译连接器

如果您想测试尚未发布的新功能或错误修复,可以选择编译 Spark 连接器。如果您计划投交自己的功能,则必须编译连接器。

要编译连接器,您需要:

  • SBT 构建工具。要编译连接器,您必须安装 SBT 及其所有依赖项(包括 Java SDK 版本)。有关要求和安装说明,请参阅 SBT 文档

  • git,以从 GitHub 克隆 Spark 连接器 V2 源代码。

作为快速概览,在 Linux 命令行上执行以下命令将下载源代码并将其编译为程序集文件:

$ git clone https://github.com/vertica/spark-connector.git
$ cd spark-connector/connector
$ sbt assembly

编译后,连接器位于 target/scala-n.n/spark-vertica-connector-assembly-x.x.jarn.n 是当前支持的 Scala 版本,x.x 是 Spark 连接器的当前版本。

有关详细要求和编译说明,请参阅连接器的 GitHub 项目中的 CONTRIBUTING 文档。

编译连接器后,必须将其部署到 Spark 群集。有关详细信息,请参阅下一部分。

将连接器部署到 Spark 群集

如果您从 GitHub 下载或自己编译了 Spark 连接器,则必须先将其部署到 Spark 群集,然后方可使用。两个选项包括将其复制到 Spark 节点并将其包含在 spark-submitspark-shell 命令中,或者将其部署到整个群集并自动加载。

从命令行加载 Spark 连接器

使用连接器的最快方法是在执行 spark-submitspark-shell 命令时将其包含在 --jars 实参中。为了能够在命令行中使用连接器,您必须首先将其程序集 JAR 复制到您将在其上运行命令的 Spark 节点。然后将程序集 JAR 文件的路径添加为 --jars 命令行实参的一部分。

例如,假设您将程序集文件复制到 Spark 节点上的当前目录。然后,您可以在使用以下命令启动 spark-shell 时加载连接器:

spark-shell --jars spark-vertica-connector-assembly-x.x.jar

您还可以在使用 spark-submit 和以下命令提交 Spark 作业时启用连接器:

spark-submit --jars spark-vertica-connector-assembly-x.x.jar

将 Spark 配置为自动加载连接器

您可以将 Spark 群集配置为自动加载连接器。以这种方式部署连接器可确保 Spark 连接器可用于群集上的所有 Spark 应用程序。

要让 Spark 自动加载 Spark 连接器:

  1. 将 Spark 连接器的程序集 JAR 文件复制到 Spark 群集中所有节点上的相同路径。例如,在 Linux 上,您可以将 spark-vertica-connector-assembly-x.x.jar 文件复制到每个 Spark 节点上的 /usr/local/lib 目录。该文件必须位于每个节点上的相同位置。

  2. 在群集中每个节点的 Spark 安装目录中,编辑 conf/spark-defaults.conf 文件以添加或更改以下行:

    spark.jars /path_to_assembly/spark-vertica-connector-assembly-x.x.jar
    

    例如,如果您将程序集 JAR 文件复制到 /usr/local/lib,您将添加:

    spark.jars /usr/local/lib/spark-vertica-connector-assembly-x.x.jar
    
  3. 通过启动 Spark shell 并输入以下语句来测试您的配置:

    import com.vertica.spark._
    

    如果语句成功完成,则 Spark 能够正确定位并加载 Spark 连接器库。

以前的连接器版本

Vertica Spark 连接器是一个可从 GitHub 获得的开源项目。它的发布计划与 Vertica 服务器不同。

Vertica 11.0.2 之前的版本分发了 Spark 连接器的闭源专用版本。此旧版本不再受支持,并且不随 Vertica 服务器安装包一起分发。

较新的开源 Spark 连接器与旧版连接器在以下方面有所不同:

  • 新连接器使用 Spark V2 API。与使用较旧的 Spark API 的传统连接器相比,使用这种较新的 API 使其更具前瞻性。

  • 主类名称已更改。此外,主类有几个重命名的配置选项和一些移除的选项。有关这些更改的列表,请参阅从旧 Vertica Spark 连接器迁移

  • 它支持的功能比旧连接器更多,例如 Kerberos 身份验证和 S3 中间存储。

  • 它被编译为一个程序集,其中包含有支持库,例如 Vertica JDBC 库。

  • 其分发独立于 Vertica 服务器。您可以直接从 GitHub 项目下载它。它也可以从 Maven Central 存储库中获取,因此您可以更轻松地将其集成到 Gradle、Maven 或 SBT 工作流中。

  • 它是一个与 Vertica 服务器发布周期无关的开源项目。新功能和错误修复不必等待 Vertica 发布。您还可以投交自己的功能和修复程序。

如果您有使用之前版本的 Spark 连接器的 Spark 应用程序,请参阅从旧 Vertica Spark 连接器迁移以了解有关如何更新 Spark 代码以使用新连接器的说明。

如果您仍在使用 3.0 之前的 Spark 版本,则必须使用旧版 Spark 连接器。新的开源版本不兼容较旧版本的 Spark。您可以通过下载并解压 11.0.2 版之前的 Vertica 安装包来获取较旧的连接器。

1 - 从旧 Vertica Spark 连接器迁移

如果您有使用闭源 Vertica Spark 连接器的现有 Spark 应用程序,则必须更新它们以使用较新的开源连接器。新连接器具有新的功能、更好的性能,并且还在持续开发中。旧连接器已停止使用。

旧连接器和新连接器之间的部署更改

旧连接器仅随 Vertica 服务器安装一起分发。新连接器通过多个渠道分发,为您提供更多部署方式。

新 Spark 连接器可从 Maven Central 获取。如果您使用 Gradle、Maven 或 SBT 来管理 Spark 应用程序,您可能会发现使用依赖项部署 Spark 连接器比在 Spark 群集上手动安装更方便。将连接器作为依赖项集成到您的 Spark 项目中,可以轻松更新到较新版本的连接器 — 只需在依赖项中更新所需版本即可。有关详细信息,请参阅从 Maven Central 获取连接器

您还可以下载预编译的连接器程序集或从源代码构建它。在这种情况下,您必须将连接器部署到您的 Spark 群集。旧连接器依赖于 Vertica JDBC 驱动程序,需要您单独包含它。新连接器是一个包含所有依赖项的程序集,包括 JDBC 驱动程序。您只需将包含 Spark 连接器的单个 JAR 文件部署到您的 Spark 群集即可。

您可以让 Spark 同时加载旧连接器和新连接器,因为新连接器的主类名称不同(见下文)。通过此重命名,您可以将新连接器添加到 Spark 配置文件中,而无需立即将使用旧连接器的所有 Spark 应用程序移植到新 API。您可以将新的程序集 JAR 文件添加到 spark-defaults.conf 文件中的 spark-jars 列表中。

API 变更

从旧连接器到新连接器的一些 API 变更需要更改您的 Spark 应用程序。

不再支持 VerticaRDD 类

旧连接器支持名为 VerticaRDD 的类,以使用 Spark 弹性分布式数据集 (RDD) 功能从 Vertica 加载数据。新连接器不支持这个单独的类。相反,如果您想直接操作 RDD,请通过您使用 DataSource API 创建的 DataFrame 对象来访问它。

DefaultSource 类重命名为 VerticaSource

旧连接器中的主类名为 DataSource。在新连接器中,此类已重命名为 VerticaSource。这种重命名支持两个连接器共存,允许您逐步转换 Spark 应用程序。

要使现有 Spark 应用程序使用新连接器,您必须将对 DataSource 类的调用更改为 VerticaSource 类。例如,假设您的 Spark 应用程序使用以下方法调用来从旧连接器读取数据:

spark.read.format("com.vertica.spark.datasource.DefaultSource").options(opts).load()

那么,为了让它使用新连接器,应使用以下方法调用:

spark.read.format("com.vertica.spark.datasource.VerticaSource").options(opts).load()

发生变化的 API 选项

除了将 DataSource 类重命名为 VerticaSource 之外,主连接器类的一些选项名称也发生了变化。不再支持其他选项。如果要将 Spark 应用程序从旧连接器移植到使用以下选项之一的新连接器,则必须更新代码:

此外,新连接器还添加了支持 Kerberos 身份验证等新功能的选项。有关连接器的 VerticaSource 选项 API 的详细信息,请参阅 Vertica Spark 连接器 GitHub 项目

利用新功能

新 Vertica Spark 连接器提供您可能想要利用的新功能。

目前,最值得注意的新功能是:

  • Kerberos 身份验证。此功能允许您配置连接器以实现与 Vertica 的无密码连接。有关使用此功能的详细信息,请参阅 Vertica Spark 连接器 GitHub 项目中的 Kerberos 文档

  • 支持使用 S3 进行中间存储。通过此选项,您可以避免仅为托管 HDFS 存储位置而设置 Hadoop 群集。请参阅连接器 GitHub 站点上的 S3 用户指南