天天看點

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

本文為2021年阿裡雲峰會,阿裡雲開發者大會大資料與AI一體化開發平台分論壇,如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐演講翻譯稿。 點選視訊觀看現場精彩回放 視訊資料下載下傳連結 講師:孫莉莉 阿裡雲智能 進階技術專家

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

本文主要分為四個部分:

一、湖倉融合的趨勢分析

二、阿裡雲湖倉一體

三、客戶案例分析

四、湖倉一體示範

一、 湖倉融合的趨勢分析

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

現在很多企業說不清楚現有大資料系統是資料湖還是資料倉庫,是以先帶着大家一起回顧一下。過去20年,整個大資料技術發展的過程,通過這樣一個剖析,希望能夠讓大家了解,資料湖和資料倉庫到底是一個什麼樣的系統,它們是因為什麼原因産生的,并且今天我們提的湖倉一體,它出現的一個背景是什麼。縱觀整個計算機科學技術領域,對于資料處理的技術主要分為四個階段,資料庫階段、大資料技術探索階段、大資料技術發展階段、大資料普惠階段。

資料庫階段主要是在上個世紀70年代至90年代期間,這個階段主要是資料庫加單機的黃金時代。資料庫系統主要是面向操作,面向事務,面向線上業務系統的一個資料系統。其實在90年代左右,資料倉庫概念就已經出現了。資料倉庫面向的是曆史全量資料分析,探查,但因為當時的整體資料量并不大,是以用一些資料庫技術的擴充,能夠支援當時資料倉庫的需求。

2000年左右,随着網際網路技術的爆發,我們迎來了大資料時代。在這個階段,我們用傳統資料庫的技術是很難滿足海量資料處理的需求。大家應該都知道,Google的三篇論文,分布式存儲、排程、計算,奠定了整個大資料技術的基礎。基本上在同一個時期,2006年出現了Hadoop的系統,阿裡巴巴在2009年發展出了飛天系統,包括微軟等頭部公司都發展出了比較優秀的分布式系統。整個這個階段,整個大資料的技術,其實是把資料做起來,資料大起來再說。

2010年左右,進入了大資料的一個蓬勃發展階段,這個階段是之前我們希望大資料技術從能用轉變為好用。這個階段出現了一系列以SQL表達為主的一些引擎,包括Hadoop體系發展出來Hive、Flink、Presto等一系列引擎。這個時候,逐漸形成了以HDFS為統一的存儲,以ORC、Parquet 為開放的檔案格式,上面有很多開放引擎為主的一個體系,這個體系像我們今天講的資料湖系統。這個階段,Hadoop的本質其實是一個資料湖系統。那資料湖的本質是什麼?本質是統一的存儲,能夠存儲原始的資料,能夠支援多種計算範式,這就是資料湖的本質。

同一時期,阿裡巴巴在飛天系統的基礎上釋出了 MaxCompute ,Google 釋出了Big Query,AWS 釋出了Redshift。這幾個系統可以稱之為大資料時代下的雲資料倉庫。那雲資料倉庫系統跟上述Hadoop體系有什麼差別呢?雲資料倉庫并不對外暴露檔案系統,暴露的是對資料的描述,用表的方式,用視圖的方式暴露出來。存儲引擎,計算引擎是被屏蔽在系統裡面的,是以存儲引擎,計算引擎可以進行深度的優化,然而使用者是沒有辦法感覺的。這個階段可以看出來,整個大資料技術已經開始細分,已經初步的形成了湖的形态和倉的形态。

現在我們所處的這個階段,也就是2015年左右,我們進入了大資料普惠階段。這個階段我們有觀察到兩個趨勢。第一個趨勢,大資料技術的發展除了追求規模,性能之外。更多的是看資料安全、資料治理、穩定性、低成本等企業級能力。我們也可以看出來,阿裡巴巴 基于MaxCompute ,建構出了非常有阿裡特色的資料中台系統。開源體系,也發展出了Atlas和Ranger,主要圍繞血緣、治理、安全等開源項目。第二個趨勢,随着AI、IOT、雲原生技術的發展,對于非結構化資料處理的需求越來越強烈。使用雲上對象存儲作為統一存儲的趨勢越來越明顯。Hadoop的體系也逐漸由HDFS為統一存儲,發展為雲上像S3、OSS這樣的雲存儲,做為統一存儲的資料湖體系。與此同時,出現了很多資料湖建構,像AWS Lake Formation以及阿裡雲釋出的DLF這樣的産品。倉的這條線,也在為了适應這樣一個趨勢,我們也在跟資料湖做很密切的關聯,發展出了外表,通過外表的方式,可以對資料庫裡面的資料進行聯邦計算。

縱觀整個20年的發展,随着大資料技術的演進,其實是發展出來了倉跟湖的兩種體系。

我們可以用下圖這張表來對比一下資料湖跟資料倉庫到底有什麼差別。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

整體上來說,資料湖是一個寬進寬出,相對協同比較松耦合的系統。資料倉庫是一個嚴進嚴出,比較嚴格緊耦合的系統。資料湖是資料先進來,然後再開始用,是以是屬于事後模組化。可以存儲結構化、半結構化、非結構化資料。資料湖是提供了一套标準的開放接口,來支援更多的引擎,像插拔式的插到這個體系裡面,是以它是向所有的引擎開放。但是這裡要注意了,正是因為它是插拔式的這種方式,計算跟存儲其實是獨立的兩套系統。它們彼此之間,其實是不能夠互相了解的,也沒有辦法做到深度的優化。這樣其實導緻,引擎的優化隻能做到适度有限優化。資料湖易于啟動,但是随着資料規模的增長,一系列的治理管理的問題出現,後期是比較難以運維的。因為資料湖不做Schema的強一緻的資料檢查,是以資料治理比較低,難管理使用。因為資料湖的資料是先進來再使用,是以它更适合解決未知的問題,比如探查類的分析,科學計算,資料挖掘等計算處理。

資料倉庫在對比次元裡基本都是相反的狀态,資料倉庫是一個嚴格的系統,是以需要事前模組化,資料經過轉化清洗進到倉裡面,存儲類型變為結構化或者半結構化。因為資料倉庫是一個相對封閉的系統,是一個自閉環的系統,是以資料倉庫向特定引擎開放,但是恰恰因為資料倉庫是一個自閉環系統,它的計算引擎、存儲引擎、中繼資料之間是可以做到非常深度、垂直的優化,可以獲得一個非常好的性能。資料倉庫因為事前模組化,資料才能進來,是以難啟動,相對來講啟動成本較高。但一旦資料進入數倉之後,整個資料的高品質,友善做治理,這個時候它的整體成本會降低,甚至達到一個免運維的狀态。資料倉庫的Schema會做強一緻的檢查,是以資料品質很高,易于使用。是以資料倉庫的計算負載天然的适合做離線計算,互動式計算以及BI和可視化。

整體上來講,資料湖更偏靈活性,資料倉庫更偏企業級能力。那麼這兩種特點對于企業到底意味着什麼呢?我們用下面這張圖來表示。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

橫軸是代表企業的業務規模,縱軸是代表企業搭建一套大資料系統所需要的成本。在企業初創的時候,整個業務規模還不大,資料從産生到消費的整個鍊路,是一個探索和創新的階段。在這個階段使用資料湖是非常容易啟動,成本也是比較低的。但是随着業務的發展和壯大,參于的人員和部門越來越多,對于資料品質管理、權限控制、成本要求會越來越高。這個時候再使用資料湖,成本是指數級上升。是以這個時候适合用資料倉庫,可以做好成本控制、資料品質管理等。從上圖可以看出,對于一個企業來講,在不同的階段,資料湖和資料倉庫都發揮着各自關鍵的作用。那是否有一種技術或者架構能同時發揮出兩者的優勢呢?

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

以阿裡雲對業界的觀察和本身大量的實踐,我們認為資料湖和資料倉庫正在發生融合。并且它們以各自的方式,向着湖倉一體的方向進行演進。從上圖中可以看出,資料倉庫到湖倉一體的演進方向,資料湖到湖倉一體的演進方向,兩者是相反的,相對的。那麼在它們各自的演進上面需要做什麼工作呢?

資料倉庫是一個嚴格的系統,是以資料倉庫更适合做事務支援,Schema強一緻檢查和演進,天然支援BI,更容易做實時性。對于資料湖,優勢在于資料類型豐富,支援多種計算模式,有開放的檔案系統,開放的檔案格式,是存儲計算分離的架構。

是以資料倉庫到湖倉一體的演進,需要從本身擁有的特性發展出資料湖的特性。其實是要跟HDFS、OSS這樣的系統做好關聯,做好融合,是以資料倉庫的結構更偏左右結構。對于資料湖到湖倉一體的演進,是需要更多的站在HDFS、OSS基礎上面,來做出強倉的特性。是以資料湖的結構更像一個上下結構。那麼,DeltaLake和Hudi其實就是在上下結構當中插了一層,做了一個湖上面的,能夠支援強倉的檔案類型。

但不管是資料倉庫到湖倉一體,還是資料湖到湖倉一體,最終大家演進的這個方向都是一緻的,都是湖倉一體。湖倉一體的特性是不變的,四種偏倉的特性,四種偏湖的特性。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

上圖為阿裡雲湖倉一體整體架構,從下往上看,底層是網絡層,中間層為湖倉引擎層,在往上是DataWorks 湖倉資料開發層,最上面是業務應用層。我們重點來講下引擎層,阿裡雲湖倉一體是左右結構,左邊是阿裡雲資料倉庫 MaxCompute,右邊是阿裡雲資料湖 EMR,中間是通過中繼資料的統一,通過開放格式相容,以達到資料跟任務可以在資料倉庫和資料湖之間的任意流動。在2020年雲栖大會上釋出的是,對于Hadoop資料湖的支援。近期我們已經支援了OSS 資料湖的湖倉一體。

上圖右側是列出來一些我們近期釋出的具體功能點。

  1. 支援雲原生資料湖

MaxCompute 對接了阿裡雲資料湖建構産品DLF,可以做到中繼資料的自動發現,做到湖/倉中繼資料統一存儲和管理。

  1. 對于資料湖查詢更好的性能

近期阿裡雲正在灰階一個功能,智能Cache,此功能可以實作OSS到倉裡面智能化的資料分層。MaxCompute 在2020年釋出了查詢加速功能,未來一個版本我們會把查詢加速引擎也投射到資料湖上面,讓它能夠支援資料湖上面的查詢加速。

  1. 生态開放性

近期已支援Delta Lake開源檔案格式。

  1. DataWorks 統一的資料開發平台

DataWorks支援多引擎,提供了湖倉一體開發體驗。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

不管是從上下結構還是左右結構演進過來的湖倉一體,最終都應該是一個簡單易用的系統體系。阿裡雲湖倉一體有四大關鍵特性,這四大關鍵特性都是在圍繞怎麼把資料湖跟資料倉庫做到更加易用。

  1. 快速接入

主要有兩個層次,一個是網絡層,一個是湖倉一體的開通層。MaxCompute 支援雲上雲下任何環境下Hadoop體系的打通,因為MaxCompute 自有的多租戶體系,如何跟特定的一個使用者環境打通,技術方面有很大的挑戰,我們研發了PrivateAccess網絡連通技術,來達到這個目标。第二個關于DataWorks白屏操作自助開通湖倉一體,未來我們會很快釋出一個版本,使用者在控制台裡面就可以很快開通湖倉一體,目前還是需要用工單方式來送出開通。

2. 統一的資料/中繼資料

其中關鍵的技術是,有一個Database級别的中繼資料映射,就是我們可以把資料湖上面的Database映射成MaxCompute 裡面的一個Project。資料湖上面的資料不需要移動,就可以讓 MaxCompute 像通路操作普通Project一樣進行消費。同時做到資料湖和資料倉庫的資料/中繼資料做到實時同步,如果資料湖内的一張表資料或者Schema發生變化,可以及時的反應在 MaxCompute 數倉這一側。同時 MaxCompute 具備内置的存儲跟檔案格式,我們也在持續的跟進開源生态内的檔案格式,包含上文提到的Delta Lake。

3. 提供統一的開發體驗

資料湖和資料倉庫本身是兩套不同的系統,兩個系統有不同的資料庫模型的定義,對象模型的定義,我們在MaxCompute 這一側,把資料湖跟資料倉庫的對象模型進行了統一,再加上 MaxCompute 的SQL和Spark是高度相容社群的,是以我們可以做到作業在兩套系統内,無縫遷移。

4. 自動數倉

這條線比較有意思,也是我們近期重點投入領域。我們去年做了一版Cache,主要是根據曆史資料做Cache,今年我又做了一版Cache,是能夠根據業務場景動态調整的政策智能化Cache,最終是要做到資料可以在資料湖跟資料倉庫中智能化的冷熱分層。我們的Cache本身需要存儲跟計算,要做到深度耦合,是以數倉做這層Cache,可以做到更加的極緻。另外,我們還嘗試在資料湖的資料上進行打标跟識别,是從資料模組化的角度來判定,哪些資料更适合放到倉裡面,哪些資料更适合放到湖裡面。比如一些結構化被反複通路,比較高頻的表資料,更适合放到資料倉庫内。如果偏非結構化/半結構化低頻的資料,更适合放到資料湖内。最終的目的是為了在性能、成本以及業務效果上達到一個最佳的平衡。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

阿裡雲湖倉一體适合哪些場景?概況起來有三大類。

  1. Hadoop叢集利舊上雲

線下Hadoop上雲需要很繁重的資料、任務搬遷,甚至要修改。這時就可以使用湖倉一體,讓線下Hadoop跟阿裡雲 MaxCompute 進行快速的打通,線下的作業不需要修改,不需要搬遷的情況下,可以直接運作到MaxCompute 的系統裡面。

  1. 資料湖ETL/Ad-hoc加速

MaxCompute 作為SaaS模式雲資料倉庫,具有高性能、低成本以及Serverless能力。通過湖倉一體,是可以把倉的能力投射到湖裡面。

  1. 企業級跨平台的統一大資料平台

企業可以基于湖倉一體的技術,将現有的一個或多個Hadoop甚至OSS湖上的資料,跟 MaxCompute 數倉進行一個打通,最後建構一整套統一的資料開發,統一的管理、治理、排程的資料開發平台。對上層業務提供的是,統一的、透明的中台能力。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

案例1、MaxCompute 數倉跟Hadoop資料湖的數倉一體案例業務介紹:

•主要做社交媒體領域裡的推薦 / 排序、文本 / 圖像分類、反垃圾 / 反作弊等。在開源 Hadoop資料湖的基礎上,借助阿裡巴巴MaxCompute和PAI,解決了超大規模下的特征工程、模型訓練等性能問題,形成了MaxCompute 和Hadoop資料湖共存的格局。

痛點:

•資料同步安排專人專項負責,工作量巨大;

•訓練資料體量大,導緻耗時多,無法滿足實時訓練要求;

•新寫 SQL 資料處理 query,無法複用 Hive SQL 原有 query。

價值:

•通過湖倉一體,無須進行資料搬遷和作業遷移,原有生産作業無縫靈活排程MaxCompute 叢集和 EMR 叢集中,且性能有提升;

•封裝建構AI計算中台,極大提升該團隊的業務支撐能力。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

案例2、MaxCompute 數倉跟OSS資料湖的湖倉一體案例業務介紹:

•客戶廣告算法團隊是湖倉一體主要客戶,主要應用是機器學習DW + MC + PAI + EAS 線上模型服務 。

•算法團隊想更集中在業務和算法上,需要自服務程度高、一站式的機器學習平台;

•Hadoop 叢集是多團隊共用,使用叢集管控較嚴,無法短時間支撐大workload 的創新業務。

•通過湖倉一體将新業務平台與原有資料平台打通,PAI on MaxCompute + DataWorks 為客戶創新業務提供靈活、一站式機器學習模型開發、訓練、模型釋出,大規模計算能力、EAS 模型釋出流程;

•起到好的示範作用,并快速複制到其他業務線,高效的支撐了該客戶業務的快速增長。

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐

案例3、MaxCompute數倉跟OSS資料湖的湖倉一體案例業務介紹:

•豐富的大資料平台建設經驗,持續進行平台的疊代更新以滿足業務不斷發展的需求。從國外某廠商遷移到阿裡雲後,積極建設和改造資料湖架構。

•第一代資料湖是 EMR + OSS,公司引入的資料中台的執行引擎和存儲是Maxcompute,兩套異構的執行引擎帶來存儲備援、中繼資料不統一、權限不統一、湖倉計算不能自由流動。

•将 EMR 的中繼資料統一到DLF,底層使用 OSS 作統一存儲,并通過湖倉一體打通EMR資料湖和MaxCompute數倉兩套體系,讓資料和計算在湖和倉之間自由流動;

•實作湖倉資料分層存儲。資料中台對資料湖資料進行次元模組化的中間表存儲在MaxCompute上,模組化的結果表放在資料湖裡供EMR或其他引擎消費。

  1. MaxCompute數倉跟OSS資料湖的湖倉一體示範
點選觀看實踐操作視訊
  1. MaxCompute數倉跟Hadoop資料的湖倉一體示範

更多關于大資料計算、雲數倉技術交流,可點選

邀請連結

或掃碼加入 “MaxCompute開發者社群” 釘釘群

如何基于MaxCompute快速打通資料倉庫和資料湖的湖倉一體實踐