HADOOP MAPREDUCE(13):Hadoop資料壓縮
1 概述
1)壓縮的好處和壞處
壓縮的優點:以減少磁碟IO、減少磁碟儲存空間。
壓縮的缺點:增加CPU開銷。
2)壓縮原則
(1)運算密集型的Job,少用壓縮
(2)IO密集型的Job,多用壓縮
2 MR支援的壓縮編碼
1)壓縮演算法對比介紹
壓縮格式 |
Hadoop自帶? |
演算法 |
副檔名 |
是否可切片 |
換成壓縮格式後,原來的程式是否需要修改 |
DEFLATE |
是,直接使用 |
DEFLATE |
.deflate |
否 |
和文字處理一樣,不需要修改 |
Gzip |
是,直接使用 |
DEFLATE |
.gz |
否 |
和文字處理一樣,不需要修改 |
bzip2 |
是,直接使用 |
bzip2 |
.bz2 |
是 |
和文字處理一樣,不需要修改 |
LZO |
否,需要安裝 |
LZO |
.lzo |
是 |
需要建索引,還需要指定輸入格式 |
Snappy |
是,直接使用 |
Snappy |
.snappy |
否 |
和文字處理一樣,不需要修改 |
2)壓縮效能的比較
壓縮演算法 |
原始檔案大小 |
壓縮檔案大小 |
壓縮速度 |
解壓速度 |
gzip |
8.3GB |
1.8GB |
17.5MB/s |
58MB/s |
bzip2 |
8.3GB |
1.1GB |
2.4MB/s |
9.5MB/s |
LZO |
8.3GB |
2.9GB |
49.3MB/s |
74.6MB/s |
http://google.github.io/snappy/
Snappy is a compression/decompression library. It does not aim for maximum compression, or compatibility with any other compression library; instead, it aims for very high speedsand reasonable compression. For instance, compared to the fastest mode of zlib, Snappy is an order of magnitude faster for most inputs, but the resulting compressed files are anywhere from 20% to 100% bigger.On a single core of a Core i7 processor in 64-bit mode, Snappy compressesat about 250 MB/sec or more anddecompressesat about500 MB/sec or more.
3 壓縮方式選擇
壓縮方式選擇時重點考慮:壓縮/解壓縮速度、壓縮率(壓縮後儲存大小)、壓縮後是否可以支援切片。
3.1 Gzip壓縮
優點:壓縮率比較高;
缺點:不支援Split;壓縮/解壓速度一般;
3.2 Bzip2壓縮
優點:壓縮率高;支援Split;
缺點:壓縮/解壓速度慢。
3.3 Lzo壓縮
優點:壓縮/解壓速度比較快;支援Split;
缺點:壓縮率一般;想支援切片需要額外建立索引。
3.4 Snappy壓縮
優點:壓縮和解壓縮速度快;
缺點:不支援Split;壓縮率一般;
3.5 壓縮位置選擇
壓縮可以在MapReduce作用的任意階段啟用。
4壓縮引數配置
1)為了支援多種壓縮/解壓縮演算法,Hadoop引入了編碼/解碼器
壓縮格式 |
對應的編碼/解碼器 |
DEFLATE |
org.apache.hadoop.io.compress.DefaultCodec |
gzip |
org.apache.hadoop.io.compress.GzipCodec |
bzip2 |
org.apache.hadoop.io.compress.BZip2Codec |
LZO |
com.hadoop.compression.lzo.LzopCodec |
Snappy |
org.apache.hadoop.io.compress.SnappyCodec |
2)要在Hadoop中啟用壓縮,可以配置如下引數
引數 |
預設值 |
階段 |
建議 |
io.compression.codecs (在core-site.xml中配置) |
無,這個需要在命令列輸入hadoopchecknative檢視 |
輸入壓縮 |
Hadoop使用副檔名判斷是否支援某種編解碼器 |
mapreduce.map.output.compress(在mapred-site.xml中配置) |
false |
mapper輸出 |
這個引數設為true啟用壓縮 |
mapreduce.map.output.compress.codec(在mapred-site.xml中配置) |
org.apache.hadoop.io.compress.DefaultCodec |
mapper輸出 |
企業多使用LZO或Snappy編解碼器在此階段壓縮資料 |
mapreduce.output.fileoutputformat.compress(在mapred-site.xml中配置) |
false |
reducer輸出 |
這個引數設為true啟用壓縮 |
mapreduce.output.fileoutputformat.compress.codec(在mapred-site.xml中配置) |
org.apache.hadoop.io.compress.DefaultCodec |
reducer輸出 |
使用標準工具或者編解碼器,如gzip和bzip2 |
本文來自部落格園,作者:秋華,轉載請註明原文連結:https://www.cnblogs.com/qiu-hua/p/15229080.html