隨著大數(shù)據(jù)時代的來臨,數(shù)據(jù)體量越來越大,處理這些數(shù)據(jù)會越來越受到網(wǎng)絡IO的限制。中培偉業(yè)《大數(shù)據(jù)平臺搭建與高性能計算最佳實戰(zhàn)》培訓專家鐘老師指出,為了盡可能多的處理更多的數(shù)據(jù)我們必須使用壓縮。那么壓縮在Hadoop里面是不是所有格式都適用呢?它都有哪些性能呢?鐘老師在這里進行了介紹。
鐘老師指出,壓縮在sqoop里面可以做,在hive和impala里面也可以做。那么什么情況下我們會用壓縮呢?通常在數(shù)據(jù)量非常大,我們通過壓縮去減小數(shù)據(jù)量,從而達到將來去使用數(shù)據(jù)的時候,減少數(shù)據(jù)傳輸IO的情況下去使用。壓縮對于性能的提升以及存儲效率的提高也有作用。
一、數(shù)據(jù)壓縮
每種文件格式都支持壓縮,壓縮將減少磁盤空間的占用。但是壓縮本身會帶來CPU的一些開銷,所以壓縮需要在CPU時間和帶寬/存儲空間之間進行權(quán)衡。比如:
(1)有些算法會花費很長的時間,但節(jié)省更多的空間。
(2)有些算法更快,但節(jié)省的空間有限。
這個怎么來理解呢?我們打個比方,假如說1T的數(shù)據(jù)壓縮成100G,可能需要10分鐘。如果壓縮成500G可能需要1分鐘。請問你選擇那種方式?所以我們就需要在CPU時間和帶寬之間進行一個權(quán)衡,當然這里不存在哪種方式的好壞,只是我們根據(jù)自己使用的需求去選擇。
另外,壓縮對性能很有好處:很多Hadoop作業(yè)是受IO限制的,使用壓縮可以每個IO操作處理更多的數(shù)據(jù),壓縮也可以改進網(wǎng)絡傳輸?shù)男阅堋?/p>
二、壓縮Codecs
壓縮算法的實現(xiàn)被稱為codec,是Compressor/Decompressor的簡寫。很多codecs在Hadoop中很常用,每種都有不同的性能特性。但是,不是所有的Hadoop工具都是跟所有codecs兼容的。Hadoop中常用的壓縮算法有bzip2、gzip、lzo、snappy,其中l(wèi)zo、snappy需要操作系統(tǒng)安裝native庫才可以支持。
在這里我們看一下不同壓縮工具的性能:
Hadoop--Bzip2和GZIP是比較消耗CPU的,壓縮比最高,GZIP不能被分塊并行的處理;Snappy和LZO差不多,稍微勝出一點,CPU消耗的比GZIP少。通常情況下,想在CPU和IO之間取得平衡的話,用Snappy和LZO比較常見一些。這里我重點推薦使用Snappy,因為它可以提供很好地壓縮性能,而且壓縮的數(shù)據(jù)是可以分片的,對于后期的運行處理有很大的作用。
另外要注意:對于熱數(shù)據(jù),速度更重要,1秒壓縮40%的數(shù)據(jù)比10秒壓縮80%的數(shù)據(jù)更好。
三、Sqoop使用壓縮
Sqoop使用--compression-codec標志
四、Impala和Hive使用壓縮
Impala和Hive使用壓縮,需要我們在創(chuàng)建表的語法中去指定。可能對于不同的壓縮而言,我們指定的屬性和語法會有不同。