《李振煒-基于Doris湖倉一體分析系統在快手的實踐.pdf》由會員分享,可在線閱讀,更多相關《李振煒-基于Doris湖倉一體分析系統在快手的實踐.pdf(35頁珍藏版)》請在三個皮匠報告上搜索。
1、DataFunConDataFunCon#20242024基于基于DorisDoris湖倉一體分析系湖倉一體分析系統在快手的統在快手的實踐實踐演講人:李振煒-快手-大數據架構師ContentsContents目錄目錄公司OLAP分析現狀自動物化系統湖倉一體分析系統架構緩存系統公司公司OLAPOLAP分析現狀分析現狀公司OLAP分析現狀在當下的信息時代,數據作為公司一種重要的資產,OLAP分析提煉數據價值,成為公司決策的重要的依據,在公司內部使用非常廣泛,每天的查詢量接近10億公司OLAP分析現狀主要的分析引擎為ClickHouse,整體的分析加工鏈路如下:公司OLAP分析現狀這套分析加工流程,
2、雖然在公司內部成熟穩定運行,不過也面臨很多的問題。01入倉代價比較入倉代價比較大大數據入倉到CK,能提高查詢性能,但同時造成數據冗余存儲,影響數據就緒時間,花費精力維護導入任務,數據導入占用CK集群資源02加工鏈路復雜加工鏈路復雜為了提高查詢性能,數據工程師需要花大量的人力建立ADS層模型,并進行toCK03數據治理成本較大數據治理成本較大報表看板下線之后,對應的ADS層和toCK的任務還在一直運行,造成計算資源和存儲資源的浪費,大部分需要人工進行溝通04查詢調優門檻查詢調優門檻高高排序字段的選擇,二級索引的建立,物化視圖的建立,hash字段的選擇對查詢性能影響比較大,但同時門檻較高公司OLA
3、P分析現狀為了解決當前面臨的一些問題,結合業界湖倉一體和數據編織等理念,我們重構了當前的分析系統,打造了基于Doris湖倉一體分析系統,分析性能達到原來數倉的能力,同時又提高數據交付能力和數據治理能力。湖倉一體分析系統架構湖倉一體分析系統架構湖倉一體分析系統架構數倉引擎直接分析湖中的數據,同時性能達到數倉原先水平湖:1.數據在湖中完成生產2.統一存儲,數據共享3.數據格式開放,支持多種引擎查詢倉:1.查詢效率高2.索引,物化,向量化執行等能力3.mpp分布式執行架構湖倉都有各自的優點,我們選取分析系統依賴的相關的點,進行結合,打造湖倉一體分析系統湖倉一體分析系統架構首先面臨的問題是數倉執行引擎
4、的選型,結合業界的發展趨勢以及在公司內部的一些實踐,最終選擇了Doris。Doris為了提高數據湖的查詢性能,已經做了大量的工作,包括:元數據緩存AParquet Native ReaderB外表異步物化E外部統計信息,進行CBO優化D數據文件緩存到本地C一致性Hash算法分發查詢任務,盡可能提升緩存命中率F湖倉一體分析系統架構在Doris現有功能的基礎上,以及結合實際使用情況,做了如下的一些調整 元數據緩存:元數據緩存在外部系統中,FE盡可能無狀態,緩存元數據能全局共享,同時完成緩存的管理 數據緩存:引入了分布式文件緩存系統Alluxio,提高數據緩存的穩定性,合理高效利用MEN/SSD/H
5、DD等異構存儲介質。同時數據也可以緩存到Client(BE節點)本地 外表統計信息:存儲到外部系統中,調度離線Spark任務去收集對應的統計信息,并且統計信息全局共享 排序主鍵索引:湖中的表生產的時候,指定排序鍵,使得Parquet中的數據有序,謂詞下推后能盡可能過濾無用的RowGroup,同時調小RowGroup的大小,提高RowGroup過濾效率 預處理bucket表:湖中的表可以生成bucket,Doris利用bucket信息,生成colocation agg和colocation join,避免shuffle,提高查詢效率湖倉一體分析系統架構自此,入倉代價比較大的問題得到很好的解決,D
6、oris可以直接分析湖中的數據,避免數據進行同步,同時性能可以達到原來倉的水平。但同時又引入了一些新問題:排序鍵的設計,bucket字段的設計,RowGroup大小的調整,這些都需要在生產階段完成,無形中增加了數據工程師的工作量 元數據緩存,數據緩存,統計信息的收集完全感知不到生產過程,數據變化之后,這些信息需要聯動進行調整,否則有不一致的風險湖倉一體分析系統架構引入新問題的同時,設計之初面臨的加工鏈路復雜和數據治理成本較大的問題目前還沒有解決,深入分析這些痛點,可以發現根源在于ADS模型的生產和消費不是同一個角色。ADS模型消費主要是運營,產品,數分,業務研發在使用,和業務場景深度耦合,需求
7、多樣;ADS模型生產主要是數據工程師負責,首先需要理解業務需求,然后設計出ADS模型,進行生產加工。其次業務的調整,導致模型的廢棄,也很難感知到,導致模型的下線需要花大量精力去溝通。湖倉一體分析系統架構根源找到之后,又借鑒當前數據編織的理念,湖倉一體分析系統中引入了自動物化功能,由消費驅動生產,ADS模型進行自動物化,物化的生產邏輯對數據工程師屏蔽,全部托管在計算引擎??梢杂蓺v史查詢,推斷出合適的ADS模型 數據工程師指定一些專家規則,輔助生成ADS模型 歷史查詢和專家規則,具備全局視角,能夠設計出更合理的ADS模型,包括排序字段,bucket字段,聚合維度和指標等,滿足多種查詢場景 數據工程
8、師全部直接交付DWS層,所有消費者看到都是DWS,看板,報表都是在DWS進行配置,引擎根據查詢自動選擇最優的物化,進行查詢加速 沒有查詢的物化,經過一段時間的冷卻期,自動完成下線,完成數據治理 引擎能感知到物化視圖的生產,RowGroup大小的調整,數據信息的變化都能及時感知到,并完成同步 沒有命中物化,穿透到DWS的查詢,或者查詢周期大,命中物化的數據量大,自動路由到Spark執行,提高大查詢執行成功率湖倉一體分析系統架構湖倉一體分析系統架構湖倉一體分析系統緩存系統查詢執行引擎Doris自動物化系統緩存系統緩存系統緩存系統SchemaSchema信息信息PartitionsPartition
9、s信息信息數據文件數據文件列表列表文件文件存儲存儲數倉內存,自組織,速度快內存,自組織,速度快內存,自組織,速度快本地磁盤存儲,速度快湖倉一體HMS,性能不穩定,速度慢HMS,性能不穩定,復雜join獲取,速度慢HDFS,性能不穩定,速度慢HDFS,性能不穩定,跨網絡傳輸,速度慢引入緩存的必要性:元數據緩存數據緩存緩存系統表信息緩存及同步緩存系統表信息持久化格式列名列名說明說明DB_NAME庫名TBL_NAME表名TBL_ID和HMS中TBL_ID一致,做一致性校驗CREATE_TIMEFE 增量同步使用LAST_MODIFIED_TIMECOLUMNSjson字符串,列信息PARTITION
10、_COLUMNSjson字符串,分區列信息BUCK_COLUMNSjson字符串,分桶信息TENANTSjson字符串,租戶信息,doris集群只同步對應租戶的表信息監聽HMS變更采樣的是監聽mysql binlog的變更來實現,之所以沒采用HMS的Event Listener,主要是內部HMS版本的問題。繼承MasterDaemon實現ExternalMetaSynchronizer,周期從Meta Store中獲取增量信息,然后同步到FE,FE中的信息回放參考現有MetastoreEvent實現。緩存系統分區信息緩存及同步緩存系統分區信息持久化格式列名列名說明說明DB_NAME庫名TBL_
11、NAME表名TBL_ID和HMS中TBL_ID一致PART_ID和HMS中PART_ID一致,做一致性校驗LAST_MODIFIED_TIMEHMS中分區修改時間,作為緩存系統中的版本信息LOCATION當前分區的hdfs路徑IS_USE_CACHE當前分區是否被cache,如果cache,location的schema為alluxio:/,否則為hdfs:/PKEY_NAME_n第n個分區列名PKEY_VAL_n第n個分區列值HDFS_FILES 當前分區下的文件列表以及文件大小TENANTS對應的分區的租戶信息緩存系統新增分區處理流程緩存系統獲取split處理流程自動物化系統自動物化系統自
12、動物化系統業務平臺數據處理鏈路長,交付周期長查詢場景復雜,難選擇合適的查詢引擎查詢要高效,數據需要適配查詢,例如索引,二級索引,分桶字段,需要在數據生產的時候配置,門檻較高數據治理難度大,存在浪費資源的情況必要性自動物化系統Doris本身是支持外表物化為內表,經過評估之后,現有模式不太適合公司內部的實際情況:s物化生產使用大量的資源,Doris本身的資源比較難滿足高優看板數據就緒需要有SLA保障,需要從調度機制上進行保障物化視圖數據期望存儲在數據湖中物化不能命中的情況下,如果判定為大查詢,能路由到Spark3 32 21 14 4自動物化系統因此整體實現思路是:自動物化系統復用Doris物化改
13、寫的能力物化的發現,管理和生產在外部系統實現KwaiMTMV自動物化系統物化的發現主要有兩種方法:專家規則1.用戶主動指定指標維度,例如指標sum(time),count(distinct uid),維度city,gender2.用戶主動指定一段sql,select sum(time),count(distinct uid)from db.tbl group by city,gender 歷史查詢自動識別1.基于歷史查詢,發現值得物化的表2.識別出全局的高頻查詢算子進行物化,盡可能提高物化復用率3.除了聚合指標維度,還可以自動設置索引,二級索引和分桶字段自動物化系統列名列名說明說明DB_NAM
14、E庫名TBL_NAME表名TBL_ID做一致性校驗CREATE_TIMEFE 增量同步使用LAST_MODIFIED_TIMECOLUMNS列信息PARTITION_COLUMNS分區列信息BUCK_COLUMNS分桶信息TENANTS租戶信息VIEW_SQL物化SQL,例如select sum(time)as time_sum,count(distinct uid)as uid_uniq from db.tbl group by city,genderBASE_TABLES物化依賴的底表信息,例如 db.tbl物化元信息持久化格式,在原來hive表信息的基礎上增加物化相關的信息自動物化系統物
15、化生產的一些關鍵技術實現:1.根據物化元信息,自動生成生成任務,注冊到公司內部離線生產調度平臺,每天例行調度2.依賴的底表數據發生變化,根據血緣關系,自動調度物化生產任務運行3.生產的資源使用對應租戶離線生產隊列資源,需要高優生產的物化,自動調度到高優隊列4.物化生產任務的監控報警復用生產調度平臺5.可以支持數據量較大的表進行物化6.實現了一批Java UDF,可以把一些指標的聚合的中間結果序列化之后以二進制寫到Parquet中,Doris同時可以利用這些UDF,完成數據的反序列化,對指標完成上卷運算。自動物化系統物化元數據獲取及查詢改寫過程自動物化系統實際改寫效果自動物化系統后續計劃01實現根據歷史SQL,實現物化自動發現02Parquet Page級別Index的支持03支持更豐富的物化類型感謝感謝觀看觀看