ScyllaDB 与 Databricks 集成指南:基于 Spark Cassandra Connector 的完整实操
2026/9/15 19:04:11 网站建设 项目流程

ScyllaDB 与 Databricks 集成指南:基于 Spark Cassandra Connector 的完整实操

【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb

本文是一份面向数据工程师与平台开发者的实操指南,讲解如何将 ScyllaDB(基于 Seastar 框架的 NoSQL 数据存储,兼容 Apache Cassandra 与 Amazon DynamoDB)与 Databricks Spark 集群打通,让 Databricks Notebook 直接以 DataFrame 形式读写 ScyllaDB 中的数据。读完本文,你将掌握 Databricks 集群的 Spark 配置要点、Maven 依赖安装方法,并能独立完成从 ScyllaDB 建库建表到 Databricks 查询展示的端到端验证。本文所有命令与配置均可在 ScyllaDB 官方文档与仓库源码中一一对应查证。

为什么 ScyllaDB 能与 Databricks 集成

ScyllaDB 在 CQL 二进制协议层面与 Apache Cassandra 完全兼容,这意味着任何使用 CQL 协议的驱动(Driver)都可以直接连接 ScyllaDB,无需做任何协议适配。官方文档明确指出:

ScyllaDB is Apache Cassandra compatible at the CQL binary protocol level, and any driver which uses CQL will work with ScyllaDB. Any application which uses a CQL driver will work with ScyllaDB, for example, Databricks Spark cluster.

这一兼容性正是集成的基石:Databricks 上的 Spark 集群通过 Datastax Spark Cassandra Connector 走 CQL 协议访问数据,因此 ScyllaDB 天然可以作为 Databricks 的持久化数据源,用于批量 ETL、数据科学分析等场景。仓库中另有 ScyllaDB 与 Spark 集成示例 可作延伸阅读,其中特别提醒:Spark Cassandra Connector 在 1.3.0 之前的版本同时依赖 Thrift 与 CQL,无法与 ScyllaDB 正常配合,升级到 1.3.0+(纯 CQL)后才能工作——这正是"凡是 CQL 驱动皆可连"这一原则的佐证。

资源清单

本文示例使用以下资源(你的实际需求可能有所不同,但所需资源类型一致):

  • ScyllaDB 集群(已安装并运行,可访问)
  • Databricks 账号(可创建集群与 Notebook 的工作区)

集成前置检查

在开始集成之前,需要确认以下两点:

  1. ScyllaDB 已安装并正常运行,且你知道 ScyllaDB 服务器的 IP 地址。
  2. ScyllaDB 的 CQL 端口(9042)可达。ScyllaDB 默认通过 9042 端口提供 CQL 原生传输服务(native transport),可使用如下命令验证:
curl <scylla_IP>:9042

关于端口 9042 的默认值,可以在仓库配置文件中直接验证:根目录下的 conf/scylla.yaml 中定义了:

native_transport_port: 9042 native_shard_aware_transport_port: 19042 #native_transport_port_ssl: 9142

其实现定义位于 db/config.cc,对应native_transport_port(默认 9042,CQL 客户端入口)、native_transport_port_ssl(默认 9142,加密入口)以及native_shard_aware_transport_port(默认 19042,按分片路由的 CQL 端口)。若你的 ScyllaDB 开启了客户端加密,则需使用 9142 端口,并在 Spark 配置中同步调整。

另外,如果 ScyllaDB 启用了认证(authenticator: PasswordAuthenticator),请提前准备好用户名与密码,供后续 Spark 配置使用。认证相关配置的说明见 conf/scylla.yaml,可选的认证后端在 auth/service.cc 的工厂函数中注册,包括AllowAllAuthenticatorPasswordAuthenticatorCertificateAuthenticatorSaslauthdAuthenticator等。

集成步骤

步骤 1:创建 Databricks 集群

在 Databricks 工作区中创建一个新的集群,推荐使用以下配置:

Databricks Runtime 版本:

Runtime: 9.1 LTS (Scala 2.12, Spark 3.1.2)

该运行时内置 Scala 2.12 与 Spark 3.1.2,与下文 Maven 坐标中的_2.12及连接器版本 3.1.0 相匹配。若使用其他 Runtime 版本,请确认 Scala 二进制版本(_2.12/_2.13)与 Spark 版本之间的兼容关系。

Spark 配置(Spark config):

在集群的高级选项(Advanced options → Spark)中添加如下键值对:

spark.sql.catalog.<your_catalog> com.datastax.spark.connector.datasource.CassandraCatalog spark.sql.catalog.<your_catalog>.spark.cassandra.connection.host <your_host> spark.cassandra.auth.username <your_username> spark.cassandra.auth.password <your_password>

各配置项含义如下:

配置项说明
spark.sql.catalog.<your_catalog>注册一个名为<your_catalog>的 SQL Catalog,其实现类为 Datastax 连接器提供的CassandraCatalog,用于在 Spark SQL / DataFrame API 中以catalog.keyspace.table三级命名访问数据
spark.sql.catalog.<your_catalog>.spark.cassandra.connection.hostScyllaDB 节点的主机地址,即上文<scylla_IP>
spark.cassandra.auth.usernameScyllaDB 认证用户名(仅在启用PasswordAuthenticator等认证后端时需要)
spark.cassandra.auth.passwordScyllaDB 认证密码

其中spark.cassandra.connection.host前缀(spark.cassandra.*)是 Spark Cassandra Connector 读取连接参数的通用命名空间;当配合 SQL Catalog 使用时,用带 catalog 前缀的spark.sql.catalog.<your_catalog>.spark.cassandra.connection.host指定该 Catalog 对应的连接主机。如果集群未启用认证,可省略后两行用户名/密码配置。

步骤 2:通过 Maven 安装连接器库

集群创建完成后,安装 Spark Cassandra Connector 库:

  1. 进入集群详情页,点击Libraries(库);
  2. 选择Install new(安装新的);
  3. 选择来源Maven,点击Search Packages(搜索包)并在Maven Central中搜索;
  4. 填入以下 Maven 坐标并安装:
com.datastax.spark:spark-cassandra-connector-assembly_2.12:3.1.0

该坐标中的_2.12表示使用 Scala 2.12 编译的产物,3.1.0为连接器版本,-assembly后缀表示包含全部依赖的聚合包,可直接作为 Spark 的库使用。安装完成后,集群中的所有 Notebook 即可通过CassandraCatalog访问 ScyllaDB。

测试用例:端到端验证

1. 在 ScyllaDB 侧准备测试数据

使用cqlsh或任意 CQL 客户端连接到 ScyllaDB,执行以下语句创建 keyspace、表并写入一条测试数据:

CREATE KEYSPACE databriks WITH replication = {'class': 'NetworkTopologyStrategy', 'replication_factor' : 3}; CREATE TABLE databriks.demo1 (pk text PRIMARY KEY, ck1 text, ck2 text); INSERT INTO databriks.demo1 (pk, ck1, ck2) VALUES ('pk', 'ck1', 'ck2');

说明:

  • Keyspace 使用NetworkTopologyStrategy与副本因子 3,适用于多数据中心或至少 3 节点的集群;如果是单节点测试环境,可将replication_factor调整为 1,并改用SimpleStrategy
  • databriks.demo1pk作为分区键(主键),ck1ck2为普通列。
  • 原文档示例中的 keyspace 名databriks(拼写如此),请按此保持一致,以便 Notebook 中的引用路径正确。

2. 在 Databricks 侧创建并运行 Notebook

在 Databricks 工作区新建一个 Notebook(语言选择 Python,或 Scala),输入以下代码并运行:

df = spark.read.cassandraFormat.table("<your_catalog>.databriks.demo1") display(df)

执行逻辑说明:

  • spark.read.cassandraFormat.table(...)是 Spark Cassandra Connector 提供的 DataFrame API 读取入口,其中.cassandraFormat指定使用 Cassandra 数据源格式;
  • "<your_catalog>.databriks.demo1"为三级命名路径,对应"步骤 1 中注册的 Catalog 名 → keyspacedatabriks→ 表demo1";
  • display(df)是 Databricks Notebook 专用的可视化命令,会在单元格内以表格形式展示读取到的 DataFrame。

如果一切配置正确,运行后将看到一行数据(pk, ck1, ck2),证明 Databricks Spark 集群已成功通过 CQL 协议从 ScyllaDB 读取数据,集成完成。

常见问题与排查建议

  • curl <scylla_IP>:9042无响应:确认 ScyllaDB 已启动、native_transport_port未被改动(默认为 9042,见 conf/scylla.yaml),并检查云安全组/防火墙是否放行该端口。
  • 认证失败:确认spark.cassandra.auth.username/spark.cassandra.auth.password与 ScyllaDB 中配置的认证后端一致。若使用PasswordAuthenticator,请确保system_authkeyspace 的副本因子已适当提高(见 conf/scylla.yaml 中的注释说明)。
  • 连接器版本不匹配:Maven 坐标中的_2.12必须与 Databricks Runtime 的 Scala 版本一致;连接器版本需与 Spark 主版本兼容。参考 ScyllaDB 与 Spark 集成示例 中关于旧版本连接器依赖 Thrift 导致无法连接 ScyllaDB 的说明。
  • Table 找不到:检查三级命名路径catalog.keyspace.table中的 Catalog 名是否与spark.sql.catalog.<your_catalog>中配置的名称完全一致,且 keyspace/表名与 ScyllaDB 中实际名称一致(注意原示例中的databriks拼写)。

总结

通过本文的四个环节——前置检查、集群创建与 Spark 配置、Maven 库安装、Notebook 端到端验证——你已经完成了 ScyllaDB 与 Databricks 的完整集成。整个方案的根基在于 ScyllaDB 对 CQL 二进制协议的完整兼容:任何遵循 CQL 的驱动(包括 Datastax Spark Cassandra Connector)都可以直接接入,无需任何定制改造。基于这一模式,你还可以进一步将同样的连接器配置推广到其他 Spark 运行环境,或参考仓库中的 Spark 集成文档 扩展出更复杂的读写与批处理场景。

【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询