比較 Apache Hadoop 資料儲存格式 - techwell

banq發表於2021-12-24

Apache Hadoop將資料儲存在 Hadoop 分散式檔案系統 (HDFS) 中。資料可以採用多種受支援的檔案格式。 

要比較它們,請詢問有關它們的屬性的一些問題:

  1. 查詢檔案格式有多容易?查詢時間不應產生太多延遲
  2. 序列化檔案格式有多容易?資料序列化不應產生太多延遲
  3. 檔案格式是否可拆分?資料在處理過程中被多次拆分
  4. 檔案格式是否支援壓縮? 

文字檔案

檔案被分成幾行。行尾用回車 (\r) 或換行 (\n) 表示。鍵是檔案中的位置,值是文字行。如果儲存在 HDFS 中的資料需要以文字格式(例如電子郵件)易於訪問,請使用文字檔案。

文字檔案是可拆分的。它們可能相對龐大,因為它們不支援塊壓縮,因此查詢可能不如其他一些格式有效。對於壓縮,請使用支援拆分的檔案級壓縮編解碼器,例如 BZip2。

 

序列檔案

序列檔案將資料按行儲存為二進位制鍵/值對。二進位制格式使其小於文字檔案。序列檔案是可拆分的。 

支援三種不同的序列檔案格式:

  • 未壓縮
  • 記錄壓縮——僅壓縮值
  • 塊壓縮——鍵和值都被壓縮

與文字格式相比的一個優點是序列檔案格式支援塊壓縮,或單獨壓縮 HDFS 塊,塊是資料的最小單位。塊壓縮可以拆分 MapReduce 處理中使用的資料。 

 

Avro 檔案

Avro 是一種緊湊、快速、基於行的二進位制資料格式。Avro 適合儲存複雜資料,因為它是一個基於模式的資料序列化系統。模式與資料一起編碼,因此 Avro 資料是自描述的。 

序列檔案可用於儲存複雜資料,但它不是自描述的,資料的複雜性必須用資料標記,這使得序列檔案的序列化和反序列化比 Avro 慢,用於複雜資料結構。單獨的模式更容易編碼和解碼。

Avro 還支援塊壓縮以簡化資料拆分。

 

Parquet檔案

Parquet 是一種二進位制列式儲存格式。不是儲存相鄰的行,而是將相鄰的資料列儲存在一起,這在大多數查詢都針對資料子集的情況下特別有用。僅獲取所需的列資料,因此比必須掃描資料行以查詢子集更有效。這也是一個優勢,因為列資料是相似的資料,壓縮相似的資料效率更高,儲存空間更小。

Parquet 可能不適合 MapReduce 處理,因為它使用了完整的資料集。Parquet 適用於 Apache Hive 對資料子集的查詢。

 

何時使用哪種檔案格式

除了文字檔案之外,所有常用的 Hadoop 儲存格式都是二進位制的。使用文字檔案格式進行簡單儲存,例如 CSV 和電子郵件。對 MapReduce 處理的資料使用序列檔案。將 Avro 用於複雜的資料結構。對子集查詢的資料使用 Parquet,例如 Hive 中的資料倉儲。

 

相關文章