1、华为云实时数据湖查询优化演讲人:孟涛华为高级工程师2023 华为云数据湖介绍Hudi 查询能力介绍华为云基于hudi的性能优化未来规划华为云数据湖介绍数据湖基础架构DGC流式计算FlinkSQL批处理SparkSQL批处理Spark交互式分析HetuEngine贴源层集市层汇总层postgresqlmysqloracle数据源CDMCDLHudihdfsobs数据入湖:历史存量数据通过CDM一次性搬迁。新增数据通过CDL实时搬迁。数据存储:选用hudi作为数据湖的基座,支持hdfs/对象存储obs,数据加工:流式加工:FlinkSQL 增量拉取hudi表数据。批量加工:Spark、SparkS
2、QL 两种方式。交互式分析:hetu引擎承担数据湖的查询出口。Hudi 查询能力介绍Hudi介绍流式挖掘,增量查询高效的更新,删除能力,可插拔索引事务,MVCC,并发控制,schema evolution,time travel丰富的表级别服务:自动小文件合并,数据布局优化clustering,compacion,clean丰富的生态集成,支持flink/spark写入Presto/hive/spark/flink等 查询Clustering hudi早在0.7版本就已经提供了clustering 优化数据布局,0.10版本随着z-order/hilbert高阶聚类算法的加入,hudi的数据布
3、局优化日趋强大。hudi 当前提供以下三种不同的聚类方式,针对不同的点查场景,要根据具体的过滤条件来选择不同的策略数据布局优化配合 FileSkipping才能更好的发挥效果。当我们完成数据布局后,对每个文件的相关列收集统计信息,下图给个简单的示例,数据经过排序后写入表中生成三个文件,指定点查where a 10 下图可以清楚的看出 a 10 这种就无能为力的。高性能fileList在查询超大规模数据集是,fileList是不可避免的操作;在hdfs上该操作耗时还可以接受,一旦涉及到对象存储大规模的fileList效率极其低下,hudi引入metatable 将文件信息直接保存在下来,从而避免
4、了大规模filelist,华为云基于hudi的性能优化Hudi 索引优化索引是为了加快数据检索速度而创建的一种存储结构,是一种空间换时间的设计思想,作用可以理解为书的目录,通过目录我们可以快速检索到需要的内容。常见的索引类型有:数据索引(如对数据做分区,sort,z-order),二级索引(lucene、bitmap),前缀索引等等,每种所有都有各自的优缺点。引入这些索引可以极大的提升查询引擎的查询能力 数据索引Min-max Lucene 索引 Bitmap 索引 各种索引对比和使用建议基于MDT的Min-max 索引SparkflinkCol_stat_indexFiles&partiti
5、onsMDTData filestimelineobssparkhetuMin-max索引要想效果好,数据入库后需要采用clustering,按照查询条件做排序 异步重组数据。读取时开启mdt利用hfile高效的点查能力,快速加载索引数据完成 数据文件的裁剪查询入库基于MDT的Min-max 索引集成select*from table where id 9luceneLucene 是apache开源的一款搜索工具,具有极其高效的检索效率。solr和es均基于其进行开发。利用lucene强大的倒排索引能力,可以赋予hudi更高效的多维查询,文本检索能力。表某一个列值1,9,4,4,3,1,1,3
6、,8,9分词分词文档文档id西安1,2大唐不夜城1回民街2文档文档id内容内容1西安大唐不夜城2西安回民街正向索引,给每个文档编号,作为其唯一标识倒排索引,对字段内容做分词,按分词和id构建索引分词(列值,分词(列值,string类型会分词)类型会分词)文档文档id(行号)(行号)11,6,792,1043,435,889lucene构建lucene索引要注意的点1)选择 文件级别构建,我们选择行号作为docID,全表级别生成行号不现实,而且表里面数据会持续写入之前行号讲不可以。2)异步构建方式,防止阻塞入库流程。天级别大任务可以选择同步构建Lucene会生成很多文件,这对hdfs namen