apache iceberg 數(shù)據(jù)湖

理解

首先辰狡,大家要明白為什么出現(xiàn)了類似Iceberg這樣的數(shù)據(jù)技術(shù)。
大數(shù)據(jù)領(lǐng)域發(fā)展至今已經(jīng)經(jīng)歷了相當(dāng)長(zhǎng)時(shí)間的發(fā)展和探索菊匿,雖然大數(shù)據(jù)技術(shù)的出現(xiàn)和迭代降低了用戶處理海量數(shù)據(jù)的門檻付呕,但是有一個(gè)問題不能忽視,數(shù)據(jù)格式對(duì)不同引擎適配的對(duì)接跌捆。
這句話是什么意思呢徽职?
我們?cè)谑褂貌煌囊孢M(jìn)行計(jì)算時(shí),需要將數(shù)據(jù)根據(jù)引擎進(jìn)行適配佩厚。這是相當(dāng)棘手的問題
為此出現(xiàn)了一種新的解決方案:
介于上層計(jì)算引擎和底層存儲(chǔ)格式之間的一個(gè)中間層姆钉。這個(gè)中間層不是數(shù)據(jù)存儲(chǔ)的方式,只是定義了數(shù)據(jù)的元數(shù)據(jù)組織方式抄瓦,并且向引擎層面提供統(tǒng)一的類似傳統(tǒng)數(shù)據(jù)庫(kù)中"表"的語義育韩。它的底層仍然是Parquet、ORC等存儲(chǔ)格式闺鲸。
基于此筋讨,Netflix開發(fā)了Iceberg,目前已經(jīng)是Apache的頂級(jí)項(xiàng)目摸恍。

介紹

Apache Iceberg 是一種開放的表格格式悉罕,專為巨大的 PB 級(jí)表格而設(shè)計(jì)。表格格式的功能是確定您如何管理立镶、組織和跟蹤構(gòu)成表格的所有文件壁袄。您可以將其視為物理數(shù)據(jù)文件(用 Parquet 或 ORC 等編寫)以及它們?nèi)绾螛?gòu)建以形成表格之間的抽象層。
該項(xiàng)目最初是在 Netflix 開發(fā)的媚媒,目的是解決長(zhǎng)期存在的 PB 級(jí)大表使用問題嗜逻。它于 2018 年作為 Apache 孵化器項(xiàng)目開源,并于 2020 年 5 月 19 日從孵化器畢業(yè)缭召。
Netflix用內(nèi)部的一個(gè)時(shí)序數(shù)據(jù)業(yè)務(wù)的案例來說明Hive的這些問題栈顷,采用Hive時(shí)按照時(shí)間字段做partition,他們發(fā)現(xiàn)僅一個(gè)月會(huì)產(chǎn)生2688個(gè)partition和270萬個(gè)數(shù)據(jù)文件嵌巷。他們執(zhí)行一個(gè)簡(jiǎn)單的select查詢萄凤,發(fā)現(xiàn)僅在分區(qū)裁剪階段就耗費(fèi)數(shù)十分鐘。

hive存在的問題

1搪哪、Hive的元數(shù)據(jù)依賴一個(gè)外部的MySQL和HDFS文件系統(tǒng)靡努,通過MySQL找到相關(guān)的parition之后,需要為每個(gè)partition去HDFS文件系統(tǒng)上按照分區(qū)做目錄的list操作在文件量大的情況下,這是一個(gè)非常耗時(shí)的操作
2惑朦、hive元數(shù)據(jù)分屬M(fèi)ySQL和HDFS管理兽泄,寫入操作本身的原子性難以保證。即使在開啟Hive ACID情況下漾月,仍有很多細(xì)小場(chǎng)景無法保證原子性病梢。
3、Hive Metastore沒有文件級(jí)別的統(tǒng)計(jì)信息栅屏,無法追蹤到文件級(jí)別,這使得filter謂詞只能下推到partition級(jí)別堂鲜,而無法下推到文件級(jí)別栈雳,對(duì)上層分析性能損耗無可避免。
Iceberg通過使用持久樹結(jié)構(gòu)跟蹤表中所有文件的完整列表來避免這種情況缔莲。對(duì)表的更改使用原子(對(duì)象/文件)級(jí)提交來更新包含所有單個(gè)數(shù)據(jù)文件位置的新元數(shù)據(jù)文件的路徑
Iceberg 跟蹤單個(gè)文件而不是文件夾的另一個(gè)優(yōu)點(diǎn)是不再需要昂貴的list操作哥纫,這會(huì)在執(zhí)行查詢表中的數(shù)據(jù)等操作時(shí)提高性能。

iceberg數(shù)據(jù)組織

iceberg文件

1痴奏、Snapshot metadata file( /metadata/v9.metadata.json):包含有關(guān)表的元數(shù)據(jù)蛀骇,如表架構(gòu)、分區(qū)規(guī)范以及清單列表的路徑读拆。
2擅憔、Manifest list(/metadata/snap-1690829998331847164-1-5655e629-c39e-4e6b-825a-dca3bf5b814a.avro):包含與快照關(guān)聯(lián)的每個(gè)清單文件的條目。每個(gè)條目都包含清單文件的路徑和有關(guān)該文件的一些元數(shù)據(jù)檐晕,包括分區(qū)統(tǒng)計(jì)信息和數(shù)據(jù)文件計(jì)數(shù)暑诸。這些統(tǒng)計(jì)信息可用于避免讀取操作不需要的清單。
3辟灰、Manifest file(/metadata/5655e629-c39e-4e6b-825a-dca3bf5b814a-m2.avro):包含相關(guān)數(shù)據(jù)文件的路徑列表个榕。數(shù)據(jù)文件的每個(gè)條目都包含一些關(guān)于文件的元數(shù)據(jù),例如每列的上限和下限芥喇,可用于在查詢計(jì)劃期間修剪文件西采。
4、Data file(/data/level=1/00000-811-f7539dc8-534e-4d29-a563-3de7f8b35c9d-00001.parquet):物理數(shù)據(jù)文件继控,以 Parquet械馆、ORC、Avro 等格式編寫武通。

iceberg schema 修改理解

Iceberg保證更改是獨(dú)立的且沒有副作用狱杰。Iceberg 使用唯一 ID 來跟蹤schema 中的每個(gè)字段,并將字段名稱映射到 ID厅须。這意味著您可以更改字段的名稱仿畸,但 Iceberg讀取底層數(shù)據(jù)仍將使用與每個(gè)字段關(guān)聯(lián)的 ID。

Partition Evolution

由于Iceberg實(shí)現(xiàn)了隱藏分區(qū),因此Iceberg還可以提供分區(qū)規(guī)范演變的特性错沽。這意味著您可以在不破壞表的情況下更改分區(qū)的粒度或列簿晓。分區(qū)演變是一種元數(shù)據(jù)操作,不會(huì)重寫文件千埃,因此舊數(shù)據(jù)可以與任何新數(shù)據(jù)在表中共存憔儿。Iceberg實(shí)現(xiàn)了分割計(jì)劃——Iceberg使用舊規(guī)范為第一組數(shù)據(jù)執(zhí)行查詢計(jì)劃,然后使用新規(guī)范為第二組數(shù)據(jù)執(zhí)行第二個(gè)查詢計(jì)劃放可,然后合并所有文件谒臼。

image.png

在上面的圖表中,booking_table最初是按月(日期)進(jìn)行分區(qū)的耀里,直到partition spec更改為日(日期)的2009-01-01蜈缤。舊數(shù)據(jù)保持舊分區(qū)格式,所有新數(shù)據(jù)都以新格式寫入冯挎。當(dāng)運(yùn)行示例查詢時(shí)底哥,Iceberg為每個(gè)分區(qū)規(guī)范執(zhí)行分割計(jì)劃,并可以通過對(duì)日期列應(yīng)用月或日轉(zhuǎn)換來過濾兩種spec下的分區(qū)房官。

Time travel

如前所述趾徽,Iceberg保留表以前快照的日志,這允許執(zhí)行時(shí)間旅行查詢或表回滾翰守。iceberg為spark3.x提供了全部功能的實(shí)現(xiàn)
通過Spark可以訪問快照日志數(shù)據(jù):

spark.read
     .format("iceberg")
     .load("bookings.rome_hotels.snapshots")
     .show(truncate = false)
image.png
查詢指定快照數(shù)據(jù)孵奶,回滾操作
spark.read
    .format("iceberg")
    .option("snapshot-id", 1624021260521L) #Using snapshot ID
    .load("bookings.rome_hotels")
spark.read
    .format("iceberg")
    .option("as-of-timestamp", "1624021260521") #Using timestamp
    .load("bookings.rome_hotels")
table.rollback()
     .toSnapshotId(1624021260521L)
     .commit();
table.rollback()
     .toSnapshotAtTime(1624021260521)
     .commit();

參考
https://iceberg.apache.org/spark-procedures/
https://medium.com/expedia-group-tech/a-short-introduction-to-apache-iceberg-d34f628b6799
https://jishuin.proginn.com/p/763bfbd3950b

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蜡峰,隨后出現(xiàn)的幾起案子拒课,更是在濱河造成了極大的恐慌,老刑警劉巖事示,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件早像,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肖爵,警方通過查閱死者的電腦和手機(jī)卢鹦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劝堪,“玉大人冀自,你說我怎么就攤上這事∶肜玻” “怎么了熬粗?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)余境。 經(jīng)常有香客問我驻呐,道長(zhǎng)灌诅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任含末,我火速辦了婚禮猜拾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘佣盒。我一直安慰自己挎袜,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布肥惭。 她就那樣靜靜地躺著盯仪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜜葱。 梳的紋絲不亂的頭發(fā)上全景,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音笼沥,去河邊找鬼蚪燕。 笑死娶牌,一個(gè)胖子當(dāng)著我的面吹牛奔浅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诗良,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼汹桦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了鉴裹?” 一聲冷哼從身側(cè)響起舞骆,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎径荔,沒想到半個(gè)月后督禽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡总处,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年狈惫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鹦马。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡胧谈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荸频,到底是詐尸還是另有隱情菱肖,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布旭从,位于F島的核電站稳强,受9級(jí)特大地震影響场仲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜键袱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一燎窘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蹄咖,春花似錦褐健、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俊抵,卻和暖如春谁不,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背徽诲。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工刹帕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谎替。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓偷溺,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親钱贯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挫掏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354