国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建

這篇具有很好參考價(jià)值的文章主要介紹了【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

我們?cè)谑褂貌煌囊孢M(jìn)行大數(shù)據(jù)計(jì)算時(shí),需要將數(shù)據(jù)根據(jù)計(jì)算引擎進(jìn)行適配。這是一個(gè)相當(dāng)棘手的問題,為此出現(xiàn)了一種新的解決方案:介于上層計(jì)算引擎和底層存儲(chǔ)格式之間的一個(gè)中間層。這個(gè)中間層不是數(shù)據(jù)存儲(chǔ)的方式,只是定義了數(shù)據(jù)的元數(shù)據(jù)組織方式,并向計(jì)算引擎提供統(tǒng)一的類似傳統(tǒng)數(shù)據(jù)庫中 “表” 的語義。它的底層仍然是 Parquet、ORC 等存儲(chǔ)格式。

基于此,Netflix 開發(fā)了 Iceberg,目前已經(jīng)是 Apache 的頂級(jí)項(xiàng)目,https://iceberg.apache.org/。

1.數(shù)據(jù)湖的解決方案 - Iceberg

1.1 Iceberg 是什么

Apache Iceberg is an open table format for huge analytic datasets. Iceberg adds tables to compute engines including Flink Trino Spark and Hive using a high-performance table format that works just like a SQL table.

Iceberg 是一種開放的數(shù)據(jù)湖表格式。可以簡單理解為是基于計(jì)算層(Flink、Spark)和存儲(chǔ)層(ORC,Parquet,Avro)的一個(gè)中間層,用 Flink 或者 Spark 將數(shù)據(jù)寫入 Iceberg,然后再通過其他方式來讀取這個(gè)表,比如 Spark,F(xiàn)link,Presto 等。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
在文件 Format(Parquet / Avro / ORC 等)之上實(shí)現(xiàn) Table 語義:

  • 支持定義和變更 Schema
  • 支持 Hidden Partition 和 Partition 變更
  • ACID 語義
  • 歷史版本回溯
  • 借助 Partition 和 Columns 統(tǒng)計(jì)信息實(shí)現(xiàn)分區(qū)裁剪
  • 不綁定任何存儲(chǔ)引擎,可拓展到 HDFS / S3 / OSS
  • 容許多個(gè) writer 并發(fā)寫入,樂觀鎖機(jī)制解決沖突

1.2 Iceberg 的 Table Format 介紹

Iceberg 是為分析海量數(shù)據(jù)而設(shè)計(jì)的,被定義為 Table Format,Table Format 介于計(jì)算層和存儲(chǔ)層之間。

Table Format 向下管理在存儲(chǔ)系統(tǒng)上的文件,向上為計(jì)算層提供豐富的接口。存儲(chǔ)系統(tǒng)上的文件存儲(chǔ)都會(huì)采用一定的組織形式,譬如讀一張 Hive 表的時(shí)候,HDFS 文件系統(tǒng)會(huì)帶一些 Partition、數(shù)據(jù)存儲(chǔ)格式、數(shù)據(jù)壓縮格式、數(shù)據(jù)存儲(chǔ) HDFS 目錄的信息等,這些信息都存在 Metastore 上,Metastore 就可以稱之為一種文件組織格式。

一個(gè)優(yōu)秀的 文件組織格式,如 Iceberg,可以更高效的支持上層的計(jì)算層訪問磁盤上的文件,做一些 list、rename 或者查找等操作。

表和表格式是兩個(gè)概念。表是一個(gè)具象的概念,應(yīng)用層面的概念,我們天天說的表是簡單的行和列的組合。而 表格式 是數(shù)據(jù)庫系統(tǒng)實(shí)現(xiàn)層面一個(gè)抽象的概念,它定義了一個(gè)表的 Scheme 定義:包含哪些字段,表下面文件的組織形式(Partition 方式)、元數(shù)據(jù)信息(表相關(guān)的統(tǒng)計(jì)信息,表索引信息以及表的讀寫 API),如下圖左側(cè)所示:

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
上圖右側(cè)是 Iceberg 在數(shù)據(jù)倉庫生態(tài)中的位置,和它差不多相當(dāng)?shù)囊粋€(gè)組件是 Metastore。不過 Metastore 是一個(gè)服務(wù),而 Iceberg 就是一系列 jar 包。對(duì)于 Table Format,我認(rèn)為主要包含 4 4 4 個(gè)層面的含義,分別是 表 Schema 定義(是否支持復(fù)雜數(shù)據(jù)類型),表中文件的組織形式,表相關(guān)統(tǒng)計(jì)信息、表索引信息以及表的讀寫 API 信息。

  • 表 Schema 定義了一個(gè)表支持字段類型,比如 int、string、long 以及復(fù)雜數(shù)據(jù)類型等。
  • 表中文件組織形式最典型的是 Partition 模式,是 Range Partition 還是 Hash Partition。
  • Metadata 數(shù)據(jù)統(tǒng)計(jì)信息。
  • 表的讀寫 API。上層引擎通過對(duì)應(yīng)的 API 讀取或者寫入表中的數(shù)據(jù)。

1.3 Iceberg 的核心思想

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

Iceberg 的核心思想,就是 在時(shí)間軸上跟蹤表的所有變化

  • 快照 表示表數(shù)據(jù)文件的一個(gè)完整集合。
  • 每次更新操作會(huì)生成一個(gè)新的快照。

1.4 Iceberg 的元數(shù)據(jù)管理

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
從圖中可以看到 Iceberg 將數(shù)據(jù)進(jìn)行分層管理,主要分為 元數(shù)據(jù)管理層數(shù)據(jù)存儲(chǔ)層。元數(shù)據(jù)管理層又可以細(xì)分為三層:

  • Metadata File
  • Snapshot
  • Manifest

Metadata File 存儲(chǔ)當(dāng)前版本的元數(shù)據(jù)信息(所有 Snapshot 信息);Snapshot 表示當(dāng)前操作的一個(gè)快照,每次 commit 都會(huì)生成一個(gè)快照,一個(gè)快照中包含多個(gè) Manifest。每個(gè) Manifest 中記錄了當(dāng)前操作生成數(shù)據(jù)所對(duì)應(yīng)的文件地址,也就是 data files 的地址?;?Snapshot 的管理方式,Iceberg 能夠進(jìn)行 time travel(歷史版本讀取以及增量讀取),并且提供了 serializable isolation

數(shù)據(jù)存儲(chǔ)層支持不同的文件格式,目前支持 Parquet、ORC、AVRO。

1.5 Iceberg 的重要特性

Apache Iceberg 設(shè)計(jì)初衷是 為了解決 Hive 離線數(shù)倉計(jì)算慢的問題,經(jīng)過多年迭代已經(jīng)發(fā)展成為構(gòu)建數(shù)據(jù)湖服務(wù)的表格式標(biāo)準(zhǔn)。關(guān)于 Apache Iceberg 的更多介紹,請(qǐng)參見 Apache Iceberg 官網(wǎng)。

目前 Iceberg 提供以下核心能力:

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

1.5.1 豐富的計(jì)算引擎

  • 優(yōu)秀的內(nèi)核抽象使之不綁定特定引擎,目前在支持的有 Spark、Flink、Presto、Hive。
  • Iceberg 提供了 Java Native API,不用特定引擎也可以訪問 Iceberg 表。

1.5.2 靈活的文件組織形式

  • 提供了 基于流式的增量計(jì)算模型基于批處理的全量表計(jì)算模型,批任務(wù)和流任務(wù)可以使用相同的存儲(chǔ)模型(HDFS、OZONE),數(shù)據(jù)不再孤立,以構(gòu)建低成本的輕量級(jí)數(shù)據(jù)湖存儲(chǔ)服務(wù)。
  • Iceberg 支持隱藏分區(qū)(Hidden Partitioning)和分區(qū)布局變更(Partition Evolution),方便業(yè)務(wù)進(jìn)行數(shù)據(jù)分區(qū)策略更新。
  • 支持 Parquet、ORC、Avro 等存儲(chǔ)格式。

1.5.3 優(yōu)化數(shù)據(jù)入湖流程

  • Iceberg 提供 ACID 事務(wù)能力,上游數(shù)據(jù)寫入即可見,不影響當(dāng)前數(shù)據(jù)處理任務(wù),這大大簡化了 ETL。
  • Iceberg 提供 Upsert / Merge Into 行級(jí)別數(shù)據(jù)變更,可以極大地縮小數(shù)據(jù)入庫延遲。

1.5.4 增量讀取處理能力

  • Iceberg 支持通過流式方式讀取增量數(shù)據(jù),實(shí)現(xiàn)主流開源計(jì)算引擎入湖和分析場(chǎng)景的完善對(duì)接。
  • 支持 Spark Structed Streaming。
  • 支持 Flink Table Source。
  • 支持歷史版本回溯。

1.6 數(shù)據(jù)文件結(jié)構(gòu)

我們先了解一下 Iceberg 在文件系統(tǒng)中的布局,總體來講 Iceberg 分為兩部分?jǐn)?shù)據(jù)。

  • 第一部分是 數(shù)據(jù)文件,如下圖中的 .parquet 文件。
  • 第二部分是 表元數(shù)據(jù)文件(Metadata 文件),包含 Snapshot 文件(snap-*.avro)、Manifest 文件(.avro)、TableMetadata 文件(*.json)等。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

1.6.1 元數(shù)據(jù)文件

其中 Metadata 目錄存放元數(shù)據(jù)管理層的數(shù)據(jù),表的元數(shù)據(jù)是不可修改的,并且始終向前迭代;當(dāng)前的快照可以回退。

1.6.1.1 Table Metadata

version[number].metadata.json:存儲(chǔ)每個(gè)版本的數(shù)據(jù)更改項(xiàng)。

1.6.1.2 快照(Snapshot)

snap-[snapshotID]-[attemptID]-[commitUUID].avro:存儲(chǔ)快照 Snapshot 文件。

快照代表一張 Iceberg 表在某一時(shí)刻的狀態(tài),也被稱為 清單列表Manifest List),里面存儲(chǔ)的是清單文件列表,每個(gè)清單文件占用一行數(shù)據(jù)。清單列表文件以 snap 開頭,以 avro 后綴結(jié)尾,每次更新都產(chǎn)生一個(gè)清單列表文件。每行中存儲(chǔ)了清單文件的路徑。

清單文件(Manifest Files)里面存儲(chǔ)數(shù)據(jù)文件的分區(qū)范圍、增加了幾個(gè)數(shù)據(jù)文件、刪除了幾個(gè)數(shù)據(jù)文件等信息。數(shù)據(jù)文件(Data Files)存儲(chǔ)在不同的 Manifest Files 里面,Manifest Files 存儲(chǔ)在一個(gè) Manifest List 文件里面,而一個(gè) Manifest List 文件代表一個(gè)快照。

1.6.1.3 清單文件(Manifest File)

[commitUUID]-[attemptID]-[manifestCount].avro:Manifest 文件。

清單文件是以 avro 格式進(jìn)行存儲(chǔ)的,以 avro 后綴結(jié)尾,每次更新操作都會(huì)產(chǎn)生多個(gè)清單文件。其里面列出了組成某個(gè)快照(Snapshot)的數(shù)據(jù)文件列表。每行都是每個(gè)數(shù)據(jù)文件的詳細(xì)描述,包括 數(shù)據(jù)文件的狀態(tài)文件路徑、分區(qū)信息列級(jí)別的統(tǒng)計(jì)信息(比如每列的最大最小值、空值數(shù)等)、文件的大小 以及 文件里面數(shù)據(jù)的行數(shù) 等信息。其中列級(jí)別的統(tǒng)計(jì)信息在 Scan 的時(shí)候可以為算子下推提供數(shù)據(jù),以便可以過濾掉不必要的文件。

1.6.2 數(shù)據(jù)文件

data 目錄組織形式類似于 Hive,都是以分區(qū)進(jìn)行目錄組織(圖中 dt 為分區(qū)列)。

Iceberg 的數(shù)據(jù)文件通常存放在 data 目錄下。一共有三種存儲(chǔ)格式(Avro、ORC 和 Parquet),主要是看你選擇哪種存儲(chǔ)格式,后綴分別對(duì)應(yīng) avro、orc 或者 parquet。在一個(gè)目錄,通常會(huì)產(chǎn)生多個(gè)數(shù)據(jù)文件。

2.Apache Iceberg 的實(shí)現(xiàn)細(xì)節(jié)

2.1 快照設(shè)計(jì)方式

2.1.1 快照隔離

  • 讀操作僅適用當(dāng)前已生成快照。
  • 寫操作會(huì)生成新的隔離快照,并在寫完成后原子性提交。

如下圖所示,虛線框(Snapshot-1)表示正在進(jìn)行寫操作,但是還沒有發(fā)生 commit 操作,這時(shí)候 Snapshot-1 是不可讀的,用戶只能讀取已經(jīng) commit 之后的 Snapshot。同理,Snapshot-2,Snapshot-3 表示已經(jīng)可讀。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
可以支持并發(fā)讀,例如可以同時(shí)讀取 S1、S2、S3 的快照數(shù)據(jù),同時(shí),可以回溯到 Snapshot-2 或者 Snapshot-3。在 Snapshot-4 commit 完成之后,這時(shí)候 Snapshot-4 已經(jīng)變成實(shí)線,就可以讀取數(shù)據(jù)了。

例如,現(xiàn)在 Current Snapshot 的指針移到 S3,用戶對(duì)一張表的讀操作,都是讀 Current Snapshot 指針?biāo)赶虻?Snapshot,但不會(huì)影響前面的 Snapshot 的讀操作。

當(dāng)一切準(zhǔn)備完畢之后,會(huì)以原子操作的方式 commit 這個(gè) Metadata 文件,這樣一次 Iceberg 的數(shù)據(jù)寫入就完成了。隨著每次的寫入,Iceberg 就生成了下圖這樣的一個(gè)文件組織模式。

2.1.2 增量讀取數(shù)據(jù)

Iceberg 的每個(gè) Snapshot 都包含前一個(gè) Snapshot 的所有數(shù)據(jù),每次都相當(dāng)于全量讀取數(shù)據(jù),對(duì)于整個(gè)鏈路來說,讀取數(shù)據(jù)的代價(jià)是非常高的。

如果我們只想讀取當(dāng)前時(shí)刻的增量數(shù)據(jù),就可以根據(jù) Iceberg 中 Snapshot 的回溯機(jī)制來實(shí)現(xiàn),僅讀取 Snapshot-1 到 Snapshot-2 的增量數(shù)據(jù),也就是下圖中的紫色數(shù)據(jù)部分。

同理,S3 也可以只讀取紅色部分的增量數(shù)據(jù),也可以讀取 S1 - S3 的增量數(shù)據(jù)。

Iceberg 支持讀寫分離,也就是說可以支持并發(fā)讀和增量讀。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

2.1.3 原子性操作

對(duì)于文件列表的所有修改都是原子操作。

  • 在分區(qū)中追加數(shù)據(jù)。
  • 合并或是重寫分區(qū)。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

  • Iceberg 是以 文件 為粒度提交事務(wù)的,所以就沒有辦法做到以秒為單位提交事務(wù),否則會(huì)造成文件數(shù)據(jù)量膨脹。
  • 比如 Flink 是以 CheckPoint 為寫入單位,物理數(shù)據(jù)在寫入 Iceberg 之后并不能被直接查詢,只有當(dāng)觸發(fā)了 CheckPoint 時(shí)才會(huì)寫 Metadata,這時(shí)數(shù)據(jù)才會(huì)由不可見變成可見。而每次 CheckPoint 執(zhí)行也需要一定的時(shí)間。

2.2 事務(wù)性提交

2.2.1 寫操作要求

原子性替換保證了線性的歷史。原子性替換需要依靠以下操作來保證:

  • 記錄當(dāng)前元數(shù)據(jù)的版本 base version。
  • 創(chuàng)建新的元數(shù)據(jù)以及 Manifest 文件。
  • 原子性的將 base version 替換為新的版本。

2.2.2 沖突解決 - 樂觀鎖

  • 假定當(dāng)前沒有其他的寫操作。
  • 遇到?jīng)_突則基于當(dāng)前最新的元數(shù)據(jù)進(jìn)行重試。
  • 元數(shù)據(jù)管理器所提供的能力。
  • HDFS 或是本地文件系統(tǒng)所提供的原子化的 rename 能力。

3.Iceberg 結(jié)合 Flink 場(chǎng)景分享

3.1 構(gòu)建近實(shí)時(shí) Data Pipeline

Iceberg 可以做到分鐘級(jí)別的準(zhǔn)實(shí)時(shí)數(shù)據(jù)拉取。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
首先,F(xiàn)link Iceberg 最經(jīng)典的一個(gè)場(chǎng)景就是 構(gòu)建實(shí)時(shí)的 Data Pipeline。業(yè)務(wù)端產(chǎn)生的大量日志數(shù)據(jù),被導(dǎo)入到 Kafka 這樣的消息隊(duì)列。運(yùn)用 Flink 流計(jì)算引擎執(zhí)行 ETL 后,導(dǎo)入到 Apache Iceberg 原始表中。有一些業(yè)務(wù)場(chǎng)景需要直接跑分析作業(yè)來分析原始表的數(shù)據(jù),而另外一些業(yè)務(wù)需要對(duì)數(shù)據(jù)做進(jìn)一步的提純。那么我們可以再新起一個(gè) Flink 作業(yè)從 Apache Iceberg 表中消費(fèi)增量數(shù)據(jù),經(jīng)過處理之后寫入到提純之后的 Iceberg 表中。此時(shí),可能還有業(yè)務(wù)需要對(duì)數(shù)據(jù)做進(jìn)一步的聚合,那么我們繼續(xù)在 Iceberg 表上啟動(dòng)增量 Flink 作業(yè),將聚合之后的數(shù)據(jù)結(jié)果寫入到聚合表中。

有人會(huì)想,這個(gè)場(chǎng)景好像通過 Flink Hive 也能實(shí)現(xiàn)。 Flink Hive 的確可以實(shí)現(xiàn),但寫入到 Hive 的數(shù)據(jù)更多地是為了實(shí)現(xiàn)數(shù)倉的數(shù)據(jù)分析,而不是為了做增量拉取。一般來說,Hive 的增量寫入以 Partition 為單位,時(shí)間是 15 m i n 15min 15min 以上,F(xiàn)link 長期高頻率地寫入會(huì)造成 Partition 膨脹。而 Iceberg 容許實(shí)現(xiàn) 1 m i n 1min 1min 甚至 30 s 30s 30s 的增量寫入,這樣就可以大大提高了端到端數(shù)據(jù)的實(shí)時(shí)性,上層的分析作業(yè)可以看到更新的數(shù)據(jù),下游的增量作業(yè)可以讀取到更新的數(shù)據(jù)。

3.2 CDC 數(shù)據(jù)實(shí)時(shí)攝入攝出

Flink CDC(Change Data Capture)增量數(shù)據(jù)寫入 Iceberg。

  • 支持準(zhǔn)實(shí)時(shí)的數(shù)據(jù)入湖和數(shù)據(jù)分析。
  • 計(jì)算引擎原生支持 CDC,無需添加額外的組件。
  • 采用統(tǒng)一的數(shù)據(jù)湖存儲(chǔ)方案,并支持多種數(shù)據(jù)分析引擎。
  • 支持增量數(shù)據(jù)讀取。

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
可以用 Flink Iceberg 來分析來自 MySQL 等關(guān)系型數(shù)據(jù)庫的 binlog 等。一方面,Apache Flink 已經(jīng)原生地支持 CDC 數(shù)據(jù)解析,一條 binlog 數(shù)據(jù)通過 ververica flink-cdc-connector 拉取之后,自動(dòng)轉(zhuǎn)換成 Flink Runtime 能識(shí)別的 INSERTDELETE、UPDATE_BEFOREUPDATE_AFTER 四種消息,供用戶做進(jìn)一步的實(shí)時(shí)計(jì)算。

此外,CDC 數(shù)據(jù)成功入湖 Iceberg 之后,我們還會(huì)打通常見的計(jì)算引擎,例如 Presto、Spark、Hive 等,他們都可以實(shí)時(shí)地讀取到 Iceberg 表中的最新數(shù)據(jù)。

MySQL Binlog 是二進(jìn)制格式的日志文件,但是不能把 binlog 文件等同于 OS 系統(tǒng)某目錄下的具體文件,這是狹隘的。Binlog 是用來記錄 MySQL 內(nèi)部對(duì)數(shù)據(jù)庫的改動(dòng)(只記錄對(duì)數(shù)據(jù)的修改操作),主要用于數(shù)據(jù)庫的主從復(fù)制以及增量恢復(fù)。

3.3 從 Iceberg 歷史數(shù)據(jù)啟動(dòng) Flink 任務(wù)

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
上面的架構(gòu)是采用 Iceberg 全量數(shù)據(jù)和 Kafka 的增量數(shù)據(jù)來驅(qū)動(dòng)新的 Flink 作業(yè)。如果需要過去很長時(shí)間例如一年的數(shù)據(jù),可以采用常見的 Lambda 架構(gòu),離線鏈路通過 Kafka → Flink → Iceberg 同步寫入到數(shù)據(jù)湖,由于 Kafka 成本較高,保留最近 7 7 7 天數(shù)據(jù)即可,Iceberg 存儲(chǔ)成本較低,可以存儲(chǔ)全量的歷史數(shù)據(jù),啟動(dòng)新 Flink 作業(yè)的時(shí)候,只需要去拉 Iceberg 的數(shù)據(jù),跑完之后平滑地對(duì)接到 Kafka 數(shù)據(jù)即可。

3.4 通過 Iceberg 數(shù)據(jù)來修正實(shí)時(shí)聚合結(jié)果

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg
同樣是在 Lambda 架構(gòu)下,實(shí)時(shí)鏈路由于事件丟失或者到達(dá)順序的問題,可能導(dǎo)致流計(jì)算端結(jié)果不一定完全準(zhǔn)確,這時(shí)候一般都需要全量的歷史數(shù)據(jù)來訂正實(shí)時(shí)計(jì)算的結(jié)果。而我們的 Iceberg 可以很好地充當(dāng)這個(gè)角色,因?yàn)樗梢愿咝詢r(jià)比地管理好歷史數(shù)據(jù)。

4.Iceberg 0.11.1 源代碼編譯

4.1 編譯 Iceberg

構(gòu)建 Iceberg 需要 Grade 5.6 5.6 5.6 和 Java 8 8 8 的環(huán)境。

4.1.1 下載 Iceberg 0.11.1 軟件包

下載地址:

  • https://github.com/apache/iceberg/releases/tag/apache-iceberg-0.11.1
  • https://www.apache.org/dyn/closer.cgi/iceberg/apache-iceberg-0.11.0/apache-iceberg-0.11.0.tar.gz

4.1.2 解壓 Iceberg 0.11.1 軟件包

[bigdata@bigdata185 software]$ tar -zxvf iceberg-apache-iceberg-0.11.1.tar.gz -C /opt/module/ 
[bigdata@bigdata185 software]$ cd /opt/module/iceberg-apache-iceberg-0.11.1/

4.1.3 修改對(duì)應(yīng)的版本

我們選擇最穩(wěn)定的版本進(jìn)行編譯,Hadoop 2.7.7 2.7.7 2.7.7、Hive 2.3.9 2.3.9 2.3.9、Flink 1.11.6 1.11.6 1.11.6、Spark 3.0.3 3.0.3 3.0.3。

org.apache.flink:* = 1.11.6 
org.apache.hadoop:* = 2.7.7
org.apache.hive:hive-metastore = 2.3.9 
org.apache.hive:hive-serde = 2.3.9 
org.apache.spark:spark-hive_2.12 = 3.0.3

4.1.4 編輯 build.gradle 文件,添加國內(nèi)源

(1)在 buildscriptrepositories 中添加:

maven { url 'https://mirrors.huaweicloud.com/repository/maven/' }

添加后如下所示:

buildscript {
  repositories {
    jcenter()
    gradlePluginPortal()
    maven { url 'https://mirrors.huaweicloud.com/repository/maven/' }
  }
  dependencies {
    classpath 'com.github.jengelman.gradle.plugins:shadow:5.0.0'
    classpath 'com.palantir.baseline:gradle-baseline-java:3.36.2'
    classpath 'com.palantir.gradle.gitversion:gradle-git-version:0.12.3'
    classpath 'com.diffplug.spotless:spotless-plugin-gradle:3.14.0'
    classpath 'gradle.plugin.org.inferred:gradle-processors:2.1.0'
    classpath 'me.champeau.gradle:jmh-gradle-plugin:0.4.8'
  }
}

(2)allprojects 中添加:

maven { url 'https://mirrors.huaweicloud.com/repository/maven/' }

添加后如下所示

allprojects {
  group = "org.apache.iceberg"
  version = getProjectVersion()
  repositories {
    maven { url 'https://mirrors.huaweicloud.com/repository/maven/' }
    mavenCentral()
    mavenLocal()
  }
}

4.1.5 下載依賴(可選)

進(jìn)入項(xiàng)目根目錄,執(zhí)行腳本:

[bigdata@bigdata185 iceberg-apache-iceberg-0.11.1]$ ./gradlew dependencies

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

4.1.6 正式編譯

(1)進(jìn)入項(xiàng)目根目錄,執(zhí)行:

[bigdata@bigdata185 iceberg-apache-iceberg-0.11.1]$ ./gradlew build

(2)上述命令會(huì)執(zhí)行代碼里的單元測(cè)試,如果不需要,則執(zhí)行以下命令:

[bigdata@bigdata185 iceberg-apache-iceberg-0.11.1]$ ./gradlew build -x test -x scalaStyle

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

4.1.7 生成的目錄

【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建,大數(shù)據(jù),大數(shù)據(jù),數(shù)據(jù)湖,Iceberg

4.2 Iceberg 環(huán)境部署

在后面的章節(jié)中,我們分別介紹如何集成 Iceberg 0.11.1Flink 1.11.6、Spark 3.0.3、Hive 2.3.9。文章來源地址http://www.zghlxwxcb.cn/news/detail-697091.html

5.總結(jié)

  • 數(shù)據(jù)湖的解決方案 Iceberg 介紹。
  • Apache Iceberg 的技術(shù)實(shí)現(xiàn)細(xì)節(jié)。
  • Iceberg 結(jié)合 Flink 場(chǎng)景分享。
  • Iceberg 0.11.1 0.11.1 0.11.1 源碼編譯。

到了這里,關(guān)于【大數(shù)據(jù)】Apache Iceberg 概述和源代碼的構(gòu)建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Jenkins自動(dòng)拉取SVN源代碼構(gòu)建打包vue前端項(xiàng)目

    Jenkins自動(dòng)拉取SVN源代碼構(gòu)建打包vue前端項(xiàng)目

    目錄 1.功能需求 2.安裝插件 2.1 安裝NodeJS插件 2.2? 安裝SVN插件 3.配置環(huán)境 3.1? NodeJS環(huán)境 4.新建任務(wù)配置部署信息 4.1? 源代碼管理 4.2? 構(gòu)建觸發(fā)器 4.3? 構(gòu)建環(huán)境 ?4.4? 構(gòu)建步驟 5.構(gòu)建項(xiàng)目 ?5.1?點(diǎn)擊查看控制臺(tái)日志 使用Jenkins從SVN上拉取Vue項(xiàng)目進(jìn)行自動(dòng)構(gòu)建打包。如果需要發(fā)

    2023年04月22日
    瀏覽(24)
  • 基于SpringBoot+Dubbo構(gòu)建的電商平臺(tái)-微服務(wù)架構(gòu)、商城、電商、微服務(wù)、高并發(fā)、kafka、Elasticsearc+源代碼+文檔說明

    基于SpringBoot+Dubbo構(gòu)建的電商平臺(tái)-微服務(wù)架構(gòu)、商城、電商、微服務(wù)、高并發(fā)、kafka、Elasticsearc+源代碼+文檔說明

    項(xiàng)目基于springboot2.1.6.RELEASE+Dubbo2.7.3 來構(gòu)建微服務(wù)。 業(yè)務(wù)模塊劃分,盡量貼合互聯(lián)網(wǎng)公司的架構(gòu)體系。所以,除了業(yè)務(wù)本身的復(fù)雜度不是很高之外,整體的架構(gòu)基本和實(shí)際架構(gòu)相差無幾。 但實(shí)際上,真實(shí)的生產(chǎn)級(jí)的項(xiàng)目由于用戶量以及業(yè)務(wù)的復(fù)雜度,會(huì)變得非常復(fù)雜。 所以

    2024年02月20日
    瀏覽(36)
  • 鴻鵠企業(yè)工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng)源代碼

    鴻鵠企業(yè)工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng)源代碼

    ?????鴻鵠工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng) 1. 項(xiàng)目背景 一、隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營規(guī)模不斷壯大。為了提高工程管理效率、減輕勞動(dòng)強(qiáng)度、提高信息處理速度和準(zhǔn)確性,公司對(duì)內(nèi)部工程管理的提升提出

    2024年02月10日
    瀏覽(32)
  • java版鴻鵠工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng)源代碼

    java版鴻鵠工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng)源代碼

    ???鴻鵠工程項(xiàng)目管理系統(tǒng) Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分離構(gòu)建工程項(xiàng)目管理系統(tǒng) 1. 項(xiàng)目背景 一、隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營規(guī)模不斷壯大。為了提高工程管理效率、減輕勞動(dòng)強(qiáng)度、提高信息處理速度和準(zhǔn)確性,公司對(duì)內(nèi)部工程管理的提升提出了

    2024年02月07日
    瀏覽(94)
  • Java版企業(yè)電子招標(biāo)采購系統(tǒng)源代碼Spring Boot + 二次開發(fā) + 前后端分離 構(gòu)建企業(yè)電子招采平臺(tái)之立項(xiàng)流程圖

    Java版企業(yè)電子招標(biāo)采購系統(tǒng)源代碼Spring Boot + 二次開發(fā) + 前后端分離 構(gòu)建企業(yè)電子招采平臺(tái)之立項(xiàng)流程圖

    ??項(xiàng)目說明 隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營規(guī)模不斷壯大,公司對(duì)內(nèi)部招采管理的提升提出了更高的要求。在企業(yè)里建立一個(gè)公平、公開、公正的采購環(huán)境,最大限度控制采購成本至關(guān)重要。符合國家電子招投標(biāo)法律法規(guī)及相關(guān)規(guī)范,以及審計(jì)監(jiān)督要求;通過電子化

    2024年02月07日
    瀏覽(93)
  • 數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(源代碼?圖解?習(xí)題)

    數(shù)據(jù)結(jié)構(gòu)之隊(duì)列(源代碼?圖解?習(xí)題)

    ? ? ? ? 在學(xué)過棧之后,會(huì)了解到棧的底層是根據(jù)順序表或者鏈表來構(gòu)建的,那么我們今天要學(xué)習(xí)的隊(duì)列是否也是基于順序表和鏈表呢?那我們直接進(jìn)入正題吧! ? ? ? ? 還是跟上節(jié)一樣,依舊用圖解的方式讓大家更好的理解概念。 ? ? ? ? 隊(duì)列: 隊(duì)列指的是圖中黑色邊框

    2024年02月06日
    瀏覽(17)
  • 交通咨詢系統(tǒng)源代碼(數(shù)據(jù)結(jié)構(gòu)課設(shè))

    交通咨詢系統(tǒng)源代碼(數(shù)據(jù)結(jié)構(gòu)課設(shè))

    ? 系統(tǒng)的展示和選題在這篇博客:點(diǎn)擊這里? ? ? ? (就沒有詳解啦,代碼中的注釋已經(jīng)寫的很詳細(xì)了) ?????????直說了,我使用的軟件是vs,但是dev也可以運(yùn)行,反倒是初次使用vs的同學(xué),沒有關(guān)掉sdl檢查的話運(yùn)行會(huì)報(bào)錯(cuò),說是scanf啥的出問題。解決方法:項(xiàng)目-屬性-

    2024年02月11日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)之堆的實(shí)現(xiàn)(圖解?源代碼)

    數(shù)據(jù)結(jié)構(gòu)之堆的實(shí)現(xiàn)(圖解?源代碼)

    ? ? ? ? 首先明確堆是一種特殊的完全二叉樹,分為大根堆和小根堆,接下來我們就分別介紹一下這兩種不同的堆。 ????????在大堆里面: 父節(jié)點(diǎn)的值? ≥? 孩子節(jié)點(diǎn)的值 ?? ? ? ? 我們的兄弟節(jié)點(diǎn)沒有限制,只要保證 每個(gè)父節(jié)點(diǎn)都≥孩子節(jié)點(diǎn) 就行。 ????????在小堆

    2024年02月06日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)之手撕鏈表(講解?源代碼)

    數(shù)據(jù)結(jié)構(gòu)之手撕鏈表(講解?源代碼)

    我們?cè)趯W(xué)習(xí)過順序表之后,會(huì)發(fā)現(xiàn)兩點(diǎn)不是很優(yōu)秀的操作: 1.順序表的 頭插和中間的插入,頭刪和中間的刪除: ???????? 需要不斷的覆蓋數(shù)據(jù),時(shí)間復(fù)雜度是O(n),當(dāng)我們的順序表存入100w個(gè)數(shù)據(jù)的時(shí)候,花費(fèi)的時(shí)間是非常之多的。 2. 動(dòng)態(tài)開辟空間: ? ? ? ? a. 一般動(dòng)態(tài)

    2024年02月08日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)之手撕順序表(講解?源代碼)

    數(shù)據(jù)結(jié)構(gòu)之手撕順序表(講解?源代碼)

    ????????在本章之后,就要求大家對(duì)于指針、結(jié)構(gòu)體、動(dòng)態(tài)開辟等相關(guān)的知識(shí)要熟練的掌握,如果有小伙伴對(duì)上面相關(guān)的知識(shí)還不是很清晰,要先弄明白再過來接著學(xué)習(xí)哦! ????????那進(jìn)入正題,在講解順序表之前,我們先來介紹線性表這個(gè)數(shù)據(jù)結(jié)構(gòu)。 ????????線

    2024年02月08日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包