您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[DataFunSummit2023:数据湖架构峰会]:湖仓存储系统设计剖析和性能优化 - 发现报告

湖仓存储系统设计剖析和性能优化

AI智能总结
查看更多
湖仓存储系统设计剖析和性能优化

湖仓存储系统设计剖析和性能优化 毕岩——阿里云 性能优化 湖仓系统 核心设计 湖仓系统 阿里云EMR湖仓系统 统一Catalog存算分离多样workload(半/非)结构化数据批流一体事务ACIDSchemaEvolution数据管理/审计开放/开源 核心设计 核心设计 •元数据•Schema,配置,数据文件列表 •Merge-On-Read 元数据->DeltaLake 元数据加载流程: •定位最新的ckp元数据文件•List后面的deltalog json文件•按版本号依次解析,得到:•表的schema和配置•有效数据文件列表 元数据->Iceberg 元数据加载流程: •定位当前metadata文件,得到:•表的schema和配置•当前snapshot的manifestlist文件 •解析manifestlist文件,得到:•一组manifest文件 •解析manifest文件,得到:•有效数据文件列表 元数据->Hudi 元数据加载流程: •解析hoodie.properties,得到:•表的schema和配置 •获取有效数据文件列表:•未开启metadata:•ListFileSystem+Timeline;•开启:•读取metadata表 元数据 Merge-On-Read •写:避免写放大(vsCopy-On-Write) •读:合并增量数据 •Compaction•等同于对需要合并的文件中数据执行一次COW方式的写入 MOR->Hudi读写 •1*FileGroup=1*basefile+N*logfile •Logfile内保存完整的更新数据记录,或删除的记录主键 •查询时根据主键合并base/logfile内的数据 MOR->DeltalakeDeletionVectors(DV) DV写入: •使用DV记录要标记数据所在文件的offset信息•RoaringBitMap •一个AddFile最多伴随一个DV DV查询: •调整Plan适配带有DV的查询 •BroadcastDeletionVector MOR 性能优化 查询 其他影响查询: •RSS(阿里云Celeborn)•NativeEngine:DatabricksPhoton,Velox,Gluten… 查询->元数据加载 加载方式 •单点加载: •适用于小表,且有内存压力•Iceberg•Delta-Standalone(Hive/Flink等) •分布式加载: •适用于大表,需启动SparkJob•Delta•Hudi 查询->元数据->EMRManifest EMRManifest •2.2+PB(10+G元数据)核心ODS表 •Hive/Presto元数据加载缓慢、内存压力大 •支持定期/增量构建 •验证(21年300+TB时):•内存仅10%•元数据秒级加载 查询->元数据->EMRDatalakeMetastore DataLakeMetastore •中心化的元数据服务 •兼容社区版本,支持双写 •更丰富的元数据信息 •更精准的文件裁剪 查询->Optimizerwithstatistics Statistics: •TableStatistics •ColumnStat Optimization:•Cost-Based Optimization(CBO) •Join,Agg,Filter,… 收集方式: •ANALYZE TABLEFORALLCOLUMNS •湖格式DML PostHook 查询->Optimizerwithstatistics SELECTCOUNT(*)FROMTABLE优化: •使用元数据stat实现将特定Aggregate=>LocalRelation(countValue) 如何更好的利用statistics来优化查询? 如何高效收集/实时更新statistics? 如何打通湖格式自身和Spark需要的statistics? 查询->TableScan 小文件: •<64KB?1MB?128MB? 合并小文件: •Delta:Optimize•Hudi:Clustering•Iceberg:Compaction •目标文件大小、执行合并的方式 过多的文件将影响湖格式的元数据持久化、加载=>动态优化FileSize 查询->TableScan->裁剪 DatabricksDeltaLake:•BloomFilter •使用单独的目录文件,1to1的方式保存数据文件的行级BF Hudi: •Multi-ModalIndex(metadata) EMRDataLakeMetastore:•IndexSystem 查询->TableScan->ParquetReader •Compression压缩•snappy(deltalake默认),gzip(hudi默认),lzo,zstd,… •开启filterpushdown •开启向量化Reader •自定义ParquetReader•NativeParquet Reader(Arrow,Presto,Velox) 写入 •表类型的选择:•COWorMOR •TableService•Checkpoint •Optimize/Clustering/Compaction•Vacuum/Clean/Expire •参数调优: •写入操作类型:bulk_insert/upsert/…•Parquet/ORC配置•… 写入->TableService PostProcess方式: •影响流式写入效率•造成任务的异常中断 流式写入+离线湖表管理 •Flink+Spark •HudiServiceManager •DLF自动化湖表管理 感谢您的观看 毕岩——阿里云