天天看點

「行業資訊」存儲優化技術Apache Parquet簡介

作者:譽天教育ICT認證教育訓練

随着為分析而生成和存儲的資料量以不斷增長的速度增長,開發人員正在盡可能從各個角度優化性能并降低成本。在PB的規模上,即使是邊際收益和優化也可以為公司節省數百萬美元的存儲和處理資料的硬體成本。

Apache Parquet就是這些優化技術的一個例子。在本文中,你将了解什麼是Parquet,它是如何工作的,以及許多公司和項目如何将Parquet用作其架構中的關鍵元件。

什麼是Apache Parquet?

Parquet是Twitter和Cloudera在捐贈給Apache基金會之前開發的一種面向列的開源存儲格式。Parquet旨在改進Hadoop現有的存儲格式,包括各種性能名額,如通過壓縮減少磁盤上的資料大小和加快分析查詢的讀取速度。

随着時間的推移,越來越多的項目和公司采用了Parquet,它已經成為那些希望讓使用者更容易導入和導出資料的項目的通用交換格式。

采用Parquet可以讓新使用者更容易地遷移或采用新工具,同時對其工作流程的幹擾最小,是以對使用者和希望為其産品擷取新使用者的公司都有好處。

Apache Parquet技術突破

Parquet采用了許多創新技術,以提供出色的性能。在深入讨論細節之前,我們可以将結果與另一種用于存儲資料的檔案格式進行比較:簡單的CSV(逗号分隔值檔案)。

當将1 TB的CSV檔案轉換為Parquet時,Databricks中的一些數字顯示以下結果:

——檔案大小減少到130 GB,減少了87%。

——查詢運作時間從236秒減少到6.78秒,快了34倍。

——為查詢掃描的資料量從1.15TB降至2.51GB,減少了99%。

——成本從5.75美元降至0.01美元,降低了99.7%。

那麼,是什麼秘密使Parquet的性能比CSV和其他檔案格式好得多呢?讓我們來看看Parquet背後的一些關鍵概念和功能:

運作長度和字典編碼——Parquet能夠簡單地列出該值在一列中出現的次數,而不是将同一值多次存儲在磁盤上,進而節省了頻繁重複值的資料集的大量空間。這方面的一個例子是CPU監控,其中每個值的使用率都在1-100範圍内。

記錄切碎群組裝——Apache Parquet借用了谷歌Dremel論文中的一項技術,該技術允許Parquet将嵌套資料結構映射到基于列的布局。這樣做的好處是,開發人員仍然可以以更自然的嵌套樣式處理資料,同時獲得基于列的資料結構的性能優勢。

豐富的中繼資料——Under the hood Parquet跟蹤大量的中繼資料,這是實作上述政策所必需的。Parquet資料分為行組、列塊和頁。檔案可以包含多個行組,并且這些行組中的每一個都隻包含一個列塊。每個列塊包含一頁或多頁資料。所有這些複雜性都被抽象了,開發人員不必擔心。

所有這些特性共同作用,賦予了Parquet的性能特點。簡單來說,就是提供中繼資料來優化查詢,以減少計算資源需求,同時減少重複資料點的數量,進而降低存儲成本。這會加快查詢速度,減少存儲需求。

在雲計算時代,Parquet尤其有用,因為許多雲服務都是根據處理和掃描的資料量收費的。因為Parquet保留了關于資料結構的額外中繼資料,是以它能夠顯著減少被掃描的不必要資料量,是以,你隻需擷取所需的資料,而不必付費掃描、處理和分析完成查詢所不需要的資料。

使用Apache Parquet的公司和項目

許多項目支援将Parquet作為導入和導出資料的檔案格式,并在内部使用Parquet進行資料存儲。以下是其中的一小部分(以及它們的用途):

Hadoop是一個基于谷歌MapReduce論文的大資料處理工具。Parquet最初設計為用于Hadoop的檔案格式。

Apache Iceberg試圖通過允許Spark、Trino和Flink等流處理工具從同一存儲後端查詢和處理所有資料,使普通關系資料庫表的簡單性在大資料規模下發揮作用。

Delta Lake是一個用于建構資料湖式架構的開源存儲架構。Delta Lake與Spark、PrestoDB、Flink和Trino等通用計算工具內建,使處理和存儲資料變得簡單。

Apache Spark是一個用于處理大量資料的分析引擎。除了Pandas API等進階工具外,它還允許使用SQL進行資料處理。

Apache Parquet和InfluxDB

InfluxDB時間序列資料庫是另一個嚴重依賴Parquet的項目,專門用于InfluxD的新的列式存儲引擎IOx。InluxDB使用Parquet使用對象存儲持久存儲資料。這允許在熱存儲層和冷存儲層之間高效地移動資料,進而允許InluxDB為使用者提供更好的性能,同時降低存儲成本。與InfluxDB之前的疊代相比,它還提供了更好的資料壓縮比。

InluxDB與Parquet一起工作,将發送到InluxD的資料以行協定格式映射,将行協定中定義的标記、字段和時間戳映射到Parquet中的列,然後可以使用基于該字段值的資料類型的最佳壓縮算法來壓縮這些列,按時間範圍分割拼花檔案,這樣您隻需以最少的拼花檔案通路量擷取所需的時間序列資料。當從Parquet檔案中提取資料時,使用ApacheArrow格式将其加載到記憶體中,該格式也是基于列的,是以産生的性能開銷最小。

總結

在大規模處理資料時,每一點效率的提升都會為公司和使用者帶來重大利益。Parquet隻是衆多緻力于提高效率的項目之一。也許你不會作為開發人員直接與Parquet進行互動,但你經常使用的一些工具很有可能是在幕後使用Parquet。