背景
在大數據環境中,有各種各樣的數據格式,每個格式各有優缺點。如何使用它爲一個特定的用例和特定的數據管道。數據可以存儲爲可讀的格式如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
- https://blog.csdn.net/OiteBody/article/details/85055574
- https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosing-the-right-tool-for-the-right-job-79c9f56914a8
- https://medium.com/ssense-tech/csv-vs-parquet-vs-avro-choosing-the-right-tool-for-the-right-job-79c9f56914a8