Kyuubi 实践 | Apache Kyuubi 在 T3 出行的深度实践
共 5123字,需浏览 11分钟
· 2021-11-14
支撑了80%的离线作业,日作业量在1W+
大多数场景比 Hive 性能提升了3-6倍
多租户、并发的场景更加高效稳定
引入 Kyuubi 前的技术架构
![](https://filescdn.proginn.com/b46c576f69f7ed42801788d716b817c9/2ec3b5ae5288162ba1fe848cb4c922e1.webp)
数据存储
OBS 对象存储,格式化数据存储格式以 Hudi 格式为主。
数据计算
离线数据处理:利用 Hive on Spark 批处理能力,在 Apache Dolphin Scheduler 上定时调度,承担所有的离线数仓的 ETL 和数据模型加工的工作。
实时数据处理:建设了以 Apache Flink 引擎为基础的开发平台,开发部署实时作业。
数据查询与分析
应用服务层
现有架构痛点
跨存储
SQL不统一
资源管控乏力
选型 Apache Kyuubi
![](https://filescdn.proginn.com/be4ffeb28c36488a09f134665f34ff9c/e945fa2529835622e5944a949ff02074.webp)
Apache Kyuubi 架构
![](https://filescdn.proginn.com/039e7d8cbf8732e3f6916681b9249db8/1b8a3d7213ff3ba7d1c73f6e159962b7.webp)
Apache Kyuubi 优势
Apache Kyuubi在T3出行场景
AD-HOC场景
[notebook]
[[interpreters]]
[[[cuntom]]]
name=Kyuubi
interface=hiveserver2
[spark]
sql_server_host=Kyuubi Server IP
sql_server_port=Kyuubi Port
![](https://filescdn.proginn.com/77e759438ac71f9c7582cdd15617574a/4f7298a0102b54d03390b32f92307396.webp)
ETL场景
![](https://filescdn.proginn.com/0784a2784adce1ee889d3cfd5d913315/e3933d53443ce42de993185325aca1f8.webp)
联邦查询场景
所以,我们利用 Spark DatasourceV2 实现了统一语法的跨存储联邦查询。其提供高效,统一的 SQL 访问。这样做的优势如下:
单个 SQL 方言和 API 统一安全控制和审计跟踪 统一控制 能够组合来自多个来源的数据 数据独立性
CREATE EXTERNALTABLE mongo_test
USING com.mongodb.spark.sql
OPTIONS (
spark.mongodb.input.uri "mongodb://用户名:密码@IP:PORT/库名?authSource=admin",
spark.mongodb.input.database "库名",
spark.mongodb.input.collection "表名",
spark.mongodb.input.readPreference.name "secondaryPreferred",
spark.mongodb.input.batchSize "20000"
);
![](https://filescdn.proginn.com/2368bfdd190beea162b2fb126934b174/7ef996bcfe63ed70ae60d52c7e1958cf.webp)
Kyuubi 性能测试
![](https://filescdn.proginn.com/0e5581c9a9123047a31ec0727741b18a/dc0929ddbc2ecd6223bcf38c43c20186.webp)
单用户和多用户场景
聚合函数性能对比
Join 性能对比
单 stage 和多 stage 性能对比
T3出行对 Kyuubi 的改进与优化
Kyuubi Web:启动一个独立多 web 服务,监控管理 Kyuubi Server。
Kyuubi EventBus:定义了一个全局的事件总线。
Kyuubi Router:路由模块,可以将专有语法的 SQL 请求转发到不同的原生 JDBC 服务上。
Kyuubi Spark Engine:修改原生 Spark Engine。
Kyuubi Lineage:数据血缘解析服务,将执行成功多 SQL 解析存入图数据库,提供 API 调用。
Kyuubi Web 服务功能
当前运行的 SparkContext 和 SQL 数量
各个 Kyuubi Server 实例状态
Top 20: 1天内最耗时的 SQL
用户提交 SQL 排名(1天内)
展示各用户 SQL 运行的情况和具体语句
SQL 状态分为:closed,cancelled,waiting和running。其中waiting和running 的 SQL 可取消
根据管理租户引擎对应队列和资源配置、并发量
可以在线查看、修改 Kyuubi Server、Engine 相关配置
![](https://filescdn.proginn.com/6a582da8456e6475412b965121fde07f/d2ec83fbe5c4c3afeb3ddfa6262e1cac.webp)
![](https://filescdn.proginn.com/c47c8db75925a7aa6d749b1543c24f03/5530e2762e0c6fc4d08c261e95d14eb1.webp)
![](https://filescdn.proginn.com/9f52ec28c22307a374cdefdc9f1bf175/5613576ffd80959c745d856467333c2a.webp)
Kyuubi EventBus
![](https://filescdn.proginn.com/b5ef2daaf97ba62cccf38476439135fc/10b5f75f96a63f4d0c95d798a6429af1.webp)
Kyuubi Router
![](https://filescdn.proginn.com/6db4a7c62da78033c04ed03e296cd75c/85c5ba9833de2c524a7d3ef0b393b860.webp)
Kyuubi Spark Engine
将 Kyuubi-Spark-Sql-Engine 的 Spark 3.X 版本改成了 Spark 2.4.5,适配集群版本,后续集群升级会跟上社区版本融合
增加了Hudi datasource 模块,使用 Spark datasource 计划查询 Hudi,提高对 Hudi 的查询效率
集成 Hudi 社区的 update、delete 语法,新增了 upsert 语法和 Hudi 建表语句
Kyuubi Lineage
![](https://filescdn.proginn.com/1ddd42ff7ec5565d5755c66b9fc6e888/ff4384d3de80b7f30f80bc72d70f1fe5.webp)
基于 Kyuubi 的解决方案
![](https://filescdn.proginn.com/c7087e9063f542e01bd50e35db984373/f21d87dfd738603958ba038d1c4b19ea.webp)
总结