基於Hudi 和 Kylin 構建準實時高性能數據倉庫

2020-12-15 dataTECH

在近期的 Apache Kylin × Apache Hudi Meetup 直播上,Apache Kylin PMC Chair 史少鋒和 Kyligence 解決方案工程師劉永恆就 Hudi + Kylin 的準實時數倉實現進行了介紹與演示。下文是分享現場的回顧。

我的分享主題是《基於 Hudi 和 Kylin 構建準實時、高性能數據倉庫》,除了講義介紹,還安排了 Demo 實操環節。下面是今天的日程:

01

資料庫、數據倉庫

先從基本概念開始。我們都知道資料庫和數據倉庫,這兩個概念都已經非常普遍了。資料庫 Database,簡稱 DB,主要是做 OLTP(online transaction processing),也就是在線的交易,如增刪改;數據倉庫 Data Warehouse,簡稱 DW,主要是來做OLAP(online analytics processing),也就是在線數據分析。OLTP 的典型代表是 Oracle、MySQL,OLAP 則像 Teradata、Greenplum,近些年有 ClickHouse、Kylin 等。

資料庫和數據倉庫兩者在存儲實現上是不一樣的,資料庫一般是按行存,這樣可以按行來增加、修改;數據倉庫是按列來存儲,是為了分析的時候可以高效訪問大量的數據,同時跳過不需要的列;這種存儲差異導致兩個系統難以統一,數據從資料庫進入到數據倉庫需要一條鏈路去處理。

02

數據湖

近些年出現了數據湖(Data Lake)的概念,簡單來說數據湖可以存儲海量的、不同格式、匯總或者明細的數據,數據量可以達到 PB 到 EB 級別。企業不僅可以使用數據湖做分析,還可以用於未來的或未曾預判到的場景,因此需要的原始數據存儲量是非常大的,而且模式是不可預知的。數據湖產品典型的像 Hadoop 就是早期的數據湖了,現在雲上有很多的數據湖產品,比方 Amazon S3,Azure Blob store,阿里雲 OSS,以及各家雲廠商都有自己的存儲服務。有了數據湖之後,企業大數據處理就有了一個基礎平臺,非常多的數據從源頭收集後都會先落到數據湖上,基於數據湖再處理和加載到不同的分析庫去。

但是,數據湖開始設計主要是用於數據的存儲,解決的是容量的水平擴展性、數據的持久性和高可用性,沒有太多考慮數據的更新和刪除。例如 HDFS 上通常是將文件分塊(block)存儲,一個 block 通常一兩百兆;S3 同樣也是類似,大的 block 可以節省管理開銷,並且這些文件格式不一,通常沒有高效的索引。如果要修改文件中的某一行記錄,對於數據湖來說是非常難操作的,因為它不知道要修改的記錄在哪個文件的哪個位置,它提供的方式僅僅是做批量替換,代價比較大。

另外一個極端的存儲則是像 HBase 這樣的,提供高效的主鍵索引,基於主鍵就可以做到非常快的插入、修改和刪除;但是 HBase 在大範圍讀的效率比較低,因為它不是真正的列式存儲。對於用戶來說面臨這麼兩個極端:一邊是非常快的讀存儲(HDFS/S3),一邊是非常快速的寫存儲;如果取中間的均衡比較困難。有的時候卻需要有一種位於兩者之間的方案:讀的效率要高,但寫開銷不要那麼大。

03

數據倉庫的加載鏈路

在有這麼一個方案之前,我們怎樣能夠支撐到數據的修改從 OLTP 到 OLAP 之間準實時同步呢?通常大家會想到,通過 CDC/binlog 把修改增量發出來,但 binlog 怎麼樣進入到 Hive 中去呢?我們知道 Hive 很難很快地修改一條記錄,修改只能把整張表或者整個分區重新寫一遍。為了接收和準實時消費 binlog,可能需要引入一個只讀的 Database 或 MPP 資料庫,專門複製上遊業務庫的修改;然後再從這個中間的資料庫導出數據到數據湖上,供下一個階段使用。這個方案可以減少對業務庫的壓力和影響,但依然存在一些問題。

這裡有一個生動的例子,是前不久從一個朋友那裡看到的,各位可以感受一下。

可以看到在過去的方案是非常複雜的,又要用 MPP 又要用數據湖,還要用 Kylin,在這中間數據頻繁的被導出導入,浪費是非常嚴重的,而且維護成本高,容易出錯,因為數據湖和資料庫之間的文件格式往往還存在兼容性問題。

04

Hudi:新一代數據湖項目

後來我們注意到 Hudi 這個項目,它的目的就是要在大數據集上支持 Upsert(update+insert)。Hudi 是在大數據存儲上的一個數據集,可以將 Change Logs 通過 upsert 的方式合併進 Hudi;Hudi 對外可以暴露成一個普通的 Hive 或 Spark 的表,通過 API 或命令行可以獲取到增量修改的信息,繼續供下遊消費;Hudi 還保管了修改歷史,可以做時間旅行或回退;Hudi 內部有主鍵到文件級的索引,默認是記錄到文件的布隆過濾器,高級的有存儲到 HBase 索引提供更高的效率。

05

基於 Hudi+Kylin 的準實時數倉實現

有了 Hudi 之後,可以跳過使用中間資料庫或 MPP,直接微批次地增量消費 binlog,然後插入到 Hudi;Hudi 內的文件直接存放到 HDFS/S3 上,對用戶來說存儲成本可以大大降低,不需要使用昂貴的本地存儲。Hudi 表可以暴露成一張 Hive 表,這對 Kylin 來說是非常友好,可以讓 Kylin 把 Hudi 當一張普通表,從而無縫使用。Hudi 也讓我們更容易地知道,從上次消費後有哪些 partition 發生了修改,這樣 Kylin 只要刷新特定的 partition 就可以,從而端到端的數據入庫的延遲可以降低到1小時以內。從 Uber 多年的經驗來說,對大數據的統計分析,入庫小於 1 小時在大多數場景下都是可以接受的。

這裡再總結一下,使用 Hudi 來做 DW 數據加載的前置存儲給我們帶來的諸多的好處:首先,它可以支持準實時的插入、修改和刪除,對保護用戶數據隱私來說是非常關鍵的(例如 GDPR );它還可以控制小文件,減少對 HDFS 的壓力;第二,Hudi 提供了多種訪問視圖,可以根據需要去選擇不同的視圖;第三,Hudi 是基於開放生態的,存儲格式使用 Parquet 和 Avro,目前主要是使用 Spark 來做數據操作,未來也可以擴展;支持多種查詢引擎,所以在生態友好性上來說,Hudi 是遠遠優於另外幾個競品的。

06

使用 Kyligence Cloud 現場演示

前面是一個基本的介紹,接下來我們做一個 Live Demo,用到 Kyligence Cloud(基於 Kylin 內核)這個雲上的大數據分析平臺;你可以一鍵在 Azure/AWS 上來啟動分析集群,內置多種大數據組件來做建模加速,可直接從雲上存儲或雲上的資料庫抽取數據,提供了自動的監控和運維。

目前 Kyligence Cloud 已經不需要依賴 Hadoop 了,直接使用 VM 來做集群的計算力,內置了 Spark 做分布式計算,使用 S3 做數據存儲;還集成了 Kylignece Insight 做可視化分析,底層可以對接常見的數據源,也包括 Hudi,在最新發布版的 Hudi 已經被集成進來了。

接下來,劉永恆將帶來 Live Demo,他是從業務庫到處數據加載到 Hudi 中,然後 Hudi 隨後就可以從這當中來被訪問。接下來他會演示做一些數據修改,再把這個數據修改合併到 Hudi,在 Hudi 中就可以看到這些數據的改變,接下來的時間就交給劉永恆。

想了解劉永恆老師的 Demo 詳情?

請點擊播放下方現場回顧視頻,拖動進度條至 19:50 的位置,即可開始觀看。

↓↓↓↓↓

相關焦點

  • 構建實時數據倉庫,雲原生數據倉庫AnalyticDB for MySQL技術解密
    阿里雲分析型資料庫重磅推出基礎版,極大降低了用戶構建數據倉庫門檻。高度兼容MySQL,極低的使用成本和極高的性能,使中小企業也可以輕鬆的搭建一套實時數據倉庫,實現企業數據價值在線化。AnalyticDB for MySQL的產品系列包括基礎版(單機版)和集群版,基礎版為單個節點提供服務,極簡的架構大大的降低了基礎版的成本。存儲計算分離架構、行列混存技術、輕量的索引構建方式和分布式混合計算引擎又保證了基礎版強大的分析性能。年成本不到一萬就可以構建一套實時數據倉庫,無需成立專門的大數據團隊,為企業節省百萬成本。
  • Kylin Cube構建原理+調優
    維度和度量Cube和CuboidCube構建算法Cube存儲原理Kylin Cube構建優化Kylin Cube構建原理維度和度量維度:即觀察數據的角度。比如員工數據,可以從性別角度來分析,也可以更加細化,從入職時間或者地區的維度來觀察。維度是一組離散的值,比如說性別中的男和女,或者時間維度上的每一個獨立的日期。因此在統計時可以將維度值相同的記錄聚合在一起,然後應用聚合函數做累加、平均、最大和最小值等聚合計算。度量:即被聚合(觀察)的統計值,也就是聚合運算的結果。比如說員工數據中不同性別員工的人數,又或者說在同一年入職的員工有多少。
  • 魚和熊掌可以兼得 雲原生開啟「資料庫大數據一體化」新時代
    傳統數據分析系統和技術面臨巨大挑戰近年來,企業數據需求呈現出海量、數據類型多樣化、處理實時化、智能化等新特點,對數據分析系統提出了彈性擴展、結構化/半結構化/非結構化海量數據存儲計算、一份存儲多種計算及低成本等核心訴求。
  • 阿里雲實時大數據解決方案,助力企業實時分析與決策
    第三步:實時數據按實際業務需求使用Flink中進行實時ETL(可選),結果入庫MaxCompute交互式分析(Hologres)構建實時數據倉庫、應用集市,並提供海量數據的實時交互查詢和分析。Hologres提供實時離線聯邦查詢。第四步:基於阿里QuickBI進或第三方數據分析工具如Tableau行數據可視化,以及構建各業務板塊數據服務門戶應用。
  • Kylin入門|Kylin on Parquet 介紹和快速上手
    Apache Kylin 很早就被設計成了可插拔的架構,基於這種架構我們就可以很方便的去替換某個模塊而不會影響其他模塊。Kylin on Parquet 也是在 Kylin 原來架構的基礎上實現了新的查詢、構建引擎和存儲模塊。通過 Spark 實現的查詢引擎,能夠提交計算任務到 Yarn 上,實現分布式的處理。
  • Kylin的RESTful API使用
    -b cookiefile.txt -H 'Content-Type:application/json'  http://GPMASTER:7070/kylin/api/cubes/kylin_sales_cube若要向Kylin發送sql query,則POST請求中的data應遵從json規範(MySQL.json):{   "sql":"select
  • Apache Kylin v3.0.0-alpha 正式發布
    在這個版本中,值得關注的是: 3.0.0-alpha 增加了對流式數據源進行實時查詢的能力,詳情可以查看KYLIN-3654; 在KYLIN-3795中,我們使用Livy Rest API提交Spark Job,從而免除本地安裝Spark客戶端配置的麻煩; KYLIN-3820增加了新的基於Zookeeper
  • 百度數據倉庫Palo、數據工廠Pingo等四大產品獲信通院權威認證
    "百度數據倉庫Palo"是通過"分析型資料庫"能力測試的大數據產品。它是PB級別的MPP架構數據倉庫服務,以較低的成本提供在大數據集上高性能的多維分析和報表查詢功能。(百度數據倉庫Palo 和雲資料庫 RDS領取信通院大數據產品能力測評證書現場)百度數據倉庫Palo主要集成了Google Mesa和Apache Impala的技術。與其他流行的SQL-on-Hadoop系統不同,Palo被設計為一個不依賴於其他系統的簡單且單一緊密耦合的系統。
  • 萬億數據下的多維實時分析系統,如何做到亞秒級響應
    導語當業務發展到一定規模,實時數據倉庫是一個必要的基礎服務。從數據驅動方面考慮,多維實時數據分析系統的重要性也不言而喻。但是當數據量巨大的情況下,拿騰訊看點來說,一天上報的數據量達到萬億級的規模,要實現極低延遲的實時計算和亞秒級的多維實時查詢是有技術挑戰的。
  • 數據產品經理從零到一(1):數據產品能力模型構建
    本文嘗試憑藉筆者的理解構建一套數據產品經理能力模型,作為自己未來學習的方向。、kylin、BDP、growingIO、神策等、了解數據倉庫技術及理論,並對其發展趨勢有深入了解;了解數據分析,數據建模和數據挖掘技術及理論;四、數據產品經理經常面對的基礎概念1.
  • 【原創】-數據倉庫的由來?
    一、邏輯層次和概念層次,資料庫和數據倉庫在一定程度上具有相通性,都是通過資料庫軟體去管理數據,但是資料庫更關注業務交易處理過程中數據的存儲~ 數據倉庫的著重點 1、對於業務的存儲數據進行分析。
  • 數據研發同學,如何設計企業數據倉庫?
    在目前大數據時代,企業如何構建好自己的數據倉庫,個人認為,目前數據倉庫類型主要分為兩種,一種是離線數據倉庫,一種是實時數據倉庫,這兩種數據倉庫的主要區別在於業務對於數據計算延遲的敏感度。這兩種數倉雖然從技術實現上有一定差異,但是整體模型構建上,卻有很多的相似點。離線數據倉庫設計離線數據倉庫的設計,主要分為三層結構,ODS層(原始數據層),DWD層(公共明細層)和DWS(公共匯總層),APP層(業務數據應用層)。
  • Apache Kylin 4.0.0-alpha 發布,開源分布式分析引擎
    它是一個開源的、分布式的分析型數據倉庫,提供 Hadoop/Spark 之上的 SQL 查詢接口及多維分析(OLAP)能力以支持超大規模數據,最初由 eBay 開發並貢獻至開源社區。它能在亞秒內查詢巨大的表。這是繼 3.1.0 之後的主要版本,具有 35 個新特性/改進和 22 個錯誤修復。
  • 基於極速分析技術的數據共享平臺
    、分布式內存資料庫SAP Hana(OLAP)、Kafak流處理、ODG數據複製等新技術能力,構建了一個數據共享平臺,該平臺主要為了完成一下目標:1、建設實時數據共享中心:將CRM/經分/大數據平臺資料庫的數據通過goldengate/ODG產品技術,實時同步到實時數據共享中心
  • 阿里雲自研數據倉庫 AnalyticDB 再捧 TPC 全球冠軍
    2、數據倉庫的數據是其它數據源抽取而來。數據倉庫的數據有來自於分散的操作型數據,將所需數據從原來的數據中抽取出來,進行加工與集成,統一與綜合後才能進入數據倉庫。數倉中的數據是在對原有分散的資料庫數據抽取、清理的基礎上經過系統加工、匯總和整理得到的,必須消除源數據中的不一致性,以保證數據倉庫內的信息是關於整個企業的一致的全局信息。
  • 網站數據分析:數據倉庫相關的問題(三)
    之前看過Inmon的《構建數據倉庫》和《DW 2.0》,而另外一位數據倉庫大師Kimball的《數據倉庫生命周期工具箱》一直沒有時間閱讀,最近才有時間看完了大部分,就迫不及待想寫點東西了。其實數據倉庫領域普遍認為Inmon和Kimball的理論是對立的,兩者在構建數據倉庫上方向性的差異一直爭論不休,誰也無法說服誰到底哪種方法更好。
  • 關於數據倉庫建設,了解這7點就夠了
    編輯導讀:在數據分析中,實時數據倉庫很重要,它決定了報表和BI到底能不能實時展現數據。但很多人可能都對它不夠了解,本文作者結合自己的工作實踐,從7個方面分享了數據倉庫建設的相關步驟和需要注意的問題,一起來看看~之前發了一篇數據倉庫的文章,發現大家對數據倉庫還是非常感興趣的。
  • 內附PPT|性能遠超MySQL 阿里云云原生數據倉庫AnalyticDB基礎版
    ADB for MySQL基礎版構建實時數據倉庫實踐:https://files.alicdn.com/tpsservice/18b2313f8df2002993baedfabc2fe026.pdf?高度兼容MySQL,極低的使用成本和極高的性能,使中小企業也可以輕鬆地搭建一套實時數據倉庫,實現企業數據價值在線化。據介紹,雲原生數據倉庫AnalyticDB基礎版採用存儲計算分離架構,行列混存技術、輕量的索引構建方式和分布式混合計算引擎,確保任意極度複雜的SQL都有較好的性能。
  • 數倉實時化改造:Hudi on Flink 在順豐的實踐應用
    作者 | 蔡適擇(順豐大數據平臺負責人) 整理 | 趙陽(Flink 社區志願者) 本文主要介紹順豐在數據倉庫的數據實時化、資料庫 CDC、Hudi on Flink 上的實踐應用及產品化經驗。