大數據架構變革進行時:為什麼騰訊看好開源 Apache Iceberg?

2020-12-15 InfoQ技術實驗室

隨著大數據存儲和處理需求越來越多樣化,如何構建一個統一的數據湖存儲,並在其上進行多種形式的數據分析,成了企業構建大數據生態的一個重要方向。如何快速、一致、原子性地在數據湖存儲上構建起 Data Pipeline,成了亟待解決的問題。為此,Uber 開源了 Apache Hudi,Databricks 提出了 Delta Lake,而 Netflix 則發起了 Apache Iceberg 項目,一時間這種具備 ACID 能力的表格式中間件成為了大數據、數據湖領域炙手可熱的方向。

雖然現階段國內仍然缺乏數據湖概念上的優秀商業方案,但在基礎軟體開源化的趨勢下,國內企業在數據湖技術點上的探索與跟進並不比國外企業落後太多。騰訊在 2018 年加入大數據存儲開源項目 Apache Ozone,後又於 2019 年開始投入研發 Apache Iceberg;阿里巴巴也正聯合 Apache Iceberg 社區積極推動 Flink 實時數據湖技術方案的落地。那麼,Iceberg 和其他兩個開源項目有何不同?為什麼阿里和騰訊都在積極投入 Iceberg 的開源生態?Iceberg 有什麼獨到之處?近期 InfoQ 採訪了騰訊數據平臺部數據湖內核技術負責人、資深大數據工程師邵賽賽,他與我們分享了騰訊選擇 Iceberg 前後的一些思考和採用 Iceberg 之後所做的優化工作,本文基於採訪整理而成。邵賽賽還將在 QCon 全球軟體開發大會(北京站)2020 帶來主題為《Iceberg - 新一代的數據湖表格式》的演講分享,感興趣的讀者可以關注。

計算引擎之下、存儲之上的新技術

資料庫大牛、圖靈獎獲得者 Michael Stonebraker 曾在 MapReduce 誕生之初撰寫過一篇文章,題為「MapReduce: A major step backwards」,Michael Stonebraker 在文章中直截了當地指出:MapReduce 忽視了資料庫領域積累超過 40 年的技術經驗。雖然大數據技術的出現和迭代降低了用戶處理海量數據的門檻,但另一方面,與資料庫這樣高度優化的技術相比,大數據技術的抽象和實現還是太原始和初級。因此大數據技術在後續十幾年的發展中,一直以資料庫為目標,將更多資料庫的成熟技術和理念借鑑到大數據中。

當前,大數據分析領域已經相當成熟,如何借鑑更多資料庫的成熟技術和理念來提升大數據的能力呢?Apache Iceberg、Hudi 和 Delta Lake 這三個定位類似的開源項目正是從資料庫方法論中汲取了靈感,將事務能力帶到了大數據領域,並抽象成統一的中間格式供不同引擎適配對接。

如何定義這類新技術?

簡單地說,這類新技術是介於上層計算引擎和底層存儲格式之間的一個中間層,我們可以把它定義成一種「數據組織格式」,Iceberg 將其稱之為「表格式」也是表達類似的含義。它與底層的存儲格式(比如 ORC、Parquet 之類的列式存儲格式)最大的區別是,它並不定義數據存儲方式,而是定義了數據、元數據的組織方式,向上提供統一的「表」的語義。它構建在數據存儲格式之上,其底層的數據存儲仍然使用 Parquet、ORC 等進行存儲。

Apache Iceberg、Hudi 和 Delta Lake 誕生於不同公司,需要解決的問題存在差異,因此三者在設計初衷上稍有不同。

其中,Iceberg 的設計初衷更傾向於定義一個標準、開放且通用的數據組織格式,同時屏蔽底層數據存儲格式上的差異,向上提供統一的操作 API,使得不同的引擎可以通過其提供的 API 接入;Hudi 的設計初衷更像是為了解決流式數據的快速落地,並能夠通過 upsert 語義進行延遲數據修正;Delta Lake 作為 Databricks 開源的項目,更側重於在 Spark 層面上解決 Parquet、ORC 等存儲格式的固有問題,並帶來更多的能力提升。

雖然這三個項目在設計初衷上稍有不同,但實現的思路和提供的能力卻非常相似,他們都提供了 ACID 的能力,都基於樂觀鎖實現了衝突解決和提供線性一致性,同時相應地提供了 time travel 的功能。

但是因為設計初衷的不同,三個項目當前的能力象限各有不同,Iceberg 在其格式定義和核心能力上最為完善,但是上遊引擎的適配上稍顯不足;Hudi 基於 Spark 打造了完整的流式數據落地方案,但是其核心抽象較弱,與 Spark 耦合較緊;Delta Lake 同樣高度依賴於 Spark 生態圈,與其他引擎的適配尚需時日。不過邵賽賽認為,這三個項目現有的差異會隨著社區的推動和改進以及時間的累積慢慢磨平,最終可能會變得更趨於相同。

Apache Iceberg 在騰訊的採用情況

騰訊在 Iceberg 還未進入 Apache 孵化器時就已經開始關注,隨著這幾個技術的開源以及進入孵化器,這一領域開始逐漸升溫,從 2019 年下半年開始,騰訊正式在該技術上進行探索和投入。

為什麼選擇 Iceberg?

談及引入 Iceberg 的原因,邵賽賽表示,當時團隊在構建大數據生態的過程中遇到了幾個痛點,而 Iceberg 恰好能解決這幾個痛點:

T+0 的數據落地和處理。傳統的數據處理流程從數據入庫到數據處理通常需要一個較長的環節、涉及許多複雜的邏輯來保證數據的一致性,由於架構的複雜性使得整個流水線具有明顯的延遲。Iceberg 的 ACID 能力可以簡化整個流水線的設計,降低整個流水線的延遲。降低數據修正的成本。傳統 Hive/Spark 在修正數據時需要將數據讀取出來,修改後再寫入,有極大的修正成本。Iceberg 所具有的修改、刪除能力能夠有效地降低開銷,提升效率。至於為何最終選擇採用 Iceberg,而不是其他兩個開源項目,技術方面的考量主要有以下幾點:

Iceberg 的架構和實現並未綁定於某一特定引擎,它實現了通用的數據組織格式,利用此格式可以方便地與不同引擎(如 Flink、Hive、Spark)對接,這對於騰訊內部落地是非常重要的,因為上下遊數據管道的銜接往往涉及到不同的計算引擎;良好的架構和開放的格式。相比於 Hudi、Delta Lake,Iceberg 的架構實現更為優雅,同時對於數據格式、類型系統有完備的定義和可進化的設計;面向對象存儲的優化。Iceberg 在數據組織方式上充分考慮了對象存儲的特性,避免耗時的 listing 和 rename 操作,使其在基於對象存儲的數據湖架構適配上更有優勢。除去技術上的考量,邵賽賽和團隊也對代碼質量、社區等方面做了詳細的評估:

整體的代碼質量以及未來的進化能力。整體架構代碼上的抽象和優勢,以及這些優勢對於未來進行演化的能力是團隊非常關注的。一門技術需要能夠在架構上持續演化,而不會具體實現上需要大量的不兼容重構才能支持。社區的潛力以及騰訊能夠在社區發揮的價值。社區的活躍度是另一個考量,更重要的是在這個社區中騰訊能做些什麼,能發揮什麼樣的價值。如果社區相對封閉或已經足夠成熟,那麼騰訊再加入後能發揮的價值就沒有那麼大了,在選擇技術時這也是團隊的一個重要考量點。技術的中立性和開放性。社區能夠以開放的態度去推動技術的演化,而不是有所保留地向社區貢獻,同時社區各方相對中立而沒有一個相對的強勢方來完全控制社區的演進。優化和改進

從正式投入研發到現在,騰訊在開源版本的基礎上對 Iceberg 進行了一些優化和改進,主要包括:

實現了行級的刪除和更新操作,極大地節省了數據修正和刪除所帶來的開銷;對 Spark 3.0 的 DataSource V2 進行了適配,使用 Spark 3.0 的 SQL 和 DataFrame 可以無縫對接 Iceberg 進行操作;增加了對 Flink 的支持,可以對接 Flink 以 Iceberg 的格式進行數據落地。這些改進點提高了 Iceberg 在落地上的可用性,也為它在騰訊內部落地提供了更為吸引人的特性。同時騰訊也在積極擁抱社區,大部分的內部改進都已推往社區,一些內部定製化的需求也會以更為通用的方式貢獻回社區。

目前團隊正在積極嘗試將 Iceberg 融入到騰訊的大數據生態中,其中最主要的挑戰在於如何與騰訊現有系統以及自研系統適配,以及如何在一個成熟的大數據體系中尋找落地點並帶來明顯的收益。邵賽賽具體提到了以下幾點:

Iceberg 的上下遊配套能力的建設相對缺乏,需要較多的配套能力的建設,比如 Spark、Hive、Flink 等不同引擎的適配;其次是 Iceberg 核心能力成熟度的驗證,它是否能夠支撐起騰訊大數據量級的考驗,其所宣稱的能力是否真正達到了企業級可用,都需要進一步驗證和加強;最後,騰訊內部大數據經過多年發展,已經形成了一整套完整的數據接入分析方案,Iceberg 如何能夠在內部落地,優化現有的方案非常重要。Iceberg 的不足和未來

Iceberg 誕生的時間不長,雖然擁有高度抽象和非常優雅的設計,但功能上仍有不足,尤其在圍繞生態系統的建立和周邊能力的打造上還有很多工作需要做。邵賽賽認為,當前 Iceberg 最重要的缺失點是和上層引擎的對接。現在 Iceberg 和 Spark 的對接是最為完善的,但是由於 DataSource V2 API 仍在不斷地改進中,對於一些語義的下推仍然缺失,因此能力上和內置的存儲格式相比仍有欠缺(比如 bucket join 的支持)。而對於 Hive、Flink 的支持尚在開發中。因為 Iceberg 是一個統一的數據組織格式,想要全面使用的話必須使所有的上層引擎能夠對接適配,因此這一塊環節的補足是當前最為重要的。

其次,Iceberg 缺少行級更新、刪除能力。騰訊內部已經為 Iceberg 增加了行級更新、刪除的能力,但在 Iceberg 社區尚未有這樣的能力,這些能力所需的格式定義仍在設計中。行級更新、刪除能力是現有數據組織格式的最大賣點,因此該功能的補強對於 Iceberg 的推廣和落地十分重要。

在騰訊內部,後續對於 Iceberg 的規劃主要還是以適配不同的引擎以及優化核心能力為主,同時會圍繞 Iceberg 和上下遊的引擎提供端到端的面向終端用戶的數據管道能力。

目前相比於 Hudi、Delta Lake,Iceberg 在國內的關注度較少,這主要是由於其主要開發團隊在技術推廣和運營上面的工作偏少,而且 Iceberg 的開發者多為海外開發者,但是現在已經有越來越多大公司加入到了 Iceberg 的貢獻中,包括 Netflix、Apple、Adobe、Expedia 等國外大廠,也包括騰訊、阿里、網易等國內公司。邵賽賽非常看好 Iceberg 未來在國內發展的前景,在他看來,一個好的技術架構可能暫時不引人矚目,但最終還是會得到更多人的認可。隨著國內推廣的增多,以及國內開發者在這個項目上的投入、運營,未來在國內 Iceberg 前景可期。

關注我並轉發此篇文章,私信我「領取資料」,即可免費獲得InfoQ價值4999元迷你書!

相關焦點

  • 網易:Flink + Iceberg 數據湖探索與實踐
    為什麼會出現這種現象的發生呢?目前來看大致有這麼幾點要素:任務本身要請求的數據量會特別大。通常來說一天原始的數據量可能在幾十TB。幾百個分區,甚至上千個分區,五萬+的文件數這樣子。比如目前我們查一個分區的話是需要將所有文件都掃描一遍然後進行分析,而實際上我可能只對某些文件感興趣。所以相對而言這個方案本身來說就是相對低效的。這種大的離線任務一旦遇到磁碟壞盤或者機器宕機,就需要重試,重試一次需要耗費很長的時間比如幾十分鐘。如果說重試一兩次的話這個延遲就會比較大了。
  • Apache基金會宣布騰訊大數據團隊主導的Ozone成為頂級開源項目
    【天極網IT新聞頻道】剛剛獲悉,Apache基金董事會通過一致表決,正式批准分布式文件對象存儲Ozone從Hadoop社區孵化成功,成為獨立的Apache頂級開源項目。這意味著,作為騰訊大數據團隊首個參與和主導的開源項目,Ozone已得到全球Apache技術專家的一致認可,成為世界頂級的存儲開源項目之一。
  • 騰訊雲大數據團隊:認真做開源的人,眼裡有光
    以騰訊雲大數據團隊為例,除了積極參與 OpenJDK 社區以外,騰訊近年來在開源領域的貢獻著實不少。  從 2014 年開始,騰訊即開始將內部的第一代大數據平臺核心即騰訊版的 Hive 進行了開源。 2011 年末,堅信開源就是未來的大數據技術專家,現任騰訊雲副總裁、騰訊數據平臺部總經理蔣傑來到騰訊,據蔣傑回憶,他剛剛來到騰訊時,騰訊雲數據中心的 Hadoop 集群剛剛起步,
  • 「集成架構」我們得談談 Apache Camel
    Apache camel缺乏其他ASF項目Hadoop、Kafka或Spark的品牌認知度;這些項目都被知名企業廣泛使用,其中許多企業已經在此類開源軟體上構建了其架構的關鍵組件。 但隨著企業尋求集成更多的應用程式(例如,綜合使用它們生成的數據),Apache Camel變得越來越重要。
  • 騰訊大數據團隊主導開發,新一代分布式對象存儲Ozone從Apache基金...
    剛剛獲悉,Apache基金董事會通過一致表決,正式批准分布式文件對象存儲Ozone從Hadoop社區孵化成功,成為獨立的Apache頂級開源項目。這意味著,作為騰訊大數據團隊首個參與和主導的開源項目,Ozone已得到全球Apache技術專家的一致認可,成為世界頂級的存儲開源項目之一。
  • 企業級雲原生:TKEStack 騰訊雲原生開源實踐之路
    2009 年吳軍博士從谷歌來到騰訊,便借鑑了谷歌做出了騰訊自研的業務平臺 T-Borg。到了 2011~2013 年左右開始用社區成熟的公認的技術做業務平臺。當時有一次重要的技術方向轉變,轉向使用業界主流技術方案後,Torca 轉向專門做大數據業務平臺,於是有了HOT(hadoop on torca)。
  • 10 個頂尖的 Linux 開源人工智慧工具
    官方網站:http://caffe.berkeleyvision.org/H20 是一個開源的,快速的,可擴展和分布式的機器學習框架,還有框架配備的算法。它支持更智能的應用程式,如深度學習,梯度 boosting,隨機森林,廣義線性模型(即邏輯回歸,彈性網絡)等等。這是一個面向業務用於決策數據的人工智慧工具,它能夠讓用戶使用更快更好的預測模型來繪製來自於他們對數據的見解。
  • Hadoop開源社區正式支持騰訊雲對象存儲COS
    8月4日消息,知名大數據開源社區Hadoop近日宣布對騰訊雲對象存儲COS的正式支持。後續,開發者在基於Hadoop架構進行大數據分析時,能夠在不修改代碼的情況下,無縫高效地使用騰訊雲COS來處理海量數據的讀寫任務。這標誌著騰訊雲對象存儲技術受到了全球最主流大數據開源社區的認可。
  • 聚焦數據架構前沿技術 快手大數據平臺架構技術交流會成功舉辦
    從hadoop到spark,再到flink,從kylin到druid,再到clickhouse,從離線數倉到實時數倉架構,再到數據湖架構,近10多年中,大數據平臺架構經歷了快速演變。各大網際網路公司或藉助開源生態,或通過自研構建大數據架構系統,促進數據相關業務的價值挖掘與發展,為公司的戰略發展、產品改進、用戶增長帶來收益。
  • Apache Arrow 0.3.0 發布,內存數據交換格式
    Apache Arrow 是 Apache 基金會下一個全新的開源項目,同時也是頂級項目。它的目的是作為一個跨平臺的數據層來加快大數據分析項目的運行速度。
  • 【OSTC2015 現場】許勇:騰訊的內外社區實踐及未來開源布局
    再就是好奇心,好奇心是很大的驅動力,大家都很好奇為什麼會這樣,為什麼那樣。大家的公司每到年底都會有抽獎,騰訊也是這樣的,在年底時大家都會關注今年會開什麼獎,能不能中上。我們討論最多的是為什麼誰誰每年都會中?是不是抽獎環節有什麼問題,大家都感到非常好奇。我們就將抽獎程序作為開源項目開源出來放到社區,結果這個開源項目是騰訊最長壽的,也是參與人數最多的開源項目。
  • 騰訊雲虛擬化技術團隊:用硬核貢獻表達開源態度
    騰訊雲虛擬化技術團隊的答案是開源——藉助騰訊的場景把KVM用起來,發現和解決問題,然後把方案開源,從而帶動更多開發者關注,更多人發現問題,更多人解決問題,最終實現KVM技術演進的利益共享……2014 年底,一個棘手的問題浮現出來。一些大型遊戲客戶在使用KVM生產出來的雲伺服器時,經常出現CPU佔用率高,抖動很大的情況,用戶能感到明顯的掉幀。
  • 騰訊雲聶晶:數據場景化應用創新與數據價值釋放才是數據倉庫的真正...
    12月20日,在騰訊2020 Techo Park開發者大會大數據專場上,騰訊雲大數據產品總經理聶晶對數據倉庫近30年發展歷程做出總結,並分享了他對目前行業的認知以及未來發展的判斷。
  • 數據湖 VS 數據倉庫之爭?阿里提出大數據架構新概念:湖倉一體
    階段二:雲上託管Hadoop數據湖架構(即EMR開源數據湖),底層物理伺服器和開源軟體版本由雲廠商提供和管理,數據仍統一存放在HDFS系統上,引擎以Hadoop和Spark開源生態為主。這個架構通過雲上 IaaS 層提升了機器層面的彈性和穩定性,使企業的整體運維成本有所下降,但企業仍然需要對HDFS系統以及服務運行狀態進行管理和治理,即應用層的運維工作。
  • 「騰訊開源十年圖譜」發布,覆蓋雲原生等五大技術領域
    在主動開源方面,騰訊在Github上發布了超過110個精品開源項目,覆蓋雲原生、大數據、AI、移動開發、Web開發五大技術領域,獲得了超過33萬名開發者的關注和Star,穩居全球開源企業貢獻榜前十。「外部開源外循環」,則是以產品、社區、商業的形式進一步創造社會價值及商業價值、促進技術發展及科技創新、提高研發質量和降本增效。通過「開源外循環」,引入外部優秀的開源項目,通過外部的新鮮血液促進內部技術持續的創新。單致豪也對騰訊開源十年的發展歷程進行了回顧。
  • Apache DolphinScheduler 1.2.0 發布,分布式可視化工作流任務調度...
    修復工作進程使用隊列執行任務時的錯誤。致力於解決數據處理流程中錯綜複雜的依賴關係,使調度系統在數據處理流程中開箱即用。code package of DolphinScheduler感謝Dolphin Scheduler使用了很多優秀的開源項目,比如google的guava、guice、grpc,netty,ali的bonecp,quartz,以及apache的眾多開源項目等等,正是由於站在這些開源項目的肩膀上,才有Dolphin Scheduler的誕生的可能
  • 騰訊雲賀永紅:混合雲存儲為大數據應用提供更強便利性
    企業數位化轉型過程中,數據價值被顯著放大,大數據應用成為不少企業探索的重點。  從技術上看,大數據業務由於數據體量大,且數據量很多時候呈急速膨脹狀態;在進行大數據計算分析時,對資源的需求呈現浪湧式特徵,又偶有突發性,因此通過上雲充分發揮資源按需使用按需付費的優勢,成為了不少企業在探索大數據應用時的常見模式。
  • 騰訊Tendis 正式開源:企業級分布式高性能 KV 存儲資料庫
    IT之家12月22日消息 近期,騰訊宣布企業級分布式高性能 KV 存儲資料庫 Tendis 正式開源。IT之家獲悉,Tendis 是騰訊互娛 CROS DBA 團隊 & 騰訊雲資料庫團隊自主設計和研發的分布式高性能 KV 存儲資料庫,兼容 Redis 核心數據結構與接口,可提供大容量、低成本、強持久化的資料庫能力,適用於兼容 Redis 協議、需要大容量且較高訪問性能的溫冷數據存儲場景。Tendis 目前已經被應用到騰訊內、外部大型項目中。
  • 架構師的選擇,Pulsar還是Kafka?
    快速搜索將顯示兩個最著名的開源消息傳遞系統之間存在當前的"戰爭"。作為Kafka的用戶,我確實對Kafka的某些問題感到困惑,並且我對Pulsar感到非常失望。所以最後,我設法花了一些時間進行研究,並且做了很多研究。在本文中,我將重點介紹Pulsar的優勢,並為您提供一些理由,使您對比Kafka來考慮它。
  • Apache Arrow 1.0.0 發布,內存數據交換格式
    Apache Arrow 是 Apache 基金會的頂級項目之一,目的是作為一個跨平臺的數據層來加快大數據分析項目的運行速度。它包含一組規範的內存中的平面和分層數據表示,以及多種語言綁定以進行結構操作。 它還提供低架構流式傳輸和批量消息傳遞,零拷貝進程間通信(IPC)和矢量化的內存分析庫。