大資料生態圈中壓縮的使用
1.前言
在時下大資料場景中,雖然現在的機器的效能好,節點多,但是不代表,我們的資料就不需要做任何的壓縮就開始處理,所以我們還是會對資料做壓縮處理的,本文會詳細的介紹大資料中常見的壓縮格式,以及常見壓縮的對比,和使用場景;
2.常用壓縮格式介紹及對比
2.1 常見壓縮介紹
壓縮格式 | 檔案字尾 |
---|---|
gzip | .gz |
bzip2 | .bz2 |
LZO | .lzo |
Snappy | .snappy |
2.2 常用壓縮格式對比
2.2.1 測試準備
為了讓壓縮的對比更加明顯,這裡我準備一些測試的內容
- 機器環境效能
- 8 core i7 CPU
- 8GB memory
- 64 bit CentOS
- 1.4GB 資料
2.2.2 測試結果1(壓縮率)
通過上圖的壓縮率結果來看 bzip2>gzip>lzo>lz4>snappy, bzip2 的壓縮率是最高的
2.2.3 測試結果2( 壓縮&解壓縮 時間)
從上圖可以看出來, 從壓縮 解壓縮的時間角度來看 snapy>lz4>lzo>gzip>bzip2
3. 結論總結
前面我們針對 常見的壓縮格式,做了詳細的 測試,包括從 壓縮率 和 壓縮解壓縮 兩個方面來看,我們可以得出結論;
3.1 結論一
- 從壓縮率結果來看 bzip2>gzip>lzo>lz4>snappy
- 從壓縮 解壓縮的時間角度來看 snapy>lz4>lzo>gzip>bzip2
- 壓縮率 和 壓縮時間 剛好成反比
3.2 結論二(壓縮的優缺點)
- 優點
- 使用壓縮,可以減輕我們本地磁碟儲存的壓力
- 可以讓檔案在網路傳輸節約時間
- 缺點:
- 壓縮率越高, 對cpu的壓力越大
4. 壓縮的選用
我們知道了,壓縮的優缺點之後,那麼我們再大資料的應用場景中,如何針對不同的場景選用不同的壓縮格式呢??
這裡我們以MapReduce 舉例說明
從上圖 我們可以看出來,在MR應用中,主要在三個地方會用到資料壓縮 source
transformation
sink
資料來源,中間計算 最後的輸出,下面我們就針對這三個部分 來做對應的壓縮選型
4.1 資料來源
針對資料來源的壓縮,我們首先應該先 撇開壓縮率和壓縮時間 ,最應該先考慮 的是能不能被切片, 這意味著整個大資料計算中,能不能被平行計算,其次才是考慮 壓縮率,因為存在網路傳輸的過程,所以,在 source 階段 ,最優的 壓縮的 bzip2
4.2 中間計算
對於 計算層面上來說,我們應該從 解壓縮 這來考慮 選型, 因為 計算在中間過程中,我們不能耗費時間在 解壓縮和壓縮上 ,所以 中間計算上來看,我們應該考慮 Snappy
LZO
4.3 輸出儲存
在最後的節點我們應該考慮 我們這裡的資料,是直接儲存在 檔案系統,還是 作為 下一次的輸入接著計算,但是無論 以上兩種 的哪種情況,其實都是應該考慮,壓縮率 高的作為我們的壓縮格式,因為這樣,可以減少伺服器的磁碟壓力,降低網路傳輸的時間,所以 可以使用bzip2
5.總結
以上是我對大資料生態圈中的壓縮,做的總結,當然我們在 選擇的時候,肯定是保持 儲存 和計算 都能達到 最優的速度,所有在不同的場景,我們應該做出相應的犧牲來 換取 平衡…