冰山REST目录的演变格局 顾宇飞 yufei.gu@snowflak.com ©2024雪花公司保留所有权利 造成by: org.apache.icebug.exceptions.NotFoundException:无法打开文件的输入流: s3://some/path/to/table/metadata/13648-45c53fb2-5124-4541-ace3- c63ed91e1d26.metadata.json 议程 •为何选择RESTCatalog? •最新功能与未来方向 •日益增长的生态系统 •服务器实现:ApachePolaris(孵化中) 仅存储 l表仍然有效 l寻址不良:使用命名空间和表的路径 发动机 l缺乏数据治理,例如,数据沿袭 l性能问题没有缓存,重复读取查询和元数据的文件 l兼容性问题:老客户与新客户 ©2024雪花公司保留所有权利 传统冰山目录 •特提征供:基本✁数据治理CATALOG -引擎生成metadata.json文件 -性能顾虑:无缓存 -引擎通过冲突解决(锁定表)进行重试 发动机 •兼容性问题:老客户与新客户 ©2024雪花公司保留所有权利 蜂巢目录 JDBC目录 冰山乐观并发 冰山表 v1 Client1 v2 Client2 v3 幸福之路 冰山乐观并发 冰山表 Client1 v1 v2’ Client2 v2 冲突解决 v3 可靠and低延迟提交 更好地解决冲突 轻松✁客户端实现 数据治理 冰山REST目录CATALOG •将客户端职责转移到服务器 •一个简单✁想法来改变我们完全使用冰山表✁方式 发动机 ©2024雪花公司保留所有权利 REST目录 •将客户责任转移到服务器 服务器端处理提交和重试。无需表级锁定。更快更可靠。服务器端写入metadata.json文件,不存在兼容性问题。 •改进提交时✁决策 更好地解决冲突o •DDLvsDML,当它与不相关✁DDL冲突时不添加失败•压缩vs摄取 多表事务o •更轻松✁客户端实施 较少✁责任意味着更简单✁客户,如计算引擎,其他系统;更好地支持多种语言✁客户,如Python 、Rust、Go。 最近✁功能 •查看支持 •服务器端规划 •Severcapability 未来方向 •服务器端元数据表 •细粒度提交发动机 •CredentialRefresh,CredentialVending •简化LoadTable ©2024雪花公司保留所有权利 CATALOG 成长生态系统 ICEBERGRESTSPEC 冰山™ Rust APACHEPOLARIS ApacheIceberg™✁可互操作✁开源目录 集中、交叉-发动机安全和 访问 跨引擎读取 并写互操作性 跑到任何地方,没有锁定 ApachePolaris目前正在Apache软件基金会进行孵化 跨引擎读写 ApacheIceberg✁开源REST协议,支持多个引擎进行读写操作:ApacheFlink™、ApacheSpark™ 、Trino以及更多其他引擎。 发动机 ApacheFlink™ApacheSpark™PyIcebergTrino雪花StarRocks RESTAPI CATALOGAPACHEPOLARIS •表/视图API•OAuth2•多表储存 事务 ©2024雪花公司保留所有权利 ApachePolaris目前正在Apache软件基金会进行孵化 集中化, 安全和访问 •定义委托人/用户和Apache中✁角色北极星 •在上管理RBAC 用户✁Iceberg表或角色 •管理安全性 存储层 自动售货范围引擎✁凭据查询执行期间 发动机 CATALOG 储存 ApacheFlink™ApacheSpark™ PyIcebergTrino雪花StarRocks APACHEPOLARIS 基于角色✁访问控制 凭证自动售货 ©2024雪花公司保留所有权利 ApachePolaris目前正在Apache软件基金会进行孵化 在任何地方运行 ,没有锁定 •在容器(例如Docker,Kubernetes)中部署自己✁基础设施 •灵活切换基础架构并保留RBAC 、命名空间和表定义 APACHE 北极星 GCEGKEDocker EC2EKSDocker 雪花管理 服务 VMsAKSDocker ©2024雪花公司保留所有权利 ApachePolaris目前正在Apache软件基金会进行孵化 实体层次结构 •CatalogsareINTERNAL(read /write)orEXTERNAL(read-onlyfornow) •命名空间可以嵌套任意深 ©2024雪花公司保留所有权利 权限模型 委托人:应用程序或用户 ✁身份 目录角色:实体上✁权限分组 爱丽丝 服务管理员 Catalog1 ETL/流媒体 发动机 数据工程师 AI/ML应用程序 数据科学家 Catalog2 CatalogAdmin 数据管理 Catalog阅读器 CatalogAdmin 数据管理 Catalog阅读器 主要角色:主要角色和目录角色之间✁连接 读取数据写入数据写入属性读取属性列出表格 列出命名空间 读取数据写入数据列出表格 列出命名空间 读取数据列出表格 列出命名空间 namespace1 namespace2 表1 表2 表3 表4 ©2024雪花公司保留所有权利 ApachePolaris目前正在Apache软件基金会进行孵化 TryApache北极星在刚刚5分钟数 DEMO •使用SparkSQL尝试Polaris ©2024雪花公司保留所有权利 Git克隆并在本地运行北极星 gitclonegit@github.com:apache/polaris.git./gradlewrunApp 在另一个终端中连接Polaris和SparkSQL ./regtests/run_spark_sql.sh 运行SparkSQL命令: 创建数据库db1;显示所有数据库;创建表db1.table1(idint,namestring);插入数据到db1.table1:(1,'a');选择db1.table1中✁所有数据;插入数据到db1.table1:(2,'b');调用polaris.system.expire_snapshots('db1.table1',时间戳'2024-10-1 0'); DEMO •尝试使用PyIceberg ✁北极星 运行PyIcebergCLIpyIceberg列表pyIceberg列表db1pyIceberg描述db1.t1pyIceberg文件db1.t1 >cat.pyiceberg.yamlcatalog: default: uri:http://localhost:8181/api/catalogwarehouse:manual_spark token:principal:root realm:default-realm ©2024雪花公司保留所有权利 DEMO 创建外部目录 你:属性(“type”=“iceberg”,“iceberg.catalog.type”=“rest”,“iceberg.catalog.uri”=“http://polaris.metastore.svc.cluster.local:8181/api/catalog”,“iceberg.catalog.credential”=“xxxx:xxxxxxxx”,“iceberg.catalog.scope”=“PRINCIPAL_ROLE:ALL”,“iceberg.catalog.warehouse”=quickstart_catalog"); •尝试使用StarRocks ✁北极星 ©2024雪花公司保留所有权利 •设置目录极化; •显示数据库 •使用db1; •从db1.table1中选择count(*); 下一步是什么?社区驱动✁路线图 由NotificationAPI支持✁目录同步 外部目录->北极星->外部目录 More存储选项,e.g.,HDFS(问题 #85), S3兼容storages 支持表类型其他than冰山,e.g.,Hive表via联邦 More治理特点,e.g.,列掩蔽,加密,data谱系 高级冰山目录功能 提交冲突解决服务器端规划 适用于HMS用户✁迁移工具 加入社区! •完美✁时间加入 多样化✁专业知识:PPMC包括来自Snowflake、oDremio、Google、Microsoft、AWS和Confluent等领先组织✁成员。 成为创新✁一部分:为具有强大社区✁前沿项目做出贡献。o •Get涉及 加入社区:在开发列表和聊天通道上与我们互动。o贡献到代码库:o •添加新功能•错误修复•文档增强 分享反馈:您✁经验和建议对我们很有价值。 Resources 冰山REST规范北极星GitRepo 关注公众号 克yu! 谢 o T感汉 观看!