COSCon‘21 精彩回顾 | Apache Kyuubi 在 T3 出行的深度实践

网易杭研 网易杭研 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
  • 支撑了80%的离线作业,日作业量在1W+
  • 大多数场景比 Hive 性能提升了3-6倍
  • 多租户、并发的场景更加高效稳定

T3出行是一家基于车联网驱动的智慧出行平台,拥有海量且丰富的数据源。因为车联网数据的多样性,T3出行构建了以 Apache Hudi 为基础的企业级数据湖,提供强有力的业务支撑。而对于负责数据价值挖掘的终端用户而言,平台的技术门槛是另一种挑战。如果能将平台的能力统合,并不断地优化和迭代,让用户能够通过 JDBC 和 SQL 这种最普遍最通用的技术来使用,数据生产力将可以得到进一步的提升。

T3出行选择了基于网易数帆主导开源的 Apache Kyuubi(以下简称Kyuubi)来搭建这样的能力。在2021 中国开源年会(COSCon'21)上,T3出行高级大数据工程师李心恺详细解读了选择 Kyuubi 的原因,以及基于 Kyuubi 的深度实践和实现的价值。

引入 Kyuubi 前的技术架构

img

T3出行整个数据湖体系,由数据存储与计算、数据查询与分析和应用服务层组成。其中数据计算分为离线和实时。

数据存储

OBS 对象存储,格式化数据存储格式以 Hudi 格式为主。

数据计算

离线数据处理:利用 Hive on Spark 批处理能力,在 Apache Dolphin Scheduler 上定时调度,承担所有的离线数仓的 ETL 和数据模型加工的工作。

实时数据处理:建设了以 Apache Flink 引擎为基础的开发平台,开发部署实时作业。

数据查询与分析

OLAP 层主要为面向管理和运营人员的报表,对接报表平台,查询要求低时延响应,需求多变快速响应。面向数据分析师的即席查询,更是要求 OLAP 引擎能支持复杂 SQL 处理、从海量数据中快速甄选数据的能力。

应用服务层

数据应用层主要对接各个业务系统。离线 ETL 后的数据写入不同业务不同数据库中,面向下游提供服务。

现有架构痛点

跨存储

数据分布在 Hudi、ClickHouse、MongoDB 等不同存储,需要写代码关联分析增加数据处理门槛和成本。

SQL不统一

Hive 不支持通过 upsert、update、delete 等语法操作 Hudi 表,同时 MongoDB、ClickHouse 等语法又各不相同,开发转换成本较高。

资源管控乏力

Hive on Spark、Spark ThriftServer 没有较好的资源隔离方案,无法根据租户权限做并发控制。

选型 Apache Kyuubi

Apache Kyuubi 是一个 Thrift JDBC/ODBC 服务,对接了 Spark 引擎,支持多租户和分布式的特性,可以满足企业内诸如 ETL、BI 报表等多种大数据场景的应用。Kyuubi 可以为企业级数据湖探索提供标准化的接口,赋予用户调动整个数据湖生态的数据的能力,使得用户能够像处理普通数据一样处理大数据。项目已于2021年 6 月 21 号正式进入 Apache 孵化器。于T3出行而言,Kyuubi 的角色是一个面向 Serverless SQL on Lakehouse 的服务。

Apache Kyuubi 架构


Apache Kyuubi 架构

HiveServer 是一个广泛应用的大数据组件。因传统的 MR 引擎处理效率已经较为落后,Hive 引擎替换为了 Spark,但是为了和原本的 MR 及 TEZ 引擎共存,Hive 保留了自己的优化器,这使得Hive Parse 性能在大多数场景下都落后于 Spark Parse。

STS(Spark Thrift Server)支持HiveServer 的接口和协议,允许用户直接使用 Hive 接口提交 SQL 作业。但是 STS 不支持多租户,同时所有 Spark SQL 查询都走唯一一个 Spark Thrift 节点上的同一个 Spark Driver,并发过高,并且任何故障都会导致这个唯一的 Spark Thrift 节点上的所有作业失败,从而需要重启 Spark Thrift Server,存在单点问题。

对比 Apache Kyuubi 和 Hive、STS,我们发现,Kyuubi 在租户控制,任务资源隔离,引擎升级对接,性能等方面拥有诸多优势。详情见下图。

Apache Kyuubi 优势

Apache Kyuubi 优势

Apache Kyuubi在T3出行场景

AD-HOC场景

Hue 整合 Kyuubi,替代 Hive 为分析师和大数据开发提供服务。

我们在 hue_safety_valve.ini 配置文件中,增加如下配置:

[notebook]
[[interpreters]]
[[[cuntom]]]
name=Kyuubi
interface=hiveserver2
[spark]
sql_server_host=Kyuubi Server IP
sql_server_port=Kyuubi Port

然后重启 Hue 即可。

img

ETL场景

DS 配置 Kyuubi 数据源,进行离线 ETL 作业。因为 Kyuubi Server 的接口、协议都和 HiveServer2 完全一致,所以 DS 只需要数据源中 Hive 数据源类型配置为 Kyuubi 多数据源,就可以直接提交 SQL 任务。

目前,Kyuubi 在T3出行支撑了80%的离线作业,日作业量在1W+ 。

img

联邦查询场景

公司内部使用多种数据存储系统,这些不同的系统解决了对应的使用场景。除了传统的 RDBMS (比如 MySQL) 之外,我们还使用 Apache Kafka 来获取流和事件数据,还有 HBase、MongoDB,以及数据湖对象存储和 Hudi 格式的数据源。

我们知道,要将不同存储来源的数据进行关联,我们需要对数据进行提取,并放到同一种存储介质中,比如 HDFS,然后进行关联操作。这种数据割裂,会给我们的数据关联分析带来很大的麻烦,如果我们能够使用一种统一的查询引擎分别查询不同数据源的数据,然后直接进行关联操作,这将带来巨大的效率提升。

所以,我们利用 Spark DatasourceV2 实现了统一语法的跨存储联邦查询。其提供高效,统一的 SQL 访问。这样做的优势如下:

  • 单个 SQL 方言和 API

  • 统一安全控制和审计跟踪

  • 统一控制

  • 能够组合来自多个来源的数据

  • 数据独立性

基于 Spark DatasourceV2 ,对于读取程序,我们只需定义一个 DefaultSource 的类,实现 ReadSupport 相关接口,就可以对接外部数据源,同时 SupportsPushDownFilters、SupportsPushDownRequiredColumns、SupportsReportPartitioning 等相关的优化,实现了算子下推功能。由此我们可以将查询规则下推到 JDBC 等数据源,在不同数据源层面上进行一些过滤,再将计算结果返回给 Spark,这样可以减少数据的量,从而提高查询效率。

现有方案是通过建立外部表,利用 HiveMeta Server 管理外部数据源的元信息, 对表进行统一多权限管理。

例如:MongoDB 表映射

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"
);

后续升级 Spark3.X ,引入了 namespace 的概念后,DatasouceV2 可实现插件形式的Multiple Catalog 模式,这将大大提高联邦查询的灵活度。

img

Kyuubi 性能测试

img

我们基于 TPC-DS 生成了 500GB 数据量进行了测试。选用部分事实表和维度表,分别在 Hive 和 Kyuubi 上进行性能压测。主要关注场景有:

  • 单用户和多用户场景

  • 聚合函数性能对比

  • Join 性能对比

  • 单 stage 和多 stage 性能对比

压测结果对比,Kyuubi 基于 Spark 引擎大多数场景比 Hive 性能提升了3-6倍,同时多租户、并发的场景更加高效稳定。

T3出行对 Kyuubi 的改进与优化

我们对 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 相关配置

img

img

img

Kyuubi EventBus

Server 端引入了 RESTful Service。

在Server应用进程中,事件总线监听了包括应用停止时间、JDBC 会话关闭、JDBC 操作取消等事件。引入事件总线的目的,是为了在单个应用中和不同的子服务间进行通信。否则不同的子服务对象需要包含对方的实例依赖,服务对象的模型会非常复杂。

img

Kyuubi Router

增加了 Kyuubi JDBC Route 模块,JDBC 连接会先打向此服务。

该服务根据既定策略转发到不同服务。下图为具体策略。

img

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 建表语句

img

Kyuubi Lineage

基于 ANTLR 的 SQL 血缘解析功能。现有提供了两个模式,一个是定时调度,解析一定时间范围内的执行成功的 SQL 语句,将解析结果存储到 HugeGraph 图库中,用于数据治理系统等调用。另一个模式为提供 API 调用,查询时用户直接调用,SQL 复杂时可以直观理清自己的 SQL 逻辑,方便修改和优化自己的 SQL。

img

基于 Kyuubi 的解决方案

img

总结

T3出行大数据平台基于 Apache Kyuubi 0.8,实现了数据服务统一化,大大简化了离线数据处理链路,同时也能保障查询时延要求,之后我们将用来提升更多业务场景的数据服务和查询能力。最后,感谢 Apache Kyuubi 社区的相关支持。后续计划升级到社区的新版本跟社区保持同步,同时基于T3出行场景做的一些功能点,也会陆续回馈给社区,共同发展。也期望 Apache kyuubi 作为 Serverless SQL on Lakehouse 引领者越来越好!

作者:李心恺,T3出行高级大数据工程师

Kyuubi 主页:

https://kyuubi.apache.org/

Kyuubi 源码:

https://github.com/apache/incubator-kyuubi

...全文

相关推荐

YOLO26算法工业车间与城市道路安全标识及交通标志目标检测+训练好的模型+260张数据集+pyqt可视化界面.zip

附训练好的 YOLO 权重与 PyQt 可视化检测界面,页面底部含可视化效果预览,毕设/课设开箱即用。 【数据集概况】 · 检测类别(中文):[安全标识(safety), 交通标志(traffic)] · 训练集:240 张 · 验证集:10 张 · 测试集:10 张 · 总计:260 张 该数据集精准聚焦于工业生产环境与城市道路交通场景,旨在为高危作业区域的安全警示系统及道路通行管理提供可靠视觉识别支持。通过采集真实工作现场与道路环境中的关键标识,该数据集有效支撑了对人员行为规范提示与交通状态预警的自动化感知需求,具备显著的工程实用价值与行业落地潜力。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 67 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.7278** mAP50-95 | 0.6630 Precision | 0.7294 Recall | 0.7273 train/box_loss | 0.7483 train/cls_loss | 0.6857 val/box_loss | 0.6823 val/cls_loss | 1.8035 【训练过程分析】 67 轮训练后 mAP50 为 0.7278,模型基本收敛但还有提升余地。Loss 曲线下降正常,后期趋于平缓。mAP50-95 为 0.6630,定位精度尚可。 【模型性能评估】 Precision 0.7294、Recall 0.7273,精度高于召回,存在一定漏检。多类检测中,不同类别性能可能有差异,需关注... 使用场景:毕业设计、课程设计、深度学习入门、工业场景落地验证。

guo_xiao_xiao_

技术转移机构如何基于数据提升项目撮合精准度?.docx

技术转移机构如何基于数据提升项目撮合精准度?

BIZKEEN

IEEE基于高频信号注入法的PMSM零低速无位置控制永磁同步电机仿真,有参考文献

内容概要:本文围绕基于高频信号注入法的永磁同步电机(PMSM)在零低速工况下的无位置传感器控制技术开展系统性仿真研究,重点聚焦旋转高频信号注入法的应用。通过Matlab/Simulink平台构建完整的控制系统仿真模型,深入分析了高频电压信号注入后电机凸极效应引起的响应电流特征,进而设计并实现了基于信号调制与解调、滤波处理及位置估计算法的位置观测器。研究有效解决了传统机械式位置传感器在极低速或零速运行时难以精确检测转子位置的问题,提升了系统可靠性与鲁棒性。全文涵盖信号注入策略、高频响应信号处理流程、转子位置估算原理、误差补偿机制以及仿真验证等关键技术环节,并配有详实的参考文献,具备较强的理论深度与工程实践价值。; 适合人群:从事电机驱动控制、电力电子与电力传动、自动化及相关领域的科研人员、高校研究生,以及具备一定Matlab/Simulink仿真能力和电机控制理论基础的工程技术人员。; 使用场景及目标:①用于永磁同步电机无传感器控制算法的教学演示与科研仿真;②为低速高精度伺服系统、新能源汽车电驱动系统等应用场景提供位置估计算法的设计与优化思路;③支撑高水平学术论文的复现、改进与创新性控制策略的开发验证。; 阅读建议:建议结合文中所述Simulink仿真模型与配套Matlab代码进行动手实践,重点掌握高频信号注入方式的选择、高频响应信号的提取与解调过程、位置误差提取及PI跟踪观测器的设计细节,同时应查阅所列参考文献以深化对高频注入法物理机理与数学建模的理解。

荧光Matlab

软件项目方案模板-下载即用.zip

代码下载地址: https://pan.quark.cn/s/a4b39357ea24 ### 软件工程构建方案关键要素阐释 #### 一、引言 **文档主旨说明:** “软件工程构建方案.范本”这一文档名称清晰表明了其核心内容——为软件工程项目的构建过程提供一个标准化的方案范本。该范本致力于引导项目的规划、设计、执行等各个流程,保障项目的顺利推进。 **关键词解读:** “工程构建方案”关键词突出了文档的焦点是围绕工程项目的构建过程展开,不仅涉及软件开发环节,还涵盖了项目的整体规划与执行策略。 #### 二、项目基础信息 1. **项目代号**:必须明确标示出项目的具体代号,以便于识别和区分不同的项目。 2. **项目类别**:区分项目是全新构建还是现有系统的升级,这对后续的规划与资源调配具有决定性影响。 3. **项目承建机构**:详细说明负责项目承建的机构信息,包括机构名称、主要责任人、机构概况及职能划分等。 4. **方案制定基础**:阐述方案制定的依据,通常涵盖相关政策文件、行业标准、行业发展趋势等。 5. **项目构建目标、规模和时限**: - **构建目标**:清晰界定项目完成后的预期成果。 - **构建规模**:依据项目的实际需求确定其规模。 - **构建时限**:明确项目从启动到完成的预期时间。 6. **项目构建内容清单**:列出项目的主要构成部分及其具体内容。 7. **总成本及资金来源**:说明项目总预算及其资金来源。 #### 三、现状、必要性与需求调研 1. **当前状况及待解决问题**:调研当前项目承担单位信息化建设的现状,涵盖现有计算机及网络设备的应用情况、各主要业务的信息化程度等,并指出存在的主要问题及解决策略。 2. **项目...

gcnjack2208

论文复现带有攻击角约束的大机动目标协同攻击制导律(Simulink仿真、Matlab代码实现)

内容概要:本文档围绕“带有攻击角约束的大机动目标协同攻击制导律”这一课题,提供基于Simulink仿真环境与Matlab编程语言实现的科研论文复现资源。核心内容聚焦于针对高速、大机动目标实施多武器协同攻击的先进制导策略研究,重点实现了超扭滑模控制(STSMC)、快速终端滑模控制(FTSMC)等非线性控制算法,并探讨了其在满足特定攻击角度约束条件下的协同作战能力。资源不仅包含完整的仿真模型与代码,还延伸至高阶滑模、磁链无感观测电机控制等多个相关技术领域,为研究者提供了一套系统性的控制系统设计与仿真验证工具。; 适合人群:具备一定编程基础,熟悉Matlab/Simulink软件操作,对现代控制理论,尤其是滑模控制、非线性控制及多智能体协同控制有浓厚兴趣的研究生或研发人员。; 使用场景及目标:① 帮助研究人员深入理解并复现带有攻击角约束的三维多弹协同攻击制导律,通过提供的Simulink仿真模型和Matlab代码进行算法验证与性能测试;② 为探索超扭滑模(STSMC)、快速终端滑模(FTSMC)等先进控制策略在高速机动目标拦截、精确打击等实际工程问题中的应用潜力,提供可靠的仿真平台和技术参考。; 阅读建议:读者应首先熟练掌握Matlab/Simulink的基本操作,然后循序渐进地学习文档中由简至繁的控制算法和仿真模型。建议从单一制导律入手,再逐步过渡到复杂的多弹协同场景,鼓励结合自身研究方向,对现有模型进行修改和优化,以开展更具创新性的研究工作。

荔枝科研社
评论
收藏 已收藏
分享
返回顶部