團隊
為什麼需要不同的文件格式?
支援 HDFS 的應用程式(例如 MapReduce 和 Spark)的主要效能瓶頸是搜尋、讀取和寫入資料所需的時間。 如果我們有一個不斷發展的模式而不是固定的模式,或者存在一些儲存限制,那麼管理大型資料集的難度就會使這些問題變得更加複雜。
處理大數據會增加儲存子系統的負載 - Hadoop 冗餘儲存資料以實現容錯。 除了磁碟之外,還載入處理器、網路、輸入/輸出系統等。 隨著資料量的成長,處理和儲存資料的成本也隨之增加。
各種文件格式在
- 更快的閱讀時間。
- 更快的錄音時間。
- 共享文件。
- 支持模式演化。
- 擴展的壓縮支援。
有些文件格式用於一般用途,有些文件格式用於更特定的用途,還有一些文件格式旨在滿足特定的資料特徵。 所以選擇範圍真的相當大。
Avro 檔案格式
為 數據序列化 Avro 被廣泛使用 - 它 基於字串,即Hadoop中的一種字串資料儲存格式。 它以 JSON 格式儲存架構,使其易於任何程式讀取和解釋。 數據本身是二進制格式,緊湊且高效。
Avro 的序列化系統是語言中立的。 檔案可以用多種語言處理,目前有 C、C++、C#、Java、Python 和 Ruby。
Avro 的一個關鍵特性是它對隨時間變化(即演化)的資料模式的強大支持。 Avro 瞭解架構變更 - 刪除、新增或變更欄位。
Avro 支援多種資料結構。 例如,您可以建立包含陣列、枚舉類型和子記錄的記錄。
此格式非常適合寫入資料湖的著陸(過渡)區域(
因此,這種格式最適合寫入資料湖的著陸區,原因如下:
- 來自該區域的資料通常會被完整讀取,以便下游系統進一步處理 - 在這種情況下,基於行的格式更有效率。
- 下游系統可以輕鬆地從文件中檢索模式表,無需將模式單獨儲存在外部元儲存中。
- 對原始模式的任何更改都很容易處理(模式演變)。
鑲木地板文件格式
Parquet 是 Hadoop 的開源檔案格式,用於存儲 平面柱狀格式的嵌套資料結構.
與傳統的行方式相比,Parquet 在儲存和效能方面更有效率。
這對於從寬(多列)表中讀取特定列的查詢特別有用。 由於採用了檔案格式,因此僅讀取必要的列,因此 I/O 保持在最低限度。
一個小題外話和解釋:為了更好地理解 Hadoop 中的 Parquet 檔案格式,讓我們看看什麼是基於列(即柱狀)格式。 這種格式將每列的相似值儲存在一起。
ID
姓名
參觀商店
1
emp1
d1
2
emp2
d2
3
emp3
d3
以字串格式儲存資料如下:
1
emp1
d1
2
emp2
d2
3
emp3
d3
在柱狀檔案格式中,相同的資料將像這樣保存:
1
2
3
emp1
emp2
emp3
d1
d2
d3
當您需要從表格中查詢多個列時,列式格式會更有效。 它只會讀取所需的列,因為它們是相鄰的。 透過這種方式,I/O 操作保持在最低限度。
例如,您只需要 NAME 列。 在
因此,列式格式提高了查詢效能,因為它需要更少的查找時間來獲取所需的列,並且減少了 I/O 操作的數量,因為只讀取所需的列。
獨特的功能之一
要了解 Hadoop 中的 Parquet 檔案格式,您需要了解以下術語:
- 字串群組 (行組):將資料邏輯水平劃分為行。 行組由資料集中每列的片段組成。
- 柱碎片 (列塊):特定列的片段。 這些列片段位於特定的行組中,並保證在文件中是連續的。
- 頁 (page):列片段被分成一頁接一頁地寫入的頁面。 這些頁面有一個共同的標題,因此您在閱讀時可以跳過不必要的頁面。
這裡的標題只包含神奇的數字 PAR1 (4 個位元組),將檔案標識為 Parquet 檔案。
頁尾內容如下:
- 包含每列元資料的起始座標的檔案元資料。 讀取時,必須先讀取文件的元資料以找到所有感興趣的列片段。 然後應按順序讀取列部分。 其他元資料包括格式版本、架構和任何其他鍵值對。
- 元資料長度(4 位元組)。
- 幻數 PAR1 (4位元組)。
ORC 文件格式
優化行列文件格式 (優化行列,
ORC格式的優點:
- 每個任務的輸出都是一個文件,減少了NameNode(名稱節點)的負載。
- 支援 Hive 資料類型,包括 DateTime、decimal 和複雜資料類型(struct、list、map 和 union)。
- 不同RecordReader進程同時讀取同一個檔案。
- 能夠在不掃描標記的情況下分割文件。
- 根據檔案頁腳中的信息估計讀取/寫入進程的最大可能堆記憶體分配。
- 元資料以 Protocol Buffers 二進位序列化格式存儲,允許新增和刪除欄位。
ORC 將字串集合儲存在單一檔案中,並且在集合中,字串資料以列式格式儲存。
ORC 檔案在檔案的頁腳中儲存稱為條帶的行群組和支援資訊。 文件末端的 Postscript 包含壓縮參數和壓縮頁腳的大小。
預設條帶大小為 250 MB。 由於條帶如此之大,從 HDFS 讀取資料的效率更高:在大的連續區塊中。
文件頁腳記錄了文件中的泳道清單、每泳道的行數以及每列的資料類型。 每列的計數、最小值、最大值和總和的結果值也寫在那裡。
片段的頁腳包含流位置的目錄。
掃描表時使用行資料。
索引資料包括每列的最小值和最大值以及每列中行的位置。 ORC 索引僅用於選擇條帶和行組,而不用於回答查詢。
不同文件格式的比較
Avro 與 Parquet 相比
- Avro 是一種行存儲格式,而 Parquet 將資料儲存在列中。
- Parquet 更適合分析查詢,這意味著讀取操作和查詢資料比寫入更有效率。
- Avro 中的寫入操作比 Parquet 中的執行效率更高。
- Avro 更成熟地處理電路演進。 Parquet僅支援模式添加,而Avro支援多功能演化,即添加或更改列。
- Parquet 非常適合查詢多個清單中的列子集。 Avro 適用於我們查詢所有欄位的 ETL 操作。
ORC 與 Parquet
- Parquet 可以更好地儲存巢狀資料。
- ORC 比較適合謂詞下推。
- ORC 支援 ACID 屬性。
- ORC 可以更好地壓縮資料。
關於該主題還可以閱讀什麼:
來源: www.habr.com