大數據列式存儲 Parquet 和 ORC 簡介

大數據列式存儲

背景

隨着大數據 Hadoop/Spark 生態的不斷髮展和成熟,TextFile、CSV這些文本格式存儲效率低,查詢速度慢,往往不能很好地滿足大數據系統中存儲和查詢的需求,列式存儲也在大數據社區逐漸興起到成熟。目前,使用比較廣泛的列式存儲主要是 Apache Parquet 和 Apache ORC,Parquet 由谷歌的 Dremel 發展而來,由Twitter 貢獻給社區,ORC 則是由 Hive 的 RC File 發展而來,從Hive項目中獨立出來,二者目前都是比較活躍的列式存儲項目。

什麼是列式存儲

傳統的數據編碼方式是以行爲單位進行,列式存儲則是將數據劃分成數據塊,每個數據塊內部按列的方式進行編碼存儲,通過使用列式存儲會有以下好處:

  • 存儲效率更高,因爲同一列的數據類型一致,編碼效率也會更高
  • 查詢效率更高,利用列式存儲的統計信息,可以跳過大量的數據,減少IO壓力

Parquet 和 ORC的基本對比

image

Parquet 和 ORC的編碼效率對比

什麼是編碼

列式存儲在存儲數據時,爲了提高壓縮效率,會進行一些編碼操作,如圖所示。

image

 

常見的編碼方式

  • Run-length encoding(RLE)
  • Dictionary
  • Bitpacking
  • Zigzag for signed

Parquet 和 ORC編碼對比

image

使用TPC數據集的測試結果

分別使用相同的 TPC 數據集進行測試,從壓縮效率上講,數據庫大小越小,壓縮效率越好。這裏 ORC 使用 Zlib 壓縮, Parquet 使用 Gzip 壓縮。

  • TPC-BB and TPC-DS Decimal 版本下,ORC 比 Parquet 佔用空間節省大約 10%;
  • TPC-DS Double版本下,Parquet 的使用的空間節省 2% 左右。

image TPC-DS(Decimal Version): https://github.com/cloudera/impala-tpcds-kit
TPC-DS(Double Version): https://github.com/hortonworks/hive-testbench
TPCx-BB: http://www.tpc.org/tpcx-bb/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章