Hadoop數據存儲orc與parquet格式的選擇

對於orc與parquet這兩種列式存儲格式,網上能找到大量的介紹以及對比,此處簡單總結一下:

orc VS parquet:

  • orc存儲壓縮率比parquet要高;

  • 一般來說,orc讀取效率比parquet要高;

  • parquet支持嵌套數據格式,orc原生不支持嵌套數據類型(但可通過複雜數據類型如map<k,v>間接實現,此處情況即對應第二條中的“特例”,影響性能);

  • parquet支持字段擴展,orc原生不支持字段擴展(但可手動重寫讀取方法實現,此處也對應第二條中的“特例”);

應用場景:

原始數據層:數據量大,統一通用化模型結構(無須嵌套數據格式,以一個String類型或map<string, string>的擴展字段進行存儲業務新增字段,程序讀取時自行解析),讀取方式多爲中間數據處理程序;——  orc

數據應用層:數據模型直接關聯到業務場景邏輯,需要字段可擴展性,需要嵌套數據結構(儘量以扁平式數據結構設計模型,少使用嵌套數據結構,可以更好的利用列式存儲性能),數據量較小或不考慮數據量存儲問題(已經是具體業務場景,相比原始數據,數據量應該是很小的,設計時保證“高內聚低耦合”)。—— parquet

總結:

使用扁平式數據結構設計模型(表),儘量避免嵌套數據結構,可以更好的利用列式存儲性能;模型設計適用於退化維度,犧牲空間設計全維度的模型來提高數據查詢效率(無須再進行join關聯維度表)。

*注:orc格式數據讀取時,兼容歷史數據字段(原生不支持字段擴展性),可先讀取數據,轉爲json,再合併數據,即可實現數據字段的兼容;

當hive加載orc格式數據源時:

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'

此時自定義讀取方法(兼容字段擴展性)OrcInputFormatNew()方法,提交jar至集羣,add jar 至class path,註冊udf函數。(未實踐)

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