天天看點

Apache iceberg:Netflix 資料倉庫的基石

Apache iceberg:Netflix 資料倉庫的基石

Apache Iceberg 是一種用于跟蹤超大規模表的新格式,是專門為對象存儲(如S3)而設計的。 本文将介紹為什麼 Netflix 需要建構 Iceberg,Apache Iceberg 的高層次設計,并會介紹那些能夠更好地解決查詢性能問題的細節。

本文由 Ryan Blue 分享,他在 Netflix 從事開源資料項目,是 Apache Iceberg 的最初建立者之一,也是 Apache Spark, Parquet, 以及 Avro 貢獻者。

Apache iceberg:Netflix 資料倉庫的基石

Apache Iceberg 是由 Netflix 開發開源的,其于 2018年11月16日進入 Apache 孵化器,是 Netflix 公司資料倉庫基礎。在功能上和我們熟悉的 Delta Lake 或者 Apache Hudi 類似,但各有優缺點。

任何東西的誕生都是有其背後的原因,那麼為什麼 Netflix 需要開發 Apache Iceberg?

Apache iceberg:Netflix 資料倉庫的基石

在 Netflix,他們希望有更智能的處理引擎,比如有 CBO 優化,更好的 Join 實作,緩存結果集以及物化視圖等功能。同時,他們也希望減少人工維護資料。

Apache iceberg:Netflix 資料倉庫的基石

Netflix 面臨的問題包括:1、不安全的操作随處可見;2、和對象存儲互動有時候會出現很大的問題;3、無休止的可擴充性挑戰。

為了解決這些問題,Iceberg 誕生了。那麼 Iceberg 是什麼?

Apache iceberg:Netflix 資料倉庫的基石

iceberg 是一種可伸縮的表存儲格式,内置了許多最佳實踐。

Apache iceberg:Netflix 資料倉庫的基石

什麼?是一種存儲格式?可使我們已經有 Parquet,Avro 以及 ORC 這些格式了,為什麼還要設計一種新格式?

Apache iceberg:Netflix 資料倉庫的基石
Apache iceberg:Netflix 資料倉庫的基石

iceberg 允許我們在一個檔案裡面修改或者過濾資料;當然多個檔案也支援這些操作。為了展示這點,我們來看看一張 Hive 表。

Apache iceberg:Netflix 資料倉庫的基石

Hive 表的核心思想是把資料組織成目錄樹,如上所述。

Apache iceberg:Netflix 資料倉庫的基石

如果我們需要過濾資料,可以在 where 裡面添加分區相關的資訊。

Apache iceberg:Netflix 資料倉庫的基石

帶來的問題是如果一張表有很多分區,我們需要使用 HMS(Hive MetaStore)來記錄這些分區,同時底層的檔案系統(比如 HDFS)仍然需要在每個分區裡面記錄這些分區資料。

Apache iceberg:Netflix 資料倉庫的基石

這就導緻我們需要在 HMS 和 檔案系統裡面同時儲存一些狀态資訊;因為缺乏鎖機制,是以對上面兩個系統進行修改也不能保證原子性。

Apache iceberg:Netflix 資料倉庫的基石

當然 Hive 這樣維護表也不是沒有好處。這種設計使得很多引擎(Hive、Spark、Presto、Flink、Pig)都支援讀寫 Hive 表,同時支援很多第三方工具。簡單和透明使得 Hive 表變得不可或缺的。

Apache iceberg:Netflix 資料倉庫的基石
Apache iceberg:Netflix 資料倉庫的基石

Iceberg 的目标包括:1、成為靜态資料交換的開放規範,維護一個清晰的格式規範,支援多語言,支援跨項目的需求等。

Apache iceberg:Netflix 資料倉庫的基石

2、提升擴充性和可靠性。能夠在一個節點上運作,也能在叢集上運作。所有的修改都是原子性的,串行化隔離。原生支援雲對象存儲,支援多并發寫。

Apache iceberg:Netflix 資料倉庫的基石

3、修複持續的可用性問題,比如模式演進,分區隐藏,支援時間旅行、復原等。

Apache iceberg:Netflix 資料倉庫的基石

Iceberg 主要設計思想:記錄表在所有時間的所有檔案,和 Delta Lake 或 Apache Hudi 一樣,支援 snapshot,其是表在某個時刻的完整檔案清單。每一次寫操作都會生成一個新的快照。

Apache iceberg:Netflix 資料倉庫的基石

讀取資料的時候使用目前的快照,Iceberg 使用樂觀鎖機制來建立新的快照,然後送出。

Apache iceberg:Netflix 資料倉庫的基石

Iceberg 這麼設計的好處是:

  • 所有的修改都是原子性的;
  • 沒有耗時的檔案系統操作;
  • 快照是索引好的,以便加速讀取;
  • CBO metrics 資訊是可靠的;
  • 更新支援版本,支援物化視圖。
Apache iceberg:Netflix 資料倉庫的基石
Apache iceberg:Netflix 資料倉庫的基石

Iceberg 在 Netflix 生産環境維護着數十 PB 的資料,數百萬個分區。對大表進行查詢能夠提供低延遲的響應。

Apache iceberg:Netflix 資料倉庫的基石

生産環境中使用 Flink 管道在 3 個 AWS regions 寫資料。Lift 服務将資料移到一個 region。Merge 服務對小檔案進行合并。

Apache iceberg:Netflix 資料倉庫的基石

可用性方面:復原是家常便飯。

Apache iceberg:Netflix 資料倉庫的基石

未來工作:1、支援 Spark 向量化以便實作快速的 bulk read,Presto 向量化已經支援。2、行級别的删除,支援 MERGE INTO 等。

推薦相關閱讀:

[Data Lake 三劍客——Delta、Hudi、Iceberg 對比分析

](

https://developer.aliyun.com/article/744920?spm=a2c6h.12873581.0.dArticle744920.592a3a183ThfM2&groupCode=apachespark)

本文轉載自公衆号:過往記憶大資料

原文連結:

https://mp.weixin.qq.com/s/acWcoZ25zDXetA3ewypG2g

阿裡巴巴開源大資料技術團隊成立Apache Spark中國技術社群,定期推送精彩案例,技術專家直播,問答區近萬人Spark技術同學線上提問答疑,隻為營造純粹的Spark氛圍,歡迎釘釘掃碼加入!

Apache iceberg:Netflix 資料倉庫的基石

對開源大資料和感興趣的同學可以加小編微信(下圖二維碼,備注“進群”)進入技術交流微信群。

Apache iceberg:Netflix 資料倉庫的基石