StarRocks Spark Connector 使用指南

StarRocks Spark Connector 使用指南

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

概述

StarRocks Spark Connector 是 Apache Spark 与 StarRocks 数据库之间的桥梁,它允许 Spark 应用程序高效地读取 StarRocks 中的数据。本文将详细介绍如何使用 Spark Connector 进行数据读取,包括版本要求、参数配置、数据类型映射以及实际应用示例。

核心功能

StarRocks Spark Connector 提供三种主要的数据读取方式:

  1. Spark SQL:通过创建临时视图直接查询 StarRocks 表
  2. Spark DataFrame:将 StarRocks 表映射为 DataFrame 进行操作
  3. 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+ 版本一致。

使用示例

准备工作

  1. 确保网络连通性:

    • Spark 机器可访问 FE 的 http_port(默认8030)和 query_port(默认9030)
    • Spark 机器可访问 BE 的 be_port(默认9060)
  2. 准备测试数据:

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)

性能优化建议

  1. 合理设置分区

    • 通过 starrocks.request.tablet.size 控制每个 Spark 分区处理的 Tablet 数量
    • 较小的值会增加并行度但可能增加 StarRocks 压力
  2. 使用谓词下推

    • 利用 starrocks.filter.query 在 StarRocks 端完成数据过滤
    • 减少数据传输量,提高查询效率
  3. 批量读取

    • 调整 starrocks.batch.size (默认4096)
    • 较大的值可减少网络往返次数
  4. 类型选择

    • 使用 1.1.0+ 版本以获得更好的日期时间类型支持
  5. 资源控制

    • 通过 starrocks.exec.mem.limit 限制单个查询内存使用

常见问题

  1. 连接问题

    • 确保网络连通性和端口开放
    • 检查 FE/BE 服务状态
  2. 版本兼容性

    • 确认 Spark、Scala、StarRocks 版本匹配
    • 1.1.1+ 版本需手动添加 MySQL JDBC 驱动
  3. 性能问题

    • 检查是否使用了谓词下推
    • 调整分区大小和批量读取参数
  4. 数据类型转换

    • 注意不同版本的类型映射差异
    • 特别是日期时间类型的处理方式

通过本指南,您应该能够熟练使用 StarRocks Spark Connector 进行高效的数据读取操作。根据实际场景选择合适的读取方式和优化参数,可以获得最佳的性能表现。

starrocks StarRocks是一个开源的分布式数据分析引擎,用于处理大规模数据查询和分析。 - 功能:分布式数据分析;大规模数据查询;数据分析;数据仓库。 - 特点:高性能;可扩展;易于使用;支持多种数据源。 starrocks 项目地址: https://gitcode.com/gh_mirrors/st/starrocks

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

樊声嘉Jack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值