
Apache Iceberg 是一種用于跟蹤超大規模表的新格式,是專門為對象存儲(如S3)而設計的。 本文将介紹為什麼 Netflix 需要建構 Iceberg,Apache Iceberg 的高層次設計,并會介紹那些能夠更好地解決查詢性能問題的細節。
本文由 Ryan Blue 分享,他在 Netflix 從事開源資料項目,是 Apache Iceberg 的最初建立者之一,也是 Apache Spark, Parquet, 以及 Avro 貢獻者。
Apache Iceberg 是由 Netflix 開發開源的,其于 2018年11月16日進入 Apache 孵化器,是 Netflix 公司資料倉庫基礎。在功能上和我們熟悉的 Delta Lake 或者 Apache Hudi 類似,但各有優缺點。
任何東西的誕生都是有其背後的原因,那麼為什麼 Netflix 需要開發 Apache Iceberg?
在 Netflix,他們希望有更智能的處理引擎,比如有 CBO 優化,更好的 Join 實作,緩存結果集以及物化視圖等功能。同時,他們也希望減少人工維護資料。
Netflix 面臨的問題包括:1、不安全的操作随處可見;2、和對象存儲互動有時候會出現很大的問題;3、無休止的可擴充性挑戰。
為了解決這些問題,Iceberg 誕生了。那麼 Iceberg 是什麼?
iceberg 是一種可伸縮的表存儲格式,内置了許多最佳實踐。
什麼?是一種存儲格式?可使我們已經有 Parquet,Avro 以及 ORC 這些格式了,為什麼還要設計一種新格式?
iceberg 允許我們在一個檔案裡面修改或者過濾資料;當然多個檔案也支援這些操作。為了展示這點,我們來看看一張 Hive 表。
Hive 表的核心思想是把資料組織成目錄樹,如上所述。
如果我們需要過濾資料,可以在 where 裡面添加分區相關的資訊。
帶來的問題是如果一張表有很多分區,我們需要使用 HMS(Hive MetaStore)來記錄這些分區,同時底層的檔案系統(比如 HDFS)仍然需要在每個分區裡面記錄這些分區資料。
這就導緻我們需要在 HMS 和 檔案系統裡面同時儲存一些狀态資訊;因為缺乏鎖機制,是以對上面兩個系統進行修改也不能保證原子性。
當然 Hive 這樣維護表也不是沒有好處。這種設計使得很多引擎(Hive、Spark、Presto、Flink、Pig)都支援讀寫 Hive 表,同時支援很多第三方工具。簡單和透明使得 Hive 表變得不可或缺的。
Iceberg 的目标包括:1、成為靜态資料交換的開放規範,維護一個清晰的格式規範,支援多語言,支援跨項目的需求等。
2、提升擴充性和可靠性。能夠在一個節點上運作,也能在叢集上運作。所有的修改都是原子性的,串行化隔離。原生支援雲對象存儲,支援多并發寫。
3、修複持續的可用性問題,比如模式演進,分區隐藏,支援時間旅行、復原等。
Iceberg 主要設計思想:記錄表在所有時間的所有檔案,和 Delta Lake 或 Apache Hudi 一樣,支援 snapshot,其是表在某個時刻的完整檔案清單。每一次寫操作都會生成一個新的快照。
讀取資料的時候使用目前的快照,Iceberg 使用樂觀鎖機制來建立新的快照,然後送出。
Iceberg 這麼設計的好處是:
- 所有的修改都是原子性的;
- 沒有耗時的檔案系統操作;
- 快照是索引好的,以便加速讀取;
- CBO metrics 資訊是可靠的;
- 更新支援版本,支援物化視圖。
Iceberg 在 Netflix 生産環境維護着數十 PB 的資料,數百萬個分區。對大表進行查詢能夠提供低延遲的響應。
生産環境中使用 Flink 管道在 3 個 AWS regions 寫資料。Lift 服務将資料移到一個 region。Merge 服務對小檔案進行合并。
可用性方面:復原是家常便飯。
未來工作: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氛圍,歡迎釘釘掃碼加入!
對開源大資料和感興趣的同學可以加小編微信(下圖二維碼,備注“進群”)進入技術交流微信群。