天天看點

湖倉一體:資料湖vs資料倉庫之争?

湖倉一體:資料湖vs資料倉庫之争?

本文介紹資料倉庫和資料湖的差別是什麼,作者對其來龍去脈進行深入剖析,來闡述兩者融合演進的新方向——湖倉一體。

導讀:随着近幾年資料湖概念的興起,業界對于資料倉庫和資料湖的對比甚至争論就一直不斷。有人說資料湖是下一代大資料平台,各大雲廠商也在紛紛的提出自己的資料湖解決方案,一些雲數倉産品也增加了和資料湖關聯的特性。

但是資料倉庫和資料湖的差別到底是什麼,是技術路線之争?是資料管理方式之争?二者是水火不容還是其實可以和諧共存,甚至互為補充?

本文作者來自阿裡巴巴計算平台部門,深度參與阿裡巴巴大資料/資料中台領域建設,将從曆史的角度對資料湖和資料倉庫的來龍去脈進行深入剖析,來闡述兩者融合演進的新方向——湖倉一體,并就基于阿裡雲MaxCompute/EMR DataLake的湖倉一體方案做一介紹。

01、 大資料領域發展20年的變與不變

1. 概述

大資料領域從本世紀初發展到現在,已經曆20年。從宏觀層面觀察其中的發展規律,可以高度概括成如下五個方面:

  1. 資料保持高速增長- 從5V核心要素看,大資料領域保持高速增長。阿裡巴巴經濟體,作為一個重度使用并着力發展大資料領域的公司,過去5年資料規模保持高速增長(年化60%-80%),增速在可見的未來繼續保持。對于新興企業,大資料領域增長超過年200%。
  2. 大資料作為新的生産要素,得到廣泛認可- 大資料領域價值定位的遷移,從“探索”到“普惠”,成為各個企業/政府的核心部門,并承擔關鍵任務。還是以阿裡巴巴為例,30%的員工直接送出大資料作業。随大資料普惠進入生産環境,可靠性、安全性、管控能力、易用性等企業級産品力增強。
  3. 資料管理能力成為新的關注點- 數倉(中台)能力流行起來,如何用好資料成為企業的核心競争力。
  4. 引擎技術進入收斂期 - 随着Spark(通用計算)、Flink(流計算)、Hbase(KV)、Presto(互動分析)、ElasticSearch(搜尋)、Kafka(資料總線)自從2010-2015年逐漸占領開源生态,最近5年新引擎開源越來越少,但各引擎技術開始向縱深發展(更好的性能、生産級别的穩定性等)。
  5. 平台技術演進出兩個趨勢,資料湖 VS 資料倉庫- 兩者均關注資料存儲和管理(平台技術),但方向不同。
湖倉一體:資料湖vs資料倉庫之争?

▲圖1 阿裡巴巴雙十一單日處理資料量增長

2. 從大資料技術發展看湖和倉

首先,資料倉庫的概念出現的要比資料湖早的多,可以追溯到資料庫為王的上世紀 90 年代。是以,我們有必要從曆史的脈絡來梳理這些名詞出現的大概時間、來由以及更重要的背後原因。大體上,計算機科學領域的資料處理技術的發展,主要分為四個階段:

  • 階段一:資料庫時代

資料庫最早誕生于 20 世紀的 60 年代,今天人們所熟知的關系型資料庫則出現在 20 世紀 70 年代,并在後續的 30 年左右時間裡大放異彩,誕生了很多優秀的關系型資料庫,如 Oracle、SQL Server、MySQL、PostgresSQL 等,成為當時主流計算機系統不可或缺的組成部分。

到 20 世紀 90 年代,資料倉庫的概念誕生。此時的資料倉庫概念更多表達的是如何管理企業中多個資料庫執行個體的方法論,但受限于單機資料庫的處理能力以及多機資料庫(分庫分表)長期以來的高昂價格,此時的資料倉庫距離普通企業和使用者都還很遙遠。人們甚至還在争論資料倉庫(統一集中管理)和資料集市(按部門、領域的集中管理)哪個更具可行性。

  • 階段二:大資料技術的「探索期」

時間進入到 2000 年附近,随着網際網路的爆發,動辄幾十億、上百億的頁面以及海量的使用者點選行為,開啟了全球的資料量急劇增加的新時代。傳統的資料庫方案再也無力以可接受的成本提供計算力,巨大的資料處理需求開始尋找突破口,大資料時代開始萌芽。

2003、2004、2006 年 Google 先後 3 篇經典論文(GFS、MapReduce、BigTable)奠基了這個大資料時代的基本技術架構,即分布式存儲、分布式排程以及分布式計算模型。

随後,幾乎是在同一時期,誕生了包括 Google,微軟 Cosmos 以及開源 Hadoop 為代表的優秀分布式技術體系,當然,這其中也包括阿裡巴巴的飛天系統。此時人們興奮于追求資料的處理規模,即『大』資料,沒有閑暇争論是資料倉庫還是資料湖。

  • 階段三:大資料技術的「發展期」

來到 21 世紀的第二個 10 年,随着越來越多的資源投入到大資料計算領域,大資料技術進入一個蓬勃發展的階段,整體開始從能用轉向好用。

代替昂貴的手寫 MapReduce 作業的,則是如雨後春筍般出現的各種以 SQL 為表達的計算引擎。這些計算引擎針對不同的場景進行針對性優化,但都采用門檻極低的 SQL 語言,極大降低了大資料技術的使用成本,資料庫時代人們夢想的大一統的資料倉庫終于成為現實,各種資料庫時代的方法論開始擡頭。

這個時期技術路線開始出現細分。雲廠商主推的如 AWS Redshift、Google BigQuery、Snowflake,包括 MaxCompute 這樣的內建系統稱為大資料時代的資料倉庫。而以開源 Hadoop 體系為代表的的開放式 HDFS 存儲、開放的檔案格式、開放的中繼資料服務以及多種引擎(Hive、Presto、Spark、Flink 等)協同工作的模式,則形成了資料湖的雛形。

  • 階段四:大資料技術「普及期」

目前,大資料技術早已不是什麼火箭科技,而已經滲透到各行各業,大資料的普及期已經到來。市場對大資料産品的要求,除了規模、性能、簡單易用,提出了成本、安全、穩定性等更加全面的企業級生産的要求。

  • 開源 Hadoop 線,引擎、中繼資料、存儲等基礎部件的疊代更替進入相對穩态,大衆對開源大資料技術的認知達到空前的水準。一方面,開放架構的便利帶來了不錯的市場佔有率,另一方面開放架構的松散則使開源方案在企業級能力建構上遇到瓶頸,尤其是資料安全、身份權限強管控、資料治理等方面,協同效率較差(如 Ranger 作為權限管控元件、Atlas 作為資料治理元件,跟今天的主流引擎竟然還無法做到全覆寫)。同時引擎自身的發展也對已有的開放架構提出了更多挑戰,Delta Lake、Hudi 這樣自閉環設計的出現使得一套存儲、一套中繼資料、多種引擎協作的基礎出現了某種程度的裂痕。
  • 真正将資料湖概念推而廣之的是AWS。AWS 構築了一套以 S3 為中心化存儲、Glue 為中繼資料服務,E-MapReduce、Athena 為引擎的開放協作式的産品解決方案。它的開放性和和開源體系類似,并在2019年推出Lake Formation 解決産品間的安全授信問題。雖然這套架構在企業級能力上和相對成熟的雲資料倉庫産品相去甚遠,但對于開源技術體系的使用者來說,架構相近了解容易,還是很有吸引力。AWS 之後,各個雲廠商也紛紛跟進資料湖的概念,并在自己的雲服務上提供類似的産品解決方案。
  • 雲廠商主推的資料倉庫類産品則發展良好,數倉核心能力方面持續增強。性能、成本方面極大提升(MaxCompute 完成了核心引擎的全面更新和性能跳躍式發展,連續三年重新整理 TPCx-BigBench 世界記錄),資料管理能力空前增強(資料中台模組化理論、智能數倉),企業級安全能力大為繁榮(同時支援基于 ACL 和基于規則等多種授權模型,列級别細粒度授權,可信計算,存儲加密,資料脫敏等),在聯邦計算方面也普遍做了增強,一定程度上開始将非數倉自身存儲的資料納入管理,和資料湖的邊界日益模糊。

綜上所述,資料倉庫是個誕生于資料庫時代的概念,在大資料時代随雲廠商的各種數倉服務落地開花,目前通常指代雲廠商提供的基于大資料技術的一體化服務。而資料湖則脫胎于大資料時代開源技術體系的開放設計,經過 AWS 整合宣傳,通常是由一系列雲産品或開源元件共同構成大資料解決方案。

湖倉一體:資料湖vs資料倉庫之争?

▲圖2 20年大資料發展之路

02、 什麼是資料湖

近幾年資料湖的概念非常火熱,但是資料湖的定義并不統一,我們先看下資料湖的相關定義。

Wikipedia對資料湖的定義:

資料湖是指使用大型二進制對象或檔案這樣的自然格式儲存資料的系統。它通常把所有的企業資料統一存儲,既包括源系統中的原始副本,也包括轉換後的資料,比如那些用于報表, 可視化, 資料分析和機器學習的資料。資料湖可以包括關系資料庫的結構化資料(行與列)、半結構化的資料(CSV,日志,XML, JSON),非結構化資料 (電子郵件、檔案、PDF)和 二進制資料(圖像、音頻、視訊)。儲存資料湖的方式包括 Apache Hadoop分布式檔案系統, Azure 資料湖或亞馬遜雲 Lake Formation雲存儲服務,以及諸如 Alluxio 虛拟資料湖之類的解決方案。資料沼澤是一個劣化的資料湖,使用者無法通路,或是沒什麼價值。

AWS的定義相對簡潔:

資料湖是一個集中式存儲庫,允許您以任意規模存儲所有結構化和非結構化資料。您可以按原樣存儲資料(無需先對資料進行結構化處理),并運作不同類型的分析 – 從控制台和可視化到大資料處理、實時分析和機器學習,以指導做出更好的決策。

Azure等其他雲廠商也有各自的定義,本文不再贅述。

但無論資料湖的定義如何不同,資料湖的本質其實都包含如下四部分:

  1. 統一的存儲系統
  2. 存儲原始資料
  3. 豐富的計算模型/範式
  4. 資料湖與上雲無關

從上述四個标準判斷,開源大資料的Hadoop HDFS存儲系統就是一個标準的資料湖架構,具備統一的原始資料存儲架構。而近期被廣泛談到的資料湖,其實是一個狹義的概念,特指“基于雲上托管存儲系統的資料湖系統,架構上采用存儲計算分離的體系”。例如基于AWS S3系統或者阿裡雲OSS系統建構的資料湖。 

下圖是資料湖技術架構的演進過程,整體上可分為三個階段:

湖倉一體:資料湖vs資料倉庫之争?

▲圖3 資料湖技術架構演進

階段一:自建開源Hadoop資料湖架構,原始資料統一存放在HDFS系統上,引擎以Hadoop和Spark開源生态為主,存儲和計算一體。缺點是需要企業自己運維和管理整套叢集,成本高且叢集穩定性差。

階段二:雲上托管Hadoop資料湖架構(即EMR開源資料湖),底層實體伺服器和開源軟體版本由雲廠商提供和管理,資料仍統一存放在HDFS系統上,引擎以Hadoop和Spark開源生态為主。

這個架構通過雲上 IaaS 層提升了機器層面的彈性和穩定性,使企業的整體運維成本有所下降,但企業仍然需要對HDFS系統以及服務運作狀态進行管理和治理,即應用層的運維工作。同時因為存儲和計算耦合在一起,穩定性不是最優,兩種資源無法獨立擴充,使用成本也不是最優。

階段三:雲上資料湖架構,即雲上純托管的存儲系統逐漸取代HDFS,成為資料湖的存儲基礎設施,并且引擎豐富度也不斷擴充。除了Hadoop和Spark的生态引擎之外,各雲廠商還發展出面向資料湖的引擎産品。

如分析類的資料湖引擎有AWS Athena和華為DLI,AI類的有AWS Sagemaker。這個架構仍然保持了一個存儲和多個引擎的特性,是以統一進制資料服務至關重要,如AWS推出了Glue,阿裡雲EMR近期也即将釋出資料湖統一進制資料服務。

該架構相對于原生HDFS的資料湖架構的優勢在于:

  • 幫助使用者擺脫原生HDFS系統運維困難的問題。HDFS系統運維有兩個困難:1)存儲系統相比計算引擎更高的穩定性要求和更高的運維風險 2)與計算混布在一起,帶來的擴充彈性問題。存儲計算分離架構幫助使用者解耦存儲,并交由雲廠商統一運維管理,解決了穩定性和運維問題。
  • 分離後的存儲系統可以獨立擴充,不再需要與計算耦合,可降低整體成本
  • 當使用者采用資料湖架構之後,客觀上也幫助客戶完成了存儲統一化(解決多個HDFS資料孤島的問題)

下圖是阿裡雲EMR資料湖架構圖,它是基于開源生态的大資料平台,既支援HDFS的開源資料湖,也支援OSS的雲上資料湖。

湖倉一體:資料湖vs資料倉庫之争?

▲圖4 阿裡雲EMR資料湖架構

企業使用資料湖技術建構大資料平台,主要包括資料接入、資料存儲、計算和分析、資料管理、權限控制等,下圖是Gartner定義的一個參考架構。目前資料湖的技術因其架構的靈活性和開放性,在性能效率、安全控制以及資料治理上并不十分成熟,在面向企業級生産要求時還存在很大挑戰(在第四章會有詳細的闡述)。

湖倉一體:資料湖vs資料倉庫之争?

▲圖5 資料湖架構圖(來自網絡)

03、 資料倉庫的誕生,以及和資料中台的關系

資料倉庫的概念最早來源于資料庫領域,主要處理面向資料的複雜查詢和分析場景。随大資料技術發展,大量借鑒資料庫的技術,例如SQL語言、查詢優化器等,形成了大資料的資料倉庫,因其強大的分析能力,成為主流。

近幾年,資料倉庫和雲原生技術相結合,又演生出了雲資料倉庫,解決了企業部署資料倉庫的資源供給問題。雲資料倉庫作為大資料的高階(企業級)平台能力,因其開箱即用、無限擴充、簡易運維等能力,越來越受到人們的矚目。

Wikipedia對資料倉庫的定義:

在計算機領域,資料倉庫(英語:data warehouse,也稱為企業資料倉庫)是用于報告和資料分析的系統,被認為是商業智能的核心元件。資料倉庫是來自一個或多個不同源的內建資料的中央存儲庫。資料倉庫将目前和曆史資料存儲在一起,用于為整個企業的員工建立分析報告。比較學術的解釋是,資料倉庫由資料倉庫之父W.H.Inmon于1990年提出,主要功能乃是将組織透過資訊系統之線上交易處理(OLTP)經年累月所累積的大量資料,透過資料倉庫理論所特有的資料存儲架構,作一有系統的分析整理,以利各種分析方法如線上分析處理(OLAP)、資料挖掘(Data Mining)之進行,并進而支援如決策支援系統(DSS)、主管資訊系統(EIS)之建立,幫助決策者能快速有效的自大量資料中,分析出有價值的資訊,以利決策拟定及快速回應外在環境變動,幫助建構商業智能(BI)。

資料倉庫的本質包含如下三部分:

  1. 内置的存儲系統,資料通過抽象的方式提供(例如采用Table或者View),不暴露檔案系統。
  2. 資料需要清洗和轉化,通常采用ETL/ELT方式
  3. 強調模組化和資料管理,供商業智能決策

從上述的标準判斷,無論傳統資料倉庫(如Teradata)還是新興的雲資料倉庫系統(AWS Redshift、Google BigQuery、阿裡雲MaxCompute)均展現了數倉的設計本質,它們均沒有對外暴露檔案系統,而是提供了資料進出的服務接口。

比如,Teradata提供了CLI資料導入工具,Redshift提供Copy指令從S3或者EMR上導入資料,BigQuery提供Data Transfer服務,MaxCompute提供Tunnel服務以及MMA搬站工具供資料上傳和下載下傳。這個設計可以帶來多個優勢:

  1. 引擎深度了解資料,存儲和計算可做深度優化
  2. 資料全生命周期管理,完善的血緣體系
  3. 細粒度的資料管理和治理
  4. 完善的中繼資料管理能力,易于建構企業級資料中台

正因為如此,阿裡巴巴飛天大資料平台建設之初,在選型的時候就采用了資料倉庫的架構,即MaxCompute大資料平台。

MaxCompute(原ODPS),既是阿裡巴巴經濟體的大資料平台,又是阿裡雲上的一種安全可靠、高效能、低成本、從GB到EB級别按需彈性伸縮的線上大資料計算服務(圖6是MaxCompute産品架構,具體詳情請點選阿裡雲MaxCompute官網位址)。

作為SaaS模式的企業級雲數倉,MaxCompute廣泛應用在阿裡巴巴經濟體、以及阿裡雲上網際網路、新金融、新零售、數字政府等數千家客戶。

湖倉一體:資料湖vs資料倉庫之争?

▲圖6 MaxCompute雲數倉産品架構

得益于MaxCompute資料倉庫的架構,阿裡巴巴上層逐漸建構了“資料安全體系”、“資料品質”、“資料治理”、“資料标簽”等管理能力,并最終形成了阿裡巴巴的大資料中台。可以說,作為最早資料中台概念的提出者,阿裡巴巴的資料中台得益于資料倉庫的架構。

湖倉一體:資料湖vs資料倉庫之争?

▲圖7 阿裡巴巴資料中台架構

04、 資料湖 VS 資料倉庫

綜上,資料倉庫和資料湖,是大資料架構的兩種設計取向。兩者在設計的根本分歧點是對包括存儲系統通路、權限管理、模組化要求等方面的把控。

資料湖優先的設計,通過開放底層檔案存儲,給資料入湖帶來了最大的靈活性。進入資料湖的資料可以是結構化的,也可以是半結構化的,甚至可以是完全非結構化的原始日志。

另外,開放存儲給上層的引擎也帶來了更多的靈活度,各種引擎可以根據自己針對的場景随意讀寫資料湖中存儲的資料,而隻需要遵循相當寬松的相容性約定(這樣的松散約定當然會有隐患,後文會提到)。

但同時,檔案系統直接通路使得很多更高階的功能很難實作,例如,細粒度(小于檔案粒度)的權限管理、統一化的檔案管理和讀寫接口更新也十分困難(需要完成每一個通路檔案的引擎更新,才算更新完畢)。

而資料倉庫優先的設計,更加關注的是資料使用效率、大規模下的資料管理、安全/合規這樣的企業級成長性需求。資料經過統一但開放的服務接口進入資料倉庫,資料通常預先定義 schema,使用者通過資料服務接口或者計算引擎通路分布式存儲系統中的檔案。

資料倉庫優先的設計通過抽象資料通路接口/權限管理/資料本身,來換取更高的性能(無論是存儲還是計算)、閉環的安全體系、資料治理的能力等,這些能力對于企業長遠的大資料使用都至關重要,我們稱之為成長性。

下圖是針對大資料技術棧,分别比較資料湖和資料倉庫各自的取舍。

湖倉一體:資料湖vs資料倉庫之争?

▲圖8 資料湖和資料倉庫在技術棧上的對比

靈活性和成長性,對于處于不同時期的企業來說,重要性不同。

  1. 當企業處于初創階段,資料從産生到消費還需要一個創新探索的階段才能逐漸沉澱下來,那麼用于支撐這類業務的大資料系統,靈活性就更加重要,資料湖的架構更适用。
  2. 當企業逐漸成熟起來,已經沉澱為一系列資料處理流程,問題開始轉化為資料規模不斷增長,處理資料的成本不斷增加,參與資料流程的人員、部門不斷增多,那麼用于支撐這類業務的大資料系統,成長性的好壞就決定了業務能夠發展多遠。資料倉庫的架構更适用。

本文有觀察到,相當一部分企業(尤其是新興的網際網路行業)從零開始架構的大資料技術棧,正是伴随開源 Hadoop 體系的流行,經曆了這樣一個從探索創新到成熟模組化的過程。

在這個過程中,因為資料湖架構太過靈活而缺少對資料監管、控制和必要的治理手段,導緻運維成本不斷增加、資料治理效率降低,企業落入了『資料沼澤』的境地,即資料湖中彙聚了太多的資料,反而很難高效率的提煉真正有價值的那部分。最後隻有遷移到資料倉庫優先設計的大資料平台,才解決了業務成長到一定規模後所出現的運維、成本、資料治理等問題。

還是舉阿裡巴巴的例子,阿裡巴巴成功的資料中台戰略,正是在 2015 年前後阿裡巴巴全集團完成 MaxCompute(資料倉庫) 對多個 Hadoop( 資料湖)的完全替換(登月項目)才逐漸形成的。

湖倉一體:資料湖vs資料倉庫之争?

▲圖9 資料湖的靈活性 VS 資料倉庫的成長性的示意圖

05、 下一代演進方向:湖倉一體

經過對資料湖和資料倉庫的深入闡述和比較,本文認為資料湖和資料倉庫作為大資料系統的兩條不同演進路線,有各自特有的優勢和局限性。

資料湖和資料倉庫一個面向初創使用者友好,一個成長性更佳。對企業來說,資料湖和資料倉庫是否必須是一個二選一的選擇題?是否能有一種方案同時兼顧資料湖的靈活性和雲資料倉庫的成長性,将二者有效結合起來為使用者實作更低的總體擁有成本?

将數倉和資料湖融合在一起也是業界近年的趨勢,多個産品和項目都做過對應的嘗試:

1. 數倉支援資料湖通路

  • 2017年Redshift推出Redshift Spectrum,支援Redsift數倉使用者通路S3資料湖的資料。
  • 2018年阿裡雲MaxCompute推出外表能力,支援通路包括OSS/OTS/RDS資料庫在内的多種外部存儲。

但是無論是 Redshift Spectrum 還是 MaxCompute 的外部表,仍舊需要使用者在數倉中通過建立外部表來将資料湖的開放存儲路徑納入數倉的概念體系——由于一個單純的開放式存儲并不能自描述其資料本身的變化,是以為這些資料建立外部表、添加分區(本質上是為資料湖中的資料建立 schema)無法完全自動化(需要人工或者定期觸發 Alter table add partition 或 msck)。這對于低頻臨時查詢尚能接受,對于生産使用來說,未免有些複雜。

2. 資料湖支援數倉能力 

  • 2011年,Hadoop開源體系公司Hortonworks開始了Apache Atlas和Ranger兩個開源項目的開發,分别對應資料血緣追蹤和資料權限安全兩個數倉核心能力。但兩個項目發展并不算順利,直到 2017 年才完成孵化,時至今日,在社群和工業界的部署都還遠遠不夠活躍。核心原因資料湖與生俱來的靈活性。例如Ranger作為資料權限安全統一管理的元件,天然要求所有引擎均适配它才能保證沒有安全漏洞,但對于資料湖中強調靈活的引擎,尤其是新引擎來說,會優先實作功能、場景,而不是把對接Ranger作為第一優先級的目标,使得Ranger在資料湖上的位置一直很尴尬。
  • 2018年,Nexflix開源了内部增強版本的中繼資料服務系統Iceberg,提供包括MVCC(多版本并發控制)在内的增強數倉能力,但因為開源HMS已經成為事實标準,開源版本的Iceberg作為插件方式相容并配合HMS,數倉管理能力大打折扣。
  • 2018-2019年,Uber和Databricks相繼推出了Apache Hudi和DeltaLake,推出增量檔案格式用以支援Update/Insert、事務等資料倉庫功能。新功能帶來檔案格式以及組織形式的改變,打破了資料湖原有多套引擎之間關于共用存儲的簡單約定。為此,Hudi為了維持相容性,不得不發明了諸如 Copy-On-Write、Merge-On-Read 兩種表,Snapshot Query、Incremental Query、Read Optimized Query 三種查詢類型,并給出了一個支援矩陣(如圖10),極大提升了使用的複雜度。
湖倉一體:資料湖vs資料倉庫之争?

▲圖10 Hudi Support Matrix(來自網絡)

而DeltaLake則選擇了保證以Spark為主要支援引擎的體驗,相對犧牲對其他主流引擎的相容性。這對其他引擎通路資料湖中的Delta資料造成了諸多的限制和使用不便。

例如Presto要使用DeltaLake表,需要先用Spark建立manifest檔案,再根據manifest建立外部表,同時還要注意manifest檔案的更新問題;而Hive要使用DeltaLake表限制更多,不僅會造成中繼資料層面的混亂,甚至不能寫表。

上述在資料湖架構上建立數倉的若幹嘗試并不成功,這表明數倉和資料湖有本質的差別,在資料湖體系上很難建成完善的數倉。資料湖與資料倉庫兩者很難直接合并成一套系統,是以作者團隊,開始基于融合兩者的思路進行探索。

是以我們提出下一代的大資料技術演進方向:湖倉一體,即打通資料倉庫和資料湖兩套體系,讓資料和計算在湖和倉之間自由流動,進而建構一個完整的有機的大資料技術生态體系。

我們認為,建構湖倉一體需要解決三個關鍵問題:

  1. 湖和倉的資料/中繼資料無縫打通,且不需要使用者人工幹預
  2. 湖和倉有統一的開發體驗,存儲在不同系統的資料,可以通過一個統一的開發/管理平台操作
  3. 資料湖與資料倉庫的資料,系統負責自動caching/moving,系統可以根據自動的規則決定哪些資料放在數倉,哪些保留在資料湖,進而形成一體化

我們将在下一章詳細介紹阿裡雲湖倉一體方案如何解決這三個問題。

06、 阿裡雲湖倉一體方案

1. 整體架構

阿裡雲MaxCompute在原有的資料倉庫架構上,融合了開源資料湖和雲上資料湖,最終實作了湖倉一體化的整體架構(圖11)。

在該架構中,盡管底層多套存儲系統并存,但通過統一的存儲通路層和統一的中繼資料管理,向上層引擎提供一體的封裝接口,使用者可以聯合查詢資料倉庫和資料湖中的表。整體架構還具備統一的資料安全、管理和治理等中台能力。

湖倉一體:資料湖vs資料倉庫之争?

▲圖11 阿裡雲湖倉一體整體架構

針對第五章提出的湖倉一體的三個關鍵問題,MaxCompute實作了以下4個關鍵技術點。

1)快速接入

  • MaxCompute全新自創PrivateAccess網絡連通技術,在遵循雲虛拟網絡安全标準的前提下,實作多租戶模式下特定使用者作業定向與IDC/ECS/EMR Hadoop叢集網絡整體打通能力,具有低延遲、高獨享帶寬的特點。
  • 經過快速簡單的開通、安全配置步驟即可将資料湖和購買的 MaxCompute數倉相連通。

2)統一資料/中繼資料管理

  • MaxCompute實作湖倉一體化的中繼資料管理,通過DB中繼資料一鍵映射技術,實作資料湖和MaxCompute數倉的中繼資料無縫打通。MaxCompute通過向使用者開放建立external project的形式,将資料湖HiveMetaStore中的整個database直接映射為MaxCompute的project,對Hive Database的改動會實時反應在這個project中,并可以在MaxCompute側随時通過這個project進行通路、計算其中的資料。與此同時,阿裡雲EMR資料湖解決方案也将推出Data Lake Formation,MaxCompute湖倉一體方案也會支援對該資料湖中的統一進制資料服務的一鍵映射能力。MaxCompute側對external project的各種操作,也會實時反應在Hive側,真正實作資料倉庫和資料湖之間的無縫關聯,完全不需要類似聯邦查詢方案裡的中繼資料人工幹預步驟。
  • MaxCompute實作湖倉一體化的存儲通路層,不僅支援内置優化的存儲系統,也無縫的支援外部存儲系統。既支援HDFS資料湖,也支援OSS雲存儲資料湖,可讀寫各種開源檔案格式。

3)統一開發體驗

  • 資料湖裡的Hive DataBase映射為MaxCompute external project,和普通project别無二緻,同樣享受MaxCompute數倉裡的資料開發、追蹤和管理功能。基于DataWorks強大的資料開發/管理/治理能力,提供統一的湖倉開發體驗,降低兩套系統的管理成本。
  • MaxCompute高度相容Hive/Spark,支援一套任務可以在湖倉兩套體系中靈活無縫的運作。
  • 同時,MaxCompute也提供高效的資料通道接口,可以讓資料湖中的Hadoop生态引擎直接通路,提升了數倉的開放性。

4)自動數倉

  • 湖倉一體需要使用者根據自身資産使用情況将資料在湖和倉之間進行合理的分層和存儲,以最大化湖和倉的優勢。MaxCompute開發了一套智能cache技術,根據對曆史任務的分析來識别資料冷熱度,進而自動利用閑時帶寬将資料湖中的熱資料以高效檔案格式cache在資料倉庫中,進一步加速資料倉庫的後續資料加工流程。不僅解決了湖倉之間的帶寬瓶頸問題,也達到了無須使用者參與即可實作資料分層管理/治理以及性能加速的目的。

2. 建構湖倉一體化的資料中台

基于MaxCompute湖倉一體技術,DataWorks可以進一步對湖倉兩套系統進行封裝,屏蔽湖和倉異構叢集資訊,建構一體化的大資料中台,實作一套資料、一套任務在湖和倉之上無縫排程和管理。

企業可以使用湖倉一體化的資料中台能力,優化資料管理架構,充分融合資料湖和資料倉庫各自優勢。

使用資料湖做集中式的原始資料存儲,發揮資料湖的靈活和開放優勢。又通過湖倉一體技術将面向生産的高頻資料和任務,無縫排程到資料倉庫中,以得到更好的性能和成本,以及後續一系列面向生産的資料治理和優化,最終讓企業在成本和效率之間找到最佳平衡。

總體來說,MaxCompute湖倉一體為企業提供了一種更靈活更高效更經濟的資料平台解決方案,既适用于全新建構大資料平台的企業,也适合已有大資料平台的企業進行架構更新,可以保護現有投資和實作資産利舊。

湖倉一體:資料湖vs資料倉庫之争?

▲圖12 DataWorks湖倉一體化資料中台

3. 典型客戶案例:新浪微網誌應用「湖倉一體」建構混合雲AI計算中台

  • 案例背景

微網誌機器學習平台團隊,主要做社交媒體領域裡的推薦主要做社交媒體領域裡的推薦/排序、文本/圖像分類、反垃圾/反作弊等技術。技術架構上主要圍繞開源Hadoop資料湖解決方案,一份HDFS存儲+多種計算引擎(hive、spark、flink),以滿足以AI為主的多計算場景需求。

但微網誌作為國内Top的社交媒體應用,目前的業務體量和複雜性已然進入到開源“無人區”,開源資料湖方案在性能和成本方面都無法滿足微網誌的要求。

微網誌借助阿裡巴巴強大的飛天大資料和AI平台能力(MaxC+PAI+DW ),解決了超大規模下的特征工程、模型訓練以及矩陣計算的性能瓶頸問題,進而形成了阿裡巴巴MaxCompute平台(數倉)+ 開源平台(資料湖)共存的格局。 

  • 核心痛點

微網誌希望借助這兩套異構的大資料平台,既保持面向AI的各類資料和計算的靈活性,又解決超大規模下的計算和算法的性能/成本問題。但因為這兩套大資料平台在叢集層面完全是割裂的,資料和計算無法在兩個平台裡自由流動,無形之中增加了大量的資料移動和計算開發等成本,進而制約了業務的發展。

主要的痛點是:

  1. 安排專人專項負責訓練資料同步,工作量巨大
  2. 訓練資料體量大,導緻耗時多,無法滿足實時訓練的要求
  3. 新寫SQL資料處理query,無法複用Hive SQL原有query
湖倉一體:資料湖vs資料倉庫之争?

▲圖13 新浪微網誌業務痛點示意

  • 解決方案

為了解決上述的痛點問題,阿裡雲産品團隊和微網誌機器學習平台團隊聯合共建湖倉一體新技術,打通了阿裡巴巴MaxCompute雲數倉和EMR Hadoop資料湖,建構了一個跨湖和倉的AI計算中台。

MaxCompute産品全面更新網絡基礎設施,打通使用者VPC私域,且依托Hive資料庫一鍵映射和強大完善的SQL/PAI引擎能力,将MaxCompute雲數倉和EMR Hadoop資料湖技術體系無縫對接,實作湖和的倉統一且智能化管理和排程。

湖倉一體:資料湖vs資料倉庫之争?

▲圖14 微網誌湖倉一體架構圖

  • 案例價值
  • 不僅融合了資料湖和資料倉庫的優勢,在靈活性和效率上找到最佳平衡,還快速建構了一套統一的AI計算中台,極大提升該機器學習平台團隊的業務支撐能力。無須進行資料搬遷和作業遷移,即可将一套作業無縫靈活排程在MaxCompute叢集和EMR叢集中。
  • SQL資料處理任務被廣泛運作到MaxCompute叢集,性能有明顯提升。基于阿裡巴巴PAI豐富且強大的算法能力,封裝出多種貼近業務場景的算法服務,滿足更多的業務需求。
  • MaxCompute雲原生的彈性資源和EMR叢集資源形成互補,兩套體系之間進行資源的削峰填谷,不僅減少作業排隊,且降低整體成本。

07、總結

資料湖和資料倉庫,是在今天大資料技術條件下建構分布式系統的兩種資料架構設計取向,要看平衡的方向是更偏向靈活性還是成本、性能、安全、治理等企業級特性。

但是資料湖和資料倉庫的邊界正在慢慢模糊,資料湖自身的治理能力、資料倉庫延伸到外部存儲的能力都在加強。在這樣的背景之下,MaxCompute 率先提出湖倉一體,為業界和使用者展現了一種資料湖和資料倉湖互相補充,協同工作的架構。

這樣的架構同時為使用者提供了資料湖的靈活性和資料倉庫的諸多企業級特性,将使用者使用大資料的總體擁有成本進一步降低,我們認為是下一代大資料平台的演進方向。

來源:大資料DT

推薦閱讀:

11 月全國程式員平均工資出爐

一個CEO的忠告:你那麼牛逼,怎麼還是打勞工

關于年薪百萬,聊聊年薪380萬的研發人是什麼樣子的