標籤:style blog http java color 使用
常見的壓縮有:對中間結果壓縮、對輸出結果壓縮。
壓縮對比:
| 演算法 |
壓縮前/壓縮後 |
壓縮速度 |
解壓速度 |
| GZIP |
13.4% |
21MB/s |
118 MB/s |
| LZO |
20.5% |
135 MB/s |
410 MB/s |
| Snappy |
22.2% |
172 MB/s |
409 MB/s |
Snappy介紹:
Snappy 網站:http://code.google.com/p/snappy/
Snappy的前身是Zippy。雖然只是一個資料壓縮庫,它卻被Google用於許多內部項目程,其中就包括BigTable,MapReduce和RPC。Google宣稱它在這個庫本身及其演算法做了資料處理速度上的最佳化,作為代價,並沒有考慮輸出大小以及和其他類似工具的相容性問題。Snappy特地為64位x86處理器做了最佳化,在單個Intel Core i7處理器核心上能夠達到至少每秒250MB的壓縮速率和每秒500MB的解壓速率。
如果允許損失一些壓縮率的話,那麼可以達到更高的壓縮速度,雖然產生的壓縮檔可能會比其他庫的要大上20%至100%,但是,相比其他的壓縮庫,Snappy卻能夠在特定的壓縮率下擁有驚人的壓縮速度,“壓縮普通文字檔的速度是其他庫的1.5-1.7倍,HTML能達到2-4倍,但是對於JPEG、PNG以及其他的已壓縮的資料,壓縮速度不會有明顯改善”。
壓縮技術整合:
snappy-java-1.0.4.1.jar整合在:hadoop-2.0.0-cdh4.5.0\share\hadoop\各個子項目\lib下
core-site.xml
配置需要使用的壓縮類,多個使用逗號隔開;此處多配置了幾個實作類別。
<property> <name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Cod ec,org.apache.hadoop.io.compress.DeflateCodec, org.apache.hadoop.io.compress.SnappyCodec</value></property>
mapred-site.xml
<!--reduce階段都有效--><property> <name>mapred.output.compression.codec</name> <value>org.apache.hadoop.io.compress.DefaultCodec</value></property><!--map階段都有效--><property> <name>mapred.map.output.compression.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value></property><!--map階段是否壓縮--><property> <name>mapred.compress.map.output</name> <value>true</value></property><!--reduce階段是否壓縮--><property> <name>mapred.output.compress</name> <value>false</value></property><property> <name>mapred.output.compression.type</name> <value>BLOCK</value></property>
為什麼有時只選擇壓縮map輸出?
提高map到reduce之間傳輸資料的效能;
此種配置下,存在reduce上的資料就沒有壓縮的,即存放在HDFS上的資料是沒有壓縮的;
正常情況下:reduce也是需要壓縮的
如上的設定檔:既對hadoop有效,也對hive有效。
在生產環境中建議map和reduce端都進行壓縮。
如何設定只針對hive有效(針對單個視窗有效或者是配置到hive-site.xml中整體有效):
SET hive.exec.compress.output=true;SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;SET mapred.output.compression.type=BLOCK;