大數據存儲格式選擇
大數據時代,存儲和壓縮數據的方式至關重要。為節省空間並確保數據完整性,我們採用了多種策略,包括不同的存儲格式和壓縮演算法。存儲格式主要有單行/列式存儲、混合行列式存儲,其中行式存儲適用於實時處理(OLTP),列式存儲擅長數據分析(OLAP),混合存儲則結合兩者特性。常見的存儲格式有Parquet(適合數據分析)、ORC(Hive特有)、TextFile(簡單但效率低)、SequenceFile(Hadoop API兼容)和AVRO(靈活且支持多種功能)。
壓縮格式的選擇同樣關鍵,常見的有Deflate、Snappy、ZLib、Gzip、Bzip2、LZ4和LZO等。壓縮比和速度是關鍵考慮因素:Bzip2提供最高壓縮比但速度慢,Snappy速度最快但壓縮率低;Gzip和ZLib適中,支持Hadoop native庫;LZO速度快且支持split,但需要額外安裝;LZ4和Deflater注重速度。
在數據分層中,ODS層(源數據層)傾向於使用高壓縮比的ZLIB、GZIP或BZIP2,而DW層(數據倉層)和DA層(數據應用層)由於查詢頻繁,適合選用解壓縮速度較快的Snappy。這樣,我們可以根據數據特性和需求,靈活選擇最優化的存儲和壓縮方案,以提升存儲效率和查詢性能。
2. 為什麼大數據存儲都喜歡使用 ORC 格式,因為快,小
ORC File,它的全名是Optimized Row Columnar (ORC) file,其實就是對RCFile做了一些優化。據官方文檔介紹,這種文件格式可以提供一種高效的方法來存儲Hive數據。它的設計目標是來克服Hive其他格式的缺陷。運用ORC File可以提高Hive的讀、寫以及處理數據的性能。
在工作中,用的最多的地方是在 Hive 中。我們的數據存儲格式使用的 ORC 。
存儲數據除了考慮安全性, 所佔空間 以及 查詢效率 是直接關繫到我們的業務的。數據量不壓縮,對於大數據團隊來說,集群的磁碟很容易不夠用。數據存進去,我們是要用的,業務方提了一個小需求,你的任務跑了大半個小時,顯然也是不合理的。
這些問題都可以解決掉,但並不是完全解決。
如果我的文章對您有幫助,歡迎關注、轉發。您的支持就是我更新的最大動力。
3. 大數據常用文件格式介紹
圖片看不見的話可以看我CSDN上的文章:
https://blog.csdn.net/u013332124/article/details/86423952
最近在做hdfs小文件合並的項目,涉及了一些文件格式的讀寫,比如avro、orc、parquet等。期間閱讀了一些資料,因此打算寫篇文章做個記錄。
這篇文章不會介紹如何對這些格式的文件進行讀寫,只會介紹一下它們各自的特點以及底層存儲的編碼格式 。
[圖片上傳失敗...(image-a5104a-1547368703623)]
使用sequencefile還可以將多個小文件合並到一個大文件中,通過key-value的形式組織起來,此時該sequencefile可以看做是一個小文件容器。
[圖片上傳失敗...(image-4d03a2-1547368703623)]
Parquet是一個基於列式存儲的文件格式,它將數據按列劃分進行存儲。Parquet官網上的文件格式介紹圖:
[圖片上傳失敗...(image-92770e-1547368703623)]
我們可以看出,parquet由幾個部分構成:
[圖片上傳失敗...(image-391e57-1547368703623)]
Orc也是一個列式存儲格式,產生自Apache Hive,用於降低Hadoop數據存儲空間和加速Hive查詢速度。
[圖片上傳失敗...(image-ba6160-1547368703623)]
目前列式存儲是大數據領域基本的優化項,無論是存儲還是查詢,列式存儲能做的優化都很多,看完上面對orc和parquet的文件結構介紹後,我們列式存儲的優化點做一個總結:
在壓縮方面 :
在查詢方面 :
就網上找到的一些數據來看,Orc的壓縮比會比Parquet的高一些,至於查詢性能,兩個應該不會差距太大。本人之前做過一個測試,在多數場景,hive on mr下,orc的查詢性能會更好一些。換成hive on spark後,parquet的性能更好一些
本文介紹的4種大數據存儲格式,2個是行式存儲,2個是列式存儲,但我們可以看到一個共同點:它們都是支持分割的。這是大數據文件結構體系中一個非常重要的特點, 因為可分割使一個文件可以被多個節點並發處理,提高數據的處理速度 。
另外,當前大數據的主要趨勢應該是使用列式存儲,目前我們公司已經逐步推進列式存儲的使用,本人也在hive上做過一些測試,在多個查詢場景下,無論是orc還是parquet的查詢速度都完爆text格式的, 差不多有4-8倍的性能提升 。另外,orc和parquet的壓縮比都能達到10比1的程度。因此,無論從節約資源和查詢性能考慮,在大多數情況下,選擇orc或者parquet作為文件存儲格式是更好的選擇。另外,spark sql的默認讀寫格式也是parquet。
當然,並不是說列式存儲已經一統天下了,大多時候我們還是要根據自己的使用場景來決定使用哪種存儲格式。
Sequencefile
https://blog.csdn.net/en_joker/article/details/79648861
https://stackoverflow.com/questions/11778681/advantages-of-sequence-file-over-hdfs-textfile
Avro和Sequencefile區別
https://stackoverflow.com/questions/24236803/difference-between-avrodata-file-and-sequence-file-with-respect-to-apache-sqoop
parquet
https://www.cnblogs.com/ITtangtang/p/7681019.html
Orc
https://www.cnblogs.com/ITtangtang/p/7677912.html
https://www.cnblogs.com/cxzdy/p/5910760.html
Orc和parquet的一些對比
https://blog.csdn.net/colorant/article/details/53699822
https://blog.csdn.net/yu616568/article/details/51188479