Hadoop中最不容錯過的壓縮知識


  隨着大數據時代的來臨,數據體量越來越大,處理這些數據會越來越受到網絡IO的限制,爲了儘可能多的處理更多的數據我們必須使用壓縮。那麼壓縮在Hadoop裏面是不是所有格式都適用呢?它都有哪些性能呢?

壓縮在sqoop裏面可以做,在hive和impala裏面也可以做。那麼什麼情況下我們會用壓縮呢?通常在數據量非常大,我們通過壓縮去減小數據量,從而達到將來去使用數據的時候,減少數據傳輸IO的情況下去使用。壓縮對於性能的提升以及存儲效率的提高也有作用。

一、數據壓縮

每種文件格式都支持壓縮,壓縮將減少磁盤空間的佔用。但是壓縮本身會帶來CPU的一些開銷,所以壓縮需要在CPU時間和帶寬/存儲空間之間進行權衡。比如:

(1)有些算法會花費很長的時間,但節省更多的空間.

(2)有些算法更快,但節省的空間有限。

這個怎麼來理解呢?我們打個比方,假如說1T的數據壓縮成100G,可能需要10分鐘。如果壓縮成500G可能需要1分鐘。請問你選擇那種方式?所以我們就需要在CPU時間和帶寬之間進行一個權衡,當然這裏不存在哪種方式的好壞,只是我們根據自己使用的需求去選擇。

另外,壓縮對性能很有好處:很多Hadoop作業是受IO限制的,使用壓縮可以每個IO操作處理更多的數據,壓縮也可以改進網絡傳輸的性能。

二、壓縮Codecs

壓縮算法的實現被稱爲codec,是Compressor/Decompressor的簡寫。很多codecs在Hadoop中很常用,每種都有不同的性能特性。但是,不是所有的Hadoop工具都是跟所有codecs兼容的。Hadoop中常用的壓縮算法有bzip2、gzip、lzo、snappy,其中lzo、snappy需要操作系統安裝native庫纔可以支持。

在這裏我們看一下不同壓縮工具的性能:

wKiom1h13HXzX79SAABWfV8C9bs202.png-wh_50

Bzip2和GZIP是比較消耗CPU的,壓縮比最高,GZIP不能被分塊並行的處理;Snappy和LZO差不多,稍微勝出一點,CPU消耗的比GZIP少。通常情況下,想在CPU和IO之間取得平衡的話,用Snappy和LZO比較常見一些。這裏我重點推薦使用Snappy,因爲它可以提供很好地壓縮性能,而且壓縮的數據是可以分片的,對於後期的運行處理有很大的作用。

另外要注意:對於熱數據,速度更重要,1秒壓縮40%的數據比10秒壓縮80%的數據更好。

三、Sqoop使用壓縮

Sqoop使用--compression-codec標誌

示例:

--compression-codec
org.apache.hadoop.io.compress.SnappyCodec

四、Impala和Hive使用壓縮

Impala和Hive使用壓縮,需要我們在創建表的語法中去指定。可能對於不同的壓縮而言,我們指定的屬性和語法會有不同。

注意:Impala在內存裏查詢數據-壓縮和解壓縮都在內存

Impala示例:

wKioL1h13IuyA2L1AADgkDJ-Xus266.png-wh_50

建議大家平時多關注一些大數據的相關知識,不斷提升和改善自己的知識架構,我自己平時喜歡看“大數據cn”這個微信公衆號,裏面內容對於我而言很不錯,也推薦大家看看。


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