Apache Iceberg筆記1_DataLake三劍客之一

一般在業界實務如果有談論到關於DataLake數據湖,通常主流想到的
三劍客為:Hudi、Delta Lake和Iceberg

數據湖一詞觀念在之前準備Data Literacy Fundamentals學習筆記有稍微提及到。
目的在處理現代組織產生的大量數據,它們提供了一種經濟且高效的方式來儲存和管理大數據。數據湖建立在分散式檔案系統(distributed file systems)之上,例如Hadoop 分散式檔案系統(HDFS)或Amazon S3,可以處理大量數據並提供高可用性和高擴展性。
數據湖通常使用於:
• 儲存原始數據供以後分析
• 執行大數據處理和分析
• 支持機器學習和人工智慧
• 儲存和處理即時串流數據


Apache Iceberg是由netflex於2018年研發並開源貢獻給Apache基金會,為數據湖三劍客之一。
2018年11月16日進入Apache孵化器,於2020年5月19日從孵化器畢業,成為Apache的top專案。 
  • 主要用於大數據分析高性能開放性表格形式(Table Format)
  • 表格形式(Table Format)可以這樣解釋,metadata跟數據文件一種組織方式,處於計算引擎框架(Spark、Flink....)之下,數據文件之上。
  • 數據儲存和計算引擎之間的調配問題。原理類似Hive,但Hive依賴於HDFS檔案系統。換言之他可以跟很多常見到的資料庫或大數據生態系的工具兼容,比方Hive、Spark、Flink、Presto 、Impala等等,都可以去操作IceBerg的Table。
  • 提供高表達性SQL
  • 支持隱藏分區
  • 具有完整模式演化
  • 可以對表作快照(時間旅行、回滾)
Netflex最初也是用Hive去處理海量資料,後來發覺不好用就自行研發IceBerg了。
Hive跟IceBerg其實都是在數據儲存之上和計算引擎之下,也都提供表格式存取。
Hive在之前此篇部落格文章也有紀載到。
而當時Netflex之所以覺得Hive不好用原因在於,如下幾個原因:

1. Schema 演進支援不佳(Schema Evolution Poor Support)
  • Hive 表雖然支援 schema 變更(加欄位、改型態),但會導致舊資料讀取行為不一致。
  • Hive 的 schema 是綁在 metadata 上,而不是每個檔案有自己的 schema 定義。
  • 這會在多人共享表格、大規模數據演進時帶來困擾。

2. 查詢一致性差(Lack of Snapshot Isolation)
  • Hive 沒有原生的 snapshot 機制(快照隔離),例如:寫入進行中,讀取端可能會看到部分寫入資料、多人同時查詢或修改表格,結果可能不一致。
  • 對需要高一致性的大型數據平台來說,是很致命的問題。

3. Metadata 管理效率低(Inefficient Metadata Handling)
  • Hive 的 metadata 存在 Hive Metastore 中,當 partition 非常多(上萬個)時:
    • 管理複雜
    • 查詢 metadata 開銷大,列出 partition 甚至可能超時。
  • Hive 會頻繁掃描底層檔案系統來解析檔案和目錄,不符合現代數據湖架構要求。
    (備註:Hive分區儲存是一個分區一個目錄)

4. 寫入性能差(Write Performance Poor)
  • Hive 不支援 ACID 的寫入操作(直到後來才有限度支援,但依賴特定設置和格式)。
  • Append 模式為主,無法輕鬆進行 update/delete/merge 等操作。
  • 難以做流式資料 ingestion、即時更新的應用。
Hive可以分區,若用時間一天24小時,以一個小時來分區。
一天就有24個分區,一個月就是24*30個分區。在往後繼續擴展1年.....2年。就出現一個問題,分區數量會過多。雖然查metadata是快,但去回推真實數據時候就相對耗時。
Hive會有一個metadata儲存的DB通常選用MySql,但通常只記錄到分區級別。
此外Hive是一個分區一個目錄在儲存,而真實要存取的資料都是在HDFS,因此他需要到HDFS上面去掃描所有目錄,並且再去篩選想要的目錄。

別於Hive只能定位到分區(目錄)級別,Iceberg則可定位到文件級別。解決傳統Hive分區、文件掃描過慢的痛點。Hive 表是「目錄驅動」的(Directory-Driven Table),而 Iceberg 是「元資料驅動」(Metadata-Driven Table)



留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題

Crystal Report報表開發(二)_基礎操作排版對齊_基本組成部分介紹