大數據文件格式對比 Parquet Avro ORC 特點 格式 優劣勢

背景


在大數據環境中,有各種各樣的數據格式,每個格式各有優缺點。如何使用它爲一個特定的用例和特定的數據管道。數據可以存儲爲可讀的格式如JSON或CSV文件,但這並不意味着實際存儲數據的最佳方式。

有三個文件格式用於Hadoop集羣:

  • Optimized Row Columnar (ORC)
  • Avro
  • Parquet

Apache Avro

Avro是一種遠程過程調用和數據序列化框架,是在Apache的Hadoop項目之內開發的。它使用JSON來定義數據類型和通訊協議,使用壓縮二進制格式來序列化數據。它主要用於Hadoop,它可以爲持久化數據提供一種序列化格式,併爲Hadoop節點間及從客戶端程序到Hadoop服務的通訊提供一種電報格式。

  • 基於行的(存儲數據行):基於行的數據庫是最適合write-heavy事務性工作負載
  • 支持序列化
  • 快速二進制格式
  • 支持塊壓縮和可分離
  • 支持schema更新
  • 存儲模式的頭文件數據是自描述

Apache Parquet

源自於google Dremel系統,Parquet相當於Google Dremel中的數據存儲引擎,而Apache頂級開源項目Drill正是Dremel的開源實現。

Apache Parquet 最初的設計動機是存儲嵌套式數據,比如Protocolbuffer,thrift,json等,將這類數據存儲成列式格式,以方便對其高效壓縮和編碼,且使用更少的IO操作取出需要的數據,這也是Parquet相比於ORC的優勢,它能夠透明地將Protobuf和thrift類型的數據進行列式存儲,在Protobuf和thrift被廣泛使用的今天,與parquet進行集成,是一件非容易和自然的事情。 除了上述優勢外,相比於ORC, Parquet沒有太多其他可圈可點的地方,比如它不支持update操作(數據寫成後不可修改),不支持ACID等。

  • 基於列(在列中存儲數據):用於數據存儲是包含大量讀取操作的優化分析工作負載
  • 與Snappy的壓縮壓縮率高(75%)
  • 只需要列將獲取/讀(減少磁盤I / O)
  • 可以使用Avro API和Avro讀寫模式
  • 支持謂詞下推(減少磁盤I / O的成本)

Apache ORC

ORC(OptimizedRC File)存儲源自於RC(RecordColumnar File)這種存儲格式,RC是一種列式存儲引擎,對schema演化(修改schema需要重新生成數據)支持較差,而ORC是對RC改進,但它仍對schema演化支持較差,主要是在壓縮編碼,查詢性能方面做了優化。RC/ORC最初是在Hive中得到使用,最後發展勢頭不錯,獨立成一個單獨的項目。Hive 1.x版本對事務和update操作的支持,便是基於ORC實現的(其他存儲格式暫不支持)。ORC發展到今天,已經具備一些非常高級的feature,比如支持update操作,支持ACID,支持struct,array複雜類型。你可以使用複雜類型構建一個類似於parquet的嵌套式數據架構,但當層數非常多時,寫起來非常麻煩和複雜,而parquet提供的schema表達方式更容易表示出多級嵌套的數據類型。

  • 用於(在列中存儲數據):用於數據存儲是包含大量讀取操作的優化分析工作負載
  • 高壓縮率(ZLIB)
  • 支持Hive(datetime、小數和結構等複雜類型,列表,地圖,和聯盟)
  • 元數據使用協議緩衝區存儲,允許添加和刪除字段
  • HiveQL兼容
  • 支持序列化

總結


相同點

  • 基於Hadoop文件系統優化出的存儲結構
  • 提供高效的壓縮
  • 二進制存儲格式
  • 文件可分割,具有很強的伸縮性和並行處理能力
  • 使用schema進行自我描述
  • 屬於線上格式,可以在Hadoop節點之間傳遞數據

不同點

  • 行式存儲or列式存儲:Parquet和ORC都以列的形式存儲數據,而Avro以基於行的格式存儲數據。

  • 就其本質而言,面向列的數據存儲針對讀取繁重的分析工作負載進行了優化,而基於行的數據庫最適合於大量寫入的事務性工作負載。

  • 壓縮率:基於列的存儲區Parquet和ORC提供的壓縮率高於基於行的Avro格式。

  • 可兼容的平臺:ORC常用於Hive、Presto;
    Parquet常用於Impala、Drill、Spark、Arrow;
    Avro常用於Kafka、Druid。

Ref

  1. https://blog.csdn.net/OiteBody/article/details/85055574
  2. https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosing-the-right-tool-for-the-right-job-79c9f56914a8
  3. https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosing-the-right-tool-for-the-right-job-79c9f56914a8
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章