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