隨著大數據時代的來臨,數據體量越來越大,處理這些數據會越來越受到網絡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庫才可以支持。
在這里我們看一下不同壓縮工具的性能:
Hadoop--Bzip2和GZIP是比較消耗CPU的,壓縮比最高,GZIP不能被分塊并行的處理;Snappy和LZO差不多,稍微勝出一點,CPU消耗的比GZIP少。通常情況下,想在CPU和IO之間取得平衡的話,用Snappy和LZO比較常見一些。這里我重點推薦使用Snappy,因為它可以提供很好地壓縮性能,而且壓縮的數據是可以分片的,對于后期的運行處理有很大的作用。
另外要注意:對于熱數據,速度更重要,1秒壓縮40%的數據比10秒壓縮80%的數據更好。
三、Sqoop使用壓縮
Sqoop使用--compression-codec標志
四、Impala和Hive使用壓縮
Impala和Hive使用壓縮,需要我們在創建表的語法中去指定。可能對于不同的壓縮而言,我們指定的屬性和語法會有不同。