StarRocks Spark 连接器使用指南:从StarRocks高效读取数据
概述
StarRocks Spark连接器是专为Apache Spark设计的连接器工具,它允许Spark应用程序直接从StarRocks数据仓库中读取数据。本文将详细介绍如何使用Spark连接器从StarRocks中读取数据,包括版本要求、参数配置、数据类型映射以及实际使用示例。
核心功能
StarRocks Spark连接器提供三种主要的数据读取方式:
- Spark SQL:创建临时视图直接查询StarRocks表
- Spark DataFrame:将StarRocks表映射为DataFrame进行操作
- Spark RDD:将StarRocks数据转换为RDD进行处理
其中,Spark DataFrame是最推荐的使用方式,因为它提供了更高级的API和更好的性能优化。
版本兼容性
| 连接器版本 | 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.0.0仅支持读取
- 不同版本间的参数和数据类型映射有差异,升级时需注意兼容性
获取连接器
1.1.0及以上版本
连接器JAR包命名格式: starrocks-spark-connector-${spark_version}_${scala_version}-${connector_version}.jar
获取方式:
- 下载预编译包
- 通过Maven添加依赖
- 手动编译源代码
1.0.0版本
获取方式:
- 下载预编译包
- 手动编译源代码
关键参数配置
通用参数
| 参数 | 默认值 | 说明 | |------|--------|------| | starrocks.fenodes | 无 | FE节点HTTP地址 | | starrocks.table.identifier | 无 | 表名(数据库.表) | | starrocks.filter.query | 无 | 数据过滤条件 |
Spark SQL/DataFrame专用参数
| 参数 | 默认值 | 说明 | |------|--------|------| | starrocks.fe.jdbc.url | 无 | FE的JDBC连接地址 | | starrocks.user | 无 | 用户名 | | starrocks.password | 无 | 密码 |
数据类型映射
1.1.0+版本映射关系
| StarRocks类型 | Spark类型 | |--------------|-----------| | BOOLEAN | BooleanType | | INT | IntegerType | | BIGINT | LongType | | FLOAT | FloatType | | DOUBLE | DoubleType | | DATE | DateType | | DATETIME | TimestampType |
实战示例
准备测试数据
- 创建测试表:
CREATE TABLE `score_board` (
`id` int(11) NOT NULL,
`name` varchar(65533) NULL DEFAULT "",
`score` int(11) NOT NULL DEFAULT "0"
)
PRIMARY KEY(`id`)
DISTRIBUTED BY HASH(`id`);
- 插入示例数据:
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;
Spark DataFrame读取示例
// 创建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)
性能优化建议
- 数据过滤下推:尽量在StarRocks端完成数据过滤,减少传输量
- 合理设置分区:通过starrocks.request.tablet.size控制分区数量
- 批量读取:适当增大starrocks.batch.size减少网络开销
- 异步转换:启用starrocks.deserialize.arrow.async提升性能
常见问题
- 权限问题:确保用户有SELECT权限
- 网络连接:检查FE和BE节点的端口可访问性
- 版本兼容性:注意Spark、Scala和连接器版本的匹配
通过本文介绍,您应该已经掌握了使用StarRocks Spark连接器从StarRocks中高效读取数据的方法。根据实际业务需求选择合适的读取方式,并合理配置参数,可以获得最佳的性能表现。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考