StarRocks Spark连接器使用指南:从StarRocks读取数据
概述
StarRocks提供自研的Spark连接器(StarRocks Connector for Apache Spark),使开发者能够通过Spark框架高效地从StarRocks表中读取数据。该连接器支持三种数据读取方式:Spark SQL、Spark DataFrame和Spark RDD,特别适合需要进行复杂数据处理和机器学习分析的场景。
核心优势
- 高效数据过滤:支持在StarRocks端进行数据预过滤,减少数据传输量
- 灵活处理方式:提供SQL、DataFrame和RDD三种API,适应不同开发习惯
- 分布式并行读取:自动将StarRocks表分区映射为Spark RDD分区
- 类型系统兼容:完善的StarRocks与Spark数据类型映射关系
版本兼容性
| 连接器版本 | 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.1版本开始,连接器不再包含MySQL JDBC驱动,需手动添加到Spark类路径
获取连接器
方式一:下载预编译包
可从Maven中央仓库获取对应版本的JAR包,命名格式为: starrocks-spark-connector-${spark_version}_${scala_version}-${connector_version}.jar
方式二:Maven依赖
<dependency>
<groupId>com.starrocks</groupId>
<artifactId>starrocks-spark-connector-3.2_2.12</artifactId>
<version>1.1.0</version>
</dependency>
方式三:源码编译
- 下载连接器源码
- 执行编译命令:
sh build.sh 3.2 # 以Spark 3.2为例
- 在target目录获取生成的JAR包
关键参数详解
通用参数
| 参数 | 默认值 | 说明 | |------|--------|------| | starrocks.fenodes | - | FE节点HTTP地址,格式<host>:<http_port>
,多个用逗号分隔 | | starrocks.table.identifier | - | 目标表名,格式<db>.<table>
| | starrocks.request.tablet.size | Integer.MAX_VALUE | 每个RDD分区包含的Tablet数量 | | starrocks.batch.size | 4096 | 单次读取最大行数 | | starrocks.filter.query | - | StarRocks端过滤条件表达式 |
Spark SQL/DataFrame特有参数
| 参数 | 默认值 | 说明 | |------|--------|------| | starrocks.fe.jdbc.url | - | FE的MySQL协议地址,格式jdbc:mysql://<host>:<query_port>
| | starrocks.user | - | 数据库用户名 | | starrocks.password | - | 数据库密码 |
数据类型映射
1.1.0+版本映射关系
| StarRocks类型 | Spark类型 | |--------------|-----------| | BOOLEAN | BooleanType | | TINYINT | ByteType | | INT | IntegerType | | BIGINT | LongType | | FLOAT | FloatType | | DOUBLE | DoubleType | | DECIMAL | DecimalType | | VARCHAR | StringType | | DATE | DateType | | DATETIME | TimestampType |
使用示例
前置条件
假设StarRocks中已存在test数据库,用户root有访问权限。
Spark SQL方式
// 创建临时视图
spark.sql(
"""
|CREATE TEMPORARY VIEW starrocks_table
|USING starrocks
|OPTIONS(
| "starrocks.fe.http.url"="fe_host:8030",
| "starrocks.fe.jdbc.url"="jdbc:mysql://fe_host:9030",
| "starrocks.table.identifier"="test.table1",
| "starrocks.user"="root",
| "starrocks.password"=""
|)
|""".stripMargin)
// 执行查询
val df = spark.sql("SELECT * FROM starrocks_table WHERE col1 > 100")
DataFrame方式
val df = spark.read.format("starrocks")
.option("starrocks.fe.http.url", "fe_host:8030")
.option("starrocks.fe.jdbc.url", "jdbc:mysql://fe_host:9030")
.option("starrocks.table.identifier", "test.table1")
.option("starrocks.user", "root")
.option("starrocks.password", "")
.load()
df.filter("col1 > 100").show()
性能优化建议
- 合理设置分区数:通过
starrocks.request.tablet.size
控制并行度 - 善用谓词下推:使用
starrocks.filter.query
在StarRocks端过滤数据 - 批量读取:适当增大
starrocks.batch.size
减少网络开销 - 类型匹配:注意新版连接器对日期类型的优化处理
升级注意事项
从1.0.0升级到1.1.0需注意:
- 必须配置
starrocks.fe.jdbc.url
参数 - 日期类型映射行为变更(StringType → DateType/TimestampType)
- 部分参数名称变更(如user → starrocks.user)
- 需单独添加MySQL JDBC驱动依赖
通过合理配置和使用StarRocks Spark连接器,开发者可以高效地将StarRocks的强大分析能力与Spark的分布式计算框架相结合,构建更强大的数据处理流水线。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考