2021年大数据Hive(九):Hive的数据压缩
全網最詳細的大數據Hive文章系列,強烈建議收藏加關注!
新文章都已經列出歷史文章目錄,幫助大家回顧前面的知識重點。
目錄
系列歷史文章
前言
Hive的數據壓縮
一、MR支持的壓縮編碼
二、壓縮配置參數
三、開啟Map輸出階段壓縮
1、開啟hive中間傳輸數據壓縮功能
2、開啟mapreduce中map輸出壓縮功能
3、設置mapreduce中map輸出數據的壓縮方式
4、執行查詢語句
四、開啟Reduce輸出階段壓縮
1、開啟hive最終輸出數據壓縮功能
2、開啟mapreduce最終輸出數據壓縮
3、設置mapreduce最終數據輸出壓縮方式
4、設置mapreduce最終數據輸出壓縮為塊壓縮
5、測試一下輸出結果是否是壓縮文件
系列歷史文章
2021年大數據Hive(十二):Hive綜合案例!!!
2021年大數據Hive(十一):Hive調優
2021年大數據Hive(十):Hive的數據存儲格式
2021年大數據Hive(九):Hive的數據壓縮
2021年大數據Hive(八):Hive自定義函數
2021年大數據Hive(七):Hive的開窗函數
2021年大數據Hive(六):Hive的表生成函數
2021年大數據Hive(五):Hive的內置函數(數學、字符串、日期、條件、轉換、行轉列)
2021年大數據Hive(四):Hive查詢語法
2021年大數據Hive(三):手把手教你如何吃透Hive數據庫和表操作(學會秒變數倉大佬)
2021年大數據Hive(二):Hive的三種安裝模式和MySQL搭配使用
2021年大數據Hive(一):Hive基本概念
前言
?2021大數據領域優質創作博客,帶你從入門到精通,該博客每天更新,逐漸完善大數據各個知識體系的文章,幫助大家更高效學習。
有對大數據感興趣的可以關注微信公眾號:三幫大數據
Hive的數據壓縮
在實際工作當中,hive當中處理的數據,一般都需要經過壓縮,可以使用壓縮來節省我們的MR處理的網絡帶寬
一、MR支持的壓縮編碼
| 壓縮格式 | 工具 | 算法 | 文件擴展名 | 是否可切分 |
| DEFAULT | 無 | DEFAULT | .deflate | 否 |
| Gzip | gzip | DEFAULT | .gz | 否 |
| bzip2 | bzip2 | bzip2 | .bz2 | 是 |
| LZO | lzop | LZO | .lzo | 否 |
| LZ4 | 無 | LZ4 | .lz4 | 否 |
| Snappy | 無 | Snappy | .snappy | 否 |
為了支持多種壓縮/解壓縮算法,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 |
| LZ4 | org.apache.hadoop.io.compress.Lz4Codec |
| Snappy | org.apache.hadoop.io.compress.SnappyCodec |
壓縮性能的比較
| 壓縮算法 | 原始文件大小 | 壓縮文件大小 | 壓縮速度 | 解壓速度 |
| 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 |
On a single core of a Core i7 processor in 64-bit mode, Snappy compresses?at about 250 MB/sec or more and?decompresses?at about?500 MB/sec or more.
二、壓縮配置參數
要在Hadoop中啟用壓縮,可以配置如下參數(mapred-site.xml文件中):
| 參數 | 默認值 | 階段 | 建議 |
| io.compression.codecs ?? (在core-site.xml中配置) | org.apache.hadoop.io.compress.DefaultCodec,?org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.BZip2Codec, org.apache.hadoop.io.compress.Lz4Codec | 輸入壓縮 | Hadoop使用文件擴展名判斷是否支持某種編解碼器 |
| mapreduce.map.output.compress | false | mapper輸出 | 這個參數設為true啟用壓縮 |
| mapreduce.map.output.compress.codec | org.apache.hadoop.io.compress.DefaultCodec | mapper輸出 | 使用LZO、LZ4或snappy編解碼器在此階段壓縮數據 |
| mapreduce.output.fileoutputformat.compress | false | reducer輸出 | 這個參數設為true啟用壓縮 |
| mapreduce.output.fileoutputformat.compress.codec | org.apache.hadoop.io.compress.?DefaultCodec | reducer輸出 | 使用標準工具或者編解碼器,如gzip和bzip2 |
| mapreduce.output.fileoutputformat.compress.type | RECORD | reducer輸出 | SequenceFile輸出使用的壓縮類型:NONE和BLOCK |
三、開啟Map輸出階段壓縮
開啟map輸出階段壓縮可以減少job中map和Reduce task間數據傳輸量。具體配置如下:
案例實操:
1、開啟hive中間傳輸數據壓縮功能
hive(default)>set hive.exec.compress.intermediate=true;
2、開啟mapreduce中map輸出壓縮功能
hive (default)>set mapreduce.map.output.compress=true;
3、設置mapreduce中map輸出數據的壓縮方式
hive (default)>set mapreduce.map.output.compress.codec=?org.apache.hadoop.io.compress.SnappyCodec;
4、執行查詢語句
select count(1)?from score;
四、開啟Reduce輸出階段壓縮
當Hive將輸出寫入到表中時,輸出內容同樣可以進行壓縮。屬性hive.exec.compress.output控制著這個功能。用戶可能需要保持默認設置文件中的默認值false,這樣默認的輸出就是非壓縮的純文本文件了。用戶可以通過在查詢語句或執行腳本中設置這個值為true,來開啟輸出結果壓縮功能。
案例實操:
1、開啟hive最終輸出數據壓縮功能
set?hive.exec.compress.output=true;
2、開啟mapreduce最終輸出數據壓縮
set?mapreduce.output.fileoutputformat.compress=true;
3、設置mapreduce最終數據輸出壓縮方式
set?mapreduce.output.fileoutputformat.compress.codec =?org.apache.hadoop.io.compress.SnappyCodec;
4、設置mapreduce最終數據輸出壓縮為塊壓縮
set?mapreduce.output.fileoutputformat.compress.type=BLOCK;
5、測試一下輸出結果是否是壓縮文件
insert?overwrite local?directory '/export/data/exporthive/compress'?select?*?from?score distribute by?sid sort by?sscore desc;
- 📢博客主頁:https://lansonli.blog.csdn.net
- 📢歡迎點贊 👍 收藏 ?留言 📝 如有錯誤敬請指正!
- 📢本文由 Lansonli 原創,首發于 CSDN博客🙉
- 📢大數據系列文章會每天更新,停下休息的時候不要忘了別人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活?
總結
以上是生活随笔為你收集整理的2021年大数据Hive(九):Hive的数据压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年大数据Hive(八):Hive
- 下一篇: 女友问粉丝过万如何庆祝,我发万字长文《保