- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 视频嵌入链接 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
Apache Kyuubi (Incubating) 2022 社区前瞻
Apache Kyuubi (Incubating) 致力于打造面向 Serverless SQL on Lakehouse 的企业级服务。自 2021 年加入 Apache 基金会以来,在社区的推动下有了长足的发展,除 Spark 外,Kyuubi 加入了对 Flink、Trino 计算引擎的支持。本次分享将向大家介绍 Kyuubi 社区的最新动向,解读 Kyuubi 近期引入的一些重大特性,并结合实现深入剖析背后的设计原理。
潘成,网易数帆软件工程师,Apache Kyuubi (Incubating) PPMC,开源软件爱好者。长期活跃于开源社区(GitHub id: pan3793),Spark ClickHouse Connector 作者。
展开查看详情
1 . Apache Kyuubi (Incubating) 2022 社区前瞻 潘成 github.com/pan3793 ⽹易数帆软件⼯程师,Apache Kyuubi (Incubating) PPMC
2 .Serverless SQL on LakeHouse • Apache Kyuubi (Incubating) 是构建在 Spark、Flink、Trino 计算引擎和数据 湖格式之上的⼀个企业级⼤数据⽹关,致⼒于提供 Serverless SQL on LakeHouse 服务。 • Kyuubi 的愿景是让⼤数据平⺠化。 HiveServer2
3 .Agenda • 探索引擎共享级别实现原理 • 开箱即⽤的 Z-Order 索引 • Engine 启动太慢,如何做到连接秒开? • 试试⽤ Beeline 提交 Scala 代码 • Kyuubi 社区成⻓
4 .探索引擎共享级别实现原理
5 .Engine 共享级别 • 新增 GROUP、POOL 两种共享级别,在资源共享和隔离性之间取得更好的平衡
6 .基于 Zookeeper 的服务发现 • Kyuubi 将⾃身注册到 Zookeeper 中提供基于客户端 服务发现的 HA 能⼒(兼容 Hive JDBC Client) • 基于 Zookeeper 实现灵活的 Engine 路由机制,从⽽ 实现多种 Engine 共享级别
7 . Engine 路由规则 /{namespace}_{version}_{share_level}_{engine_type}/{user_name|group_name} /{subdomain|pool}/{engine_information} /kyuubi_1.3.0-incubating_USER_SPARKSQL/jerry/default/serviceUri=10.0.0.1:12345 /kyuubi_1.3.0-incubating_CONNECTION_FLINKSQL/tom/default/serviceUri=10.0.0.1:12345 /kyuubi_1.4.1-incubating_GROUP_SPARKSQL/dev/adhoc-pool-1/serviceUri=10.0.0.2:12345 /kyuubi_1.4.1-incubating_GROUP_SPARKSQL/dev/adhoc-pool-2/serviceUri=10.0.0.2:54321 /prod_1.4.1-incubating_USER_SPARKSQL/ads/sla-pool-1/serviceUri=10.0.1.1:23456 /prod_1.4.1-incubating_USER_SPARKSQL/ads/sla-pool-2/serviceUri=10.0.1.2:23456 /prod_1.4.1-incubating_USER_SPARKSQL/ads/normal-pool-1/serviceUri=10.0.2.1:34567 /prod_1.4.1-incubating_USER_SPARKSQL/ads/normal-pool-2/serviceUri=10.0.2.2:34567
8 .开箱即⽤的 Z-Order 索引
9 .Z-Order on Parquet/ORC Tables • ⽀持 Parquet、ORC 格式的 Hive、DataSource 表 min/max etc. • ⽆需修改或引⼊新的⽂件格式 • 借助 Parquet/ORC 原⽣的 Column Index (Min/Max) 提供过滤能⼒ • 通过排序改善数据压缩效果,优化存储,降低占⽤空间 ORC ⽂件布局 WHERE val1 <= 2 and val2 < 1
10 .Kyuubi Z-Order 使⽤⽅式 • 下载 Kyuubi Spark 扩展 Jar,拷⻉到 $SPARK_HOME/jars Spark 3.1: kyuubi-extension-spark-3-1_2.12-1.4.1-incubating.jar Spark 3.2: kyuubi-extension-spark-3-2_2.12-1.4.1-incubating.jar • 开启 Z-Order 规则 spark.sql.optimizer.insertZorderBeforeWriting.enabled=true • 对既存数据做 Z-Order 优化 OPTIMIZE <table> ZORDER BY <col_1>, <col_2>; • 修改表属性(写⼊时⾃动做 Z-Order 优化) ALTER TABLE <table> SET TBLPROPERTIES ( 'kyuubi.zorder.enabled'='true', ‘kyuubi.zorder.cols’='<col_1>,<col_2>,...' );
11 .Z-Order 收益 存储降低70% 命中 Z-Order 列 查询速度提升2x
12 .Engine 启动太慢,如何做到连接秒开?
13 .同步请求 VS 异步请求 • OpenSession • CancelOperation • RenewDelegationToken • … • ExecuteStatement • GetSchemas • GetTables • GetColumns • GetFunctions • …
14 .同步请求、异步请求相互转换 Sync => Async Async => Sync
15 . 以兼容的⽅式扩展通信协议 struct TExecuteStatementReq { struct TExecuteStatementResp { 1: required TSessionHandle sessionHandle 1: required TStatus status 2: required string statement 2: optional TOperationHandle operationHandle 3: optional map<string, string> confOverlay } 4: optional bool runAsync = false 5: optional i64 queryTimeout = 0 } struct TOpenSessionReq { struct TOpenSessionResp { 1: required TProtocolVersion client_protocol 1: required TStatus status 2: optional string username 2: required TProtocolVersion serverProtocolVersion 3: optional string password 3: optional TSessionHandle sessionHandle 4: optional map<string, string> configuration 4: optional map<string, string> configuration } } 扩展⽅案:以 base64 编码⽅式在 configuration 字段通过特定 key 传递⾃定义信息 开启异步:kyuubi.session.engine.launch.async=true TOperationHandle = TOpenSessionResp + configuration:kyuubi.session.engine.launch.handle.guid + configuration:kyuubi.session.engine.launch.handle.secret
16 .试试⽤ Beeline 提交 Scala 代码
17 .Spark SQL & Scala 混编 切换 Scala 模式 SQL 解决 80% 问题 SQL + Scala 解决 95% 问题 切换 SQL 模式 bin/beeline -u 'jdbc:hive2://kyuubi:10009/?#kyuubi.operation.language=sql' \ -f batch_job_sql_and_scala.sql
18 .Kyuubi 社区成⻓
19 .Kyuubi 版本重⼤特性 • 2021 Sep 14, v1.3.0-incubating • 2022, v1.5.0-incubating (Coming soon) and more • 进⼊ Apache 孵化器后的⾸个版本 • 新增 REST API 协议⽀持 • 企业级 Spark ⽹关 • 新增 Spark Scala ⽀持 • Spark AQE 增强,⼩⽂件治理⽅案 • 新增 Flink SQL、Trino SQL 引擎⽀持 • 新增模板化配置 • 2021 Dec 10, v1.4.0-incubating • 数据湖格式 Delta、Hudi、Iceberg 集成增强 • Z-Order • 服务可观测性增强 • 引擎共享级别增强 • Kyuubi Beeline 增强 • 企业级安全特性增强(Kerberos、Zookeeper ACL) • Docker Compose 测试环境⼀键启动 • 新增 MySQL 协议⽀持 • 更多企业级特性… • 新增异步 Launch Engine Serverless Serverless SQL Spark on Lakehouse
20 .Kyuubi 社区开发者成⻓ ⾃ Kyuubi 1.0 以来共有 61 位 开发者提交 1000+ commits 进⼊ Apache 基⾦会孵化期 以来 4 次版本发布 新增 2 名 Committers
21 . Kyuubi 社区⽤户成⻓ ⾸次被公有云采⽤ 2021/08 ⾸个来⾃海外企业的案例分享 2021/11 更多案例分享~ ⾸个来⾃海外的案例分享 2022/01
22 .谁在使⽤ Apache Kyuubi (Incubating)? 欢迎分享~
23 . Q&A Apache Kyuubi 官⽅公众号 Kyuubi 案例分享 独行快,众行远。Kyuubi 社区,期待你的加入~