檔案壓縮主要有兩個好處,一是減少了儲存檔案所佔空間,另乙個就是為資料傳輸提速。在hadoop大資料的背景下這兩點尤為重要。
hadoop裡支援很多種壓縮格式:
deflate是同時使用了lz77演算法與哈夫曼編碼(huffman coding)的乙個無損資料壓縮演算法,源**可以在zlib庫中找到。gzip是以deflate演算法為基礎擴充套件出來的一種演算法。
壓縮演算法
原始檔案大小
壓縮後的檔案大小
壓縮速度
解壓縮速度
gzip
8.3gb
1.8gb
17.5mb/s
58mb/s
bzip2
8.3gb
1.1gb
2.4mb/s
9.5mb/s
lzo-bset
8.3gb
2gb4mb/s
60.6mb/s
lzo8.3gb
2.9gb
49.3mb/s
74.6mb/s
所有的壓縮演算法都是空間和時間的轉換,更快壓縮時間還是更小的壓縮比,可以通過引數來指定,-1意味著速度,-9意味著空間。拿gzip做個例子,下面就意味著更快速的壓縮:gzip -1 file
舉例乙個未壓縮的檔案有1gb大小,hdfs預設的block大小是64mb,那麼這個檔案就會被分為16個block作為mapreduce的輸入,每乙個單獨使用乙個map任務。若該檔案是已經使用gzip壓縮的呢,若分成16個塊,每個塊做成乙個輸入,顯然是不合適的,因為gzip壓縮流的隨即讀是不可能的。實際上,當mapreduce處理壓縮格式的檔案的時候它會認識到這是乙個gzip的壓縮檔案,而gzip又不支援隨即讀,它就會把16個塊分給乙個map去處理,這裡就會有很多非本地處理的map任務,整個過程耗費的時間就會相當長。
lzo壓縮格式也會是同樣的問題,但是通過使用hadoop lzo庫的索引工具以後,lzo就可以支援splittable。bzip2也是支援splittable的。
詳見hadoop-2.5.2-src原始碼中的fileinputformat類中的getsplits方法
if (issplitable(fs, path))
if (bytesremaining != 0)
} else
codec其實就是coder和decoder兩個單詞的詞頭組成的縮略詞。compressioncodec定義了壓縮和解壓介面,所以又叫編碼解碼器。為了支援多種壓縮/解壓縮演算法,hadoop引入了編碼/解碼器,如下表所示
壓縮格式
對應的編碼/解碼器
deflate
org.apache.hadoop.io.compress.defaultcodec
gzip
org.apache.hadoop.io.compress.gzipcodec
bzip
org.apache.hadoop.io.compress.bzip2codec
public class testcompress
/*** 壓縮方法
* @param filename 待壓縮的檔案路徑
* @param method 壓縮方法名
*/public static void compress(string filepath, string method)
throws classnotfoundexception, ioexception
/*** 解壓方法
* @param filename 待解壓的檔案
*/public static void decompres(string filepath) throws filenotfoundexception,
ioexception
// 獲取輸入流
inputstream cin = codec
.createinputstream(new fileinputstream(filepath));
// 輸出檔案
file fout = new file(filepath + ".decoded");
outputstream out = new fileoutputstream(fout);
ioutils.copybytes(cin, out, 1024 * 1024 * 5, false);
system.out.println("decompres success");
cin.close();
out.close();
}}
hadoop中的檔案壓縮
1 減少磁碟的儲存空間 2 減少磁碟io和網路io 3 加快資料傳輸速度 磁碟和網路 如果小檔案多明顯檔案傳輸會明顯降低 1 考慮檔案的壓縮效率 壓縮快慢 2 考慮檔案的壓縮比 解壓快慢 第一點好理解,壓縮的快肯定好 第二點是壓縮比,舉例現在有乙個10g的檔案,一種壓縮演算法能把他壓縮成1g,其他壓...
Hadoop中的壓縮和解壓縮
壓縮就是通過某種演算法,將原始的檔案變下,使原始的檔案變小。解壓就是將壓縮後的檔案變成原始檔案的過程。1.hadoop當中哪些過程需要用到壓縮和解壓?map端 壓縮後的原始檔案首先切成塊,然後再解壓作為輸入檔案輸入給map端,等map端將資料處理完成後然後再壓縮,放在硬碟中。shuffle過程 壓縮...
《卷積神經網路的壓縮與加速》概述
有四種常用方法 網路剪枝,模型量化,低秩估計,模型蒸餾。網路剪枝主要有下列幾種方法 filter level剪枝 通過刪除filter來減少通道數量 group level剪枝即kernel size縮小 如將33變成32,或者3 3變成固定形狀包含若干個0的新核 稀疏卷積的方法 fine grai...