StarRocks Spark Connector 使用指南
概述
StarRocks Spark Connector 是 Apache Spark 与 StarRocks 数据库之间的桥梁,它允许 Spark 应用程序高效地读取 StarRocks 中的数据。本文将详细介绍如何使用 Spark Connector 进行数据读取,包括版本要求、参数配置、数据类型映射以及实际应用示例。
核心功能
StarRocks Spark Connector 提供三种主要的数据读取方式:
- Spark SQL:通过创建临时视图直接查询 StarRocks 表
- Spark DataFrame:将 StarRocks 表映射为 DataFrame 进行操作
- Spark RDD:将 StarRocks 表映射为 RDD 进行底层操作
版本兼容性
| Spark Connector 版本 | 支持的 Spark 版本 | 支持的 StarRocks 版本 | Java 版本 | Scala 版本 | |----------------------|------------------|----------------------|----------|-----------| | 1.1.2 | 3.2-3.5 | 2.5+ | 8 | 2.12 | | 1.1.1 | 3.2-3.4 | 2.5+ | 8 | 2.12 | | 1.1.0 | 3.2-3.4 | 2.5+ | 8 | 2.12 | | 1.0.0 | 3.x | 1.18+ | 8 | 2.12 | | 1.0.0 | 2.x | 1.18+ | 8 | 2.11 |
重要说明:
- 1.1.0+ 版本同时支持读写操作
- 1.1.1+ 版本不再包含 MySQL JDBC 驱动,需手动添加
- 建议使用最新版本以获得最佳功能和性能
获取 Connector
1.1.0+ 版本获取方式
直接下载: 从 Maven 中央仓库获取对应版本的 JAR 包,命名格式为: starrocks-spark-connector-${spark_version}_${scala_version}-${connector_version}.jar
Maven 依赖:
<dependency>
<groupId>com.starrocks</groupId>
<artifactId>starrocks-spark-connector-${spark_version}_${scala_version}</artifactId>
<version>${connector_version}</version>
</dependency>
手动编译:
sh build.sh <spark_version>
1.0.0 版本获取方式
直接下载:
- Spark 2.x: starrocks-spark2_2.11-1.0.0.jar
- Spark 3.x: starrocks-spark3_2.12-1.0.0.jar
参数配置详解
通用参数
| 参数 | 默认值 | 描述 | |------|--------|------| | starrocks.fenodes | 无 | FE 节点 HTTP 地址,格式: <fe_host>:<fe_http_port>
| | starrocks.table.identifier | 无 | StarRocks 表名,格式: <database>.<table>
| | starrocks.request.retries | 3 | 读请求重试次数 | | starrocks.batch.size | 4096 | 单次从 BE 读取的最大行数 | | starrocks.filter.query | 无 | 过滤条件表达式 |
Spark SQL/DataFrame 专有参数
| 参数 | 描述 | |------|------| | starrocks.fe.jdbc.url | FE 的 JDBC 连接地址 | | starrocks.user | 数据库用户名 | | starrocks.password | 数据库密码 |
Spark RDD 专有参数
| 参数 | 描述 | |------|------| | starrocks.request.auth.user | 认证用户名 | | starrocks.request.auth.password | 认证密码 | | starrocks.read.field | 指定读取的列名 |
数据类型映射
1.1.0+ 版本类型映射
| StarRocks 类型 | Spark 类型 | |---------------|-----------| | BOOLEAN | BooleanType | | TINYINT | ByteType | | SMALLINT | ShortType | | INT | IntegerType | | BIGINT | LongType | | FLOAT | FloatType | | DOUBLE | DoubleType | | DECIMAL | DecimalType | | DATE | DateType | | DATETIME | TimestampType |
1.0.0 版本类型映射
1.0.0 版本将 DATE 和 DATETIME 映射为 StringType,其他类型映射与 1.1.0+ 版本一致。
使用示例
准备工作
-
确保网络连通性:
- Spark 机器可访问 FE 的 http_port(默认8030)和 query_port(默认9030)
- Spark 机器可访问 BE 的 be_port(默认9060)
-
准备测试数据:
CREATE TABLE test.score_board (
id INT PRIMARY KEY,
name VARCHAR(65533),
score INT
);
INSERT INTO score_board VALUES
(1, 'Bob', 21), (2, 'Stan', 21), ...;
Spark SQL 方式
// 创建临时视图
spark.sql("""
CREATE TEMPORARY VIEW spark_starrocks
USING starrocks
OPTIONS (
"starrocks.table.identifier" = "test.score_board",
"starrocks.fe.http.url" = "fe_host:8030",
"starrocks.fe.jdbc.url" = "jdbc:mysql://fe_host:9030",
"starrocks.user" = "root",
"starrocks.password" = ""
)
""")
// 查询数据
spark.sql("SELECT * FROM spark_starrocks").show()
DataFrame 方式
val df = spark.read.format("starrocks")
.option("starrocks.table.identifier", "test.score_board")
.option("starrocks.fe.http.url", "fe_host:8030")
.option("starrocks.fe.jdbc.url", "jdbc:mysql://fe_host:9030")
.option("starrocks.user", "root")
.option("starrocks.password", "")
.load()
df.show(10)
RDD 方式
import com.starrocks.connector.spark._
val rdd = sc.starrocksRDD(
tableIdentifier = Some("test.score_board"),
cfg = Some(Map(
"starrocks.fenodes" -> "fe_host:8030",
"starrocks.request.auth.user" -> "root",
"starrocks.request.auth.password" -> ""
))
)
rdd.take(10).foreach(println)
性能优化建议
-
合理设置分区:
- 通过
starrocks.request.tablet.size
控制每个 Spark 分区处理的 Tablet 数量 - 较小的值会增加并行度但可能增加 StarRocks 压力
- 通过
-
使用谓词下推:
- 利用
starrocks.filter.query
在 StarRocks 端完成数据过滤 - 减少数据传输量,提高查询效率
- 利用
-
批量读取:
- 调整
starrocks.batch.size
(默认4096) - 较大的值可减少网络往返次数
- 调整
-
类型选择:
- 使用 1.1.0+ 版本以获得更好的日期时间类型支持
-
资源控制:
- 通过
starrocks.exec.mem.limit
限制单个查询内存使用
- 通过
常见问题
-
连接问题:
- 确保网络连通性和端口开放
- 检查 FE/BE 服务状态
-
版本兼容性:
- 确认 Spark、Scala、StarRocks 版本匹配
- 1.1.1+ 版本需手动添加 MySQL JDBC 驱动
-
性能问题:
- 检查是否使用了谓词下推
- 调整分区大小和批量读取参数
-
数据类型转换:
- 注意不同版本的类型映射差异
- 特别是日期时间类型的处理方式
通过本指南,您应该能够熟练使用 StarRocks Spark Connector 进行高效的数据读取操作。根据实际场景选择合适的读取方式和优化参数,可以获得最佳的性能表现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考