引擎增强

MapReduce BMR

  • 发行版本
  • 功能发布记录
  • 产品描述
    • 节点类型说明
    • 产品优势
    • 应用场景
    • 产品功能
    • 产品简介
  • Python-SDK
    • Cluster(集群)
    • BmrClient
    • 异常处理
    • InstanceGroup(实例组)
    • 简介
    • 文档更新记录
    • Step(作业)
    • 版本变更记录
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
  • 开源组件介绍
    • Impala
    • Pig
    • Druid
    • Presto
    • Hue
    • Ooize
    • HBase
    • Kudu
    • Sqoop
    • Hadoop-Streaming
    • Zeppelin
    • Alluxio
    • Kerberos
      • 集群互信配置
      • 概述
    • ClickHouse
      • 常见问题
      • 数据迁移同步
        • 从Spark导入
        • 从Kafka同步数据
        • 将自建ClickHouse数据迁移到云ClickHouse中
        • 从Flink导入
        • 从MySQL导入和同步
        • 从本地数据导入
          • Parquet格式
          • JSON
          • SQL转储
          • CSV and TSV
      • 快速入门
        • 访问模式
        • 客户端登录
        • 创建ClickHouse集群
        • 基础操作
      • 运维相关操作
        • ClickHouse集群扩容
        • ClickHouse集群缩容
        • 日志配置说明
        • 监控告警配置
    • Ranger
      • ranger概述
      • 权限策略配置
    • Paimon
      • Hive示例
      • StarRocks示例
      • 联合查询示例
      • Flink示例
      • Spark示例
    • Flink
      • 基础使用
    • Trino
      • 基础使用
      • 概述
    • Spark
      • 引擎增强
      • 基础使用
    • Hive
      • 开发指南
        • 自定义函数(UDF)
      • 实践操作
        • Hive迁移
        • Hive操作HBase外表
      • 基础使用
        • Hive基础操作
        • Hive连接方式
  • Java-SDK
    • Cluster(集群)
    • 异常
    • BmrClient
    • InstanceGroup(实例组)
    • 日志
    • 文档更新记录
    • 版本更新记录
    • Step(作业)
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
    • 概述
  • 快速入门
    • 操作流程概览
    • 环境准备
    • 创建集群
    • 数据准备
    • 开发作业
    • 查看结果
    • ClickHouse
      • 导入数据
      • 创建数据库
      • 连接集群
      • 创建表
  • 操作指南
    • 集群模板
    • 服务管理
    • 集群配置
      • 用户管理
      • 弹性伸缩
      • 创建集群
      • 集群安全模式
      • EIP
      • Hive元数据说明
      • 集群审计
      • 配置已有集群
      • 安全组
    • 管理作业
      • 创建作业
      • 诊断、调优
      • 定时任务
      • 查看作业
    • 访问集群
      • 访问集群服务页面
      • 访问集群-openVPN访问集群
      • 使用OpenVPN提交Hadoop作业
      • SSH连接到集群
    • 实践操作
      • 存储数据至HBase
      • 导入数据
      • 编译Maven项目
      • Sqoop导入导出数据
        • 导出数据
    • 权限管理
      • 多用户访问控制
      • 用户管理
    • 集群管理
      • 节点管理
      • 监控报警
      • 集群指标
      • 资源管理
  • 服务等级协议SLA
    • BMR服务等级协议SLA
  • API参考
    • 通用说明
    • 公共头
    • 数据类型
    • 版本更新记录
    • 服务域名
    • 实例操作接口
    • 实例组操作接口
    • 集群操作接口
    • API简介
    • 错误码
  • 常见问题
    • 安全性问题
    • 计费类问题
    • 常见问题总览
    • 性能类问题
    • 配置类问题
    • 故障类问题
  • 视频专区
    • 操作指南
    • 产品介绍
  • 场景教程
    • 流式应用场景
    • 离线应用场景
    • 使用Hive分析网站日志
    • Sqoop应用文档
    • 定时分析日志数据
    • HIVE
      • 不同集群的 Hive 迁移方案
      • Hive 操作 Hbase 外部表
  • 产品定价
    • 转换计费方式
    • 计费项
    • 到期或欠费说明
    • 包年包月计费
    • 续费说明
    • 变更配置计费说明
    • 计费方式
    • 按需计费
    • 账单和用量查询
    • 退款说明
所有文档
menu
没有找到结果,请重新输入

MapReduce BMR

  • 发行版本
  • 功能发布记录
  • 产品描述
    • 节点类型说明
    • 产品优势
    • 应用场景
    • 产品功能
    • 产品简介
  • Python-SDK
    • Cluster(集群)
    • BmrClient
    • 异常处理
    • InstanceGroup(实例组)
    • 简介
    • 文档更新记录
    • Step(作业)
    • 版本变更记录
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
  • 开源组件介绍
    • Impala
    • Pig
    • Druid
    • Presto
    • Hue
    • Ooize
    • HBase
    • Kudu
    • Sqoop
    • Hadoop-Streaming
    • Zeppelin
    • Alluxio
    • Kerberos
      • 集群互信配置
      • 概述
    • ClickHouse
      • 常见问题
      • 数据迁移同步
        • 从Spark导入
        • 从Kafka同步数据
        • 将自建ClickHouse数据迁移到云ClickHouse中
        • 从Flink导入
        • 从MySQL导入和同步
        • 从本地数据导入
          • Parquet格式
          • JSON
          • SQL转储
          • CSV and TSV
      • 快速入门
        • 访问模式
        • 客户端登录
        • 创建ClickHouse集群
        • 基础操作
      • 运维相关操作
        • ClickHouse集群扩容
        • ClickHouse集群缩容
        • 日志配置说明
        • 监控告警配置
    • Ranger
      • ranger概述
      • 权限策略配置
    • Paimon
      • Hive示例
      • StarRocks示例
      • 联合查询示例
      • Flink示例
      • Spark示例
    • Flink
      • 基础使用
    • Trino
      • 基础使用
      • 概述
    • Spark
      • 引擎增强
      • 基础使用
    • Hive
      • 开发指南
        • 自定义函数(UDF)
      • 实践操作
        • Hive迁移
        • Hive操作HBase外表
      • 基础使用
        • Hive基础操作
        • Hive连接方式
  • Java-SDK
    • Cluster(集群)
    • 异常
    • BmrClient
    • InstanceGroup(实例组)
    • 日志
    • 文档更新记录
    • 版本更新记录
    • Step(作业)
    • Instance(实例)
    • 快速入门
    • 安装SDK工具包
    • 概述
  • 快速入门
    • 操作流程概览
    • 环境准备
    • 创建集群
    • 数据准备
    • 开发作业
    • 查看结果
    • ClickHouse
      • 导入数据
      • 创建数据库
      • 连接集群
      • 创建表
  • 操作指南
    • 集群模板
    • 服务管理
    • 集群配置
      • 用户管理
      • 弹性伸缩
      • 创建集群
      • 集群安全模式
      • EIP
      • Hive元数据说明
      • 集群审计
      • 配置已有集群
      • 安全组
    • 管理作业
      • 创建作业
      • 诊断、调优
      • 定时任务
      • 查看作业
    • 访问集群
      • 访问集群服务页面
      • 访问集群-openVPN访问集群
      • 使用OpenVPN提交Hadoop作业
      • SSH连接到集群
    • 实践操作
      • 存储数据至HBase
      • 导入数据
      • 编译Maven项目
      • Sqoop导入导出数据
        • 导出数据
    • 权限管理
      • 多用户访问控制
      • 用户管理
    • 集群管理
      • 节点管理
      • 监控报警
      • 集群指标
      • 资源管理
  • 服务等级协议SLA
    • BMR服务等级协议SLA
  • API参考
    • 通用说明
    • 公共头
    • 数据类型
    • 版本更新记录
    • 服务域名
    • 实例操作接口
    • 实例组操作接口
    • 集群操作接口
    • API简介
    • 错误码
  • 常见问题
    • 安全性问题
    • 计费类问题
    • 常见问题总览
    • 性能类问题
    • 配置类问题
    • 故障类问题
  • 视频专区
    • 操作指南
    • 产品介绍
  • 场景教程
    • 流式应用场景
    • 离线应用场景
    • 使用Hive分析网站日志
    • Sqoop应用文档
    • 定时分析日志数据
    • HIVE
      • 不同集群的 Hive 迁移方案
      • Hive 操作 Hbase 外部表
  • 产品定价
    • 转换计费方式
    • 计费项
    • 到期或欠费说明
    • 包年包月计费
    • 续费说明
    • 变更配置计费说明
    • 计费方式
    • 按需计费
    • 账单和用量查询
    • 退款说明
  • 文档中心
  • arrow
  • MapReduceBMR
  • arrow
  • 开源组件介绍
  • arrow
  • Spark
  • arrow
  • 引擎增强
本页目录
  • Spark Native Engine
  • 基本原理
  • 使用方法
  • 进展

引擎增强

更新时间:2025-08-21

Spark Native Engine

截止目前,Spark是一个运行在JVM上的大数据计算引擎,其计算性能依然有很大的提升空间。我们通过引入ClickHouse计算引擎实现了Spark性能的巨大提升,同时还能保证和现有Spark的兼容性。

基本原理

我们先以一段简单的聚合SQL为例,看下Spark是如何执行的

image.png

我们的SQL代码经过解析先在Driver中生成了执行计划,执行计划优化后最终转化为一个个的RDD,每个RDD和其要处理的分片信息最终会发往对应的Executor,以Task为执行单元来执行对应的计算逻辑。这里可以将一个Task当做Executor中的一个线程,这个线程里完成了主要的计算逻辑。在Task中实际执行的Scan、Filter、Agg等计算逻辑就是由对应的RDD生成的。

实际上ClickHouse中也有对应于Scan、Filter、Agg这样的计算逻辑,所以我们可以将每个Task中的实际计算逻辑交给ClickHouse来执行,凭借ClickHouse强大的计算性能实现Spark性能的提升。我们这里称使用ClickHouse加速以后的Spark引擎为SNE(Spark Native Engine)。

下面是这段SQL使用SNE执行时的执行计划以及每个Task中Java和ClickHouse的调用关系。

image.png

可以看到我们使用JNI将执行计划信息发给了ClickHouse,在整体分布式框架上,依然保持了Spark现有的架构。

使用方法

使用SNE的方法非常简单,只需要增加如下配置即可:

Plain Text
1spark.sql.execution.clickhouse true

由于我们目前还没有支持所有Spark特性,对于不支持的情况,我们会自动回退到原生Spark来执行用户的请求。另外我们支持了如下配置可以强制使用SNE执行而不回滚

Plain Text
1spark.sql.clickhouse.fallback false

这个配置的默认值是true,就是会自动回滚。

进展

在数据类型方面,我们目前已经支持了常见的基础类型:BooleanType, ByteType, IntegerType, LongType, FloatType, DoubleType, DecimalType, TimestampType, DateType, StringType。

在算子级别的覆盖度见下表:

Operator 支持度
FileSourceScanExec 支持
FilterExec 支持
ProjectExec 支持
HashAggregateExec 支持
SortExec 支持
BroadcastHashJoinExec 支持
ShuffledHashJoinExec 支持
SortMergeJoinExec 支持
CartesianProductExec 支持
BroadcastNestedLoopJoinExec 支持
WindowExec 支持
GlobalLimitExec 支持
LocalLimitExec 支持
CollectLimitExec 支持
TakeOrderedAndProjectExec 支持
ExpandExec 支持
UnionExec 支持
ShuffleExchangeExec 支持
BroadcastExchangeExec 支持
SubqueryBroadcastExec 支持
DataWritingCommandExec 不支持
BatchScanExec 不支持
ObjectHashAggregateExec 不支持
SortAggregateExec 不支持
CoalesceExec 不支持
GenerateExec 不支持
RangeExec 不支持
SampleExec 不支持
CustomShuffleReaderExec 不支持
InMemoryTableScanExec 不支持
AggregateInPandasExec 不支持
ArrowEvalPythonExec 不支持
FlatMapGroupsInPandasExec 不支持
MapInPandasExec 不支持
WindowInPandasExec 不支持
Velox2Row 不支持
Velox2Arrow 不支持

这里我们虽然只支持了一半多一点的算子,但是在SQL场景,基本上都已经都能覆盖到了。在SQL场景,还有两类SQL需要特别说明一下:

  • 我们虽然不支持DataWritingCommandExec算子,但是对于包括了该算子的SQL,比如insert into table_x select ...,我们会将除了DataWritingCommandExec以外的算子全部执行在ClickHouse上,最后调用原生Spark的DataWritingCommandExec来完成计算。所以除了DataWritingCommandExec以外的查询算子依然可以享受到ClickHouse的性能提速。
  • 还有Scan相关的算子,比如BatchScanExec、InMemoryTableScanExec,如果SQL用到了这些算子,目前会将整个SQL回退到原生Spark执行。这些算子我们接下来会尽快支持。

相对于原生Spark的内建函数,我们目前先支持了其中较常用的部分,剩余函数会逐步支持。目前支持的函数如下:

函数 说明
cast
coalesce
isNull
isNotNull
abs
year
month
day/dayofmonth
dayofweek
weekofyear
hour
minute
second
quarter
dayofyear
upper/ucase
!/not
~
cbrt
cos
floor
ceil/ceiling
sqrt
length/char_length/character_length 暂不支持BinaryType
log2
log10
+
-
*
/
%/mod 暂不支持DecimalType
and
or
=/==
<
>
<=
>=
datediff
date_add
date_sub
add_months
date_format
like
round
shiftright
shiftleft
&
|
^
pow/power
instr
substr/substring
regexp_extract
locate/position
regexp_replace
concat
when
in
parse_url 不支持3个参数的版本,另外第二个参数只支持常量

在性能方面,在5T规模的TPC-DS数据集下,相对于社区版Spark的性能对比见下图

image.png

其中原生Spark总的执行时间是15257秒,SNE总的执行时间为7779秒。

上一篇
Trino
下一篇
基础使用