1.什么是压缩及优劣?
2.HIVE中常见的压缩算法
<property> <name>io.compression.codecs</name> <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.BZip2Codec</value> </property>
hive (fdm_sor)> set io.compression.codecs; io.compression.codecs=org.apache.hadoop.io.compress.GzipCodec, org.apache.hadoop.io.compress.DefaultCodec, com.hadoop.compression.lzo.LzoCodec, com.hadoop.compression.lzo.LzopCodec, org.apache.hadoop.io.compress.BZip2Codec
压缩格式 | 对应的类 | 文件扩展名 | 是否支持多文件 | 文件可分割性 |
org.apache.hadoop.io.compress.DefaultCodec | .deflate | 不 | 不 | |
gzip | org.apache.hadoop.io.compress.GzipCodec | .gz | 不 | 不 |
bzip2 | org.apache.hadoop.io.compress.BZip2Codec | .bz2 | 不 | 是 |
LZO | com.hadoop.compression.lzo.LzopCodec | .lzo_deflate | 不 | 是 |
Lzop | com.hadoop.compression.lzo.LzopCodec; | .lzo | 不 | 是 |
三.HIVE中压缩算法性能分析
[robot~]hadoop fs -du h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201901 516.4 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201901/201901.txt 这是直接从linux本地load的文件到hdfs上,文件实际数据大小是516.4Mb
1.hive中不使用压缩,进行计算与存储
--1.无压缩算法下进行数据存储计算。 set hive.exec.compress.output=false; --默认就是false的 insert overwrite table t_fin_demo partition(staits_date ='201900') select name, id_type, idcard, org, loan_no, busi_type, busi_category, open_date, dure_date, loan_amount, happen_time, amout, due_amt, stat from t_fin_demo where staits_date ='201901'; 2.使用du -h命令查看hdfs上文件存储情况 [finance@master2-dev software]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900 271.0 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900/000000_0 271.0 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900/000001_0 4.7 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201900/000002_0 3.程序运行时间 Total MapReduce CPU Time Spent: 54 seconds 200 msec Time taken: 36.445 seconds
2.使用hive默认的压缩方式,hive存储的文件后缀是.deflate
1.使用deflate进行压缩 set hive.exec.compress.output=true; --true是开启压缩,默认是关闭的,如果开启后不指定压缩方式,默认使用defalte。 set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.DefaultCodec; insert overwrite table t_fin_demo partition(staits_date ='201904') select name, id_type, idcard, org, loan_no, busi_type, busi_category, open_date, dure_date, loan_amount, happen_time, amout, due_amt, stat from t_fin_demo where staits_date ='201901'; 2.查看数据存储和计算情况 [finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903 75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903/000000_0.deflate 75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903/000001_0.deflate 1.3 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201903/000002_0.deflate 3.程序耗时时间: Time taken: 54.659 seconds
3.使用gzip进行压缩,hive中文件后缀是.gz
1.使用Gzip进行压缩存储 set hive.exec.compress.output=true; set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec; insert overwrite table t_fin_demo partition(staits_date ='201904') select name, id_type, idcard, org, loan_no, busi_type, busi_category, open_date, dure_date, loan_amount, happen_time, amout, due_amt, stat from t_fin_demo where staits_date ='201901'; 2.使用du -h命令查看hdfs上文件存储情况 [finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904 75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904/000000_0.gz 75.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904/000001_0.gz 1.3 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201904/000002_0.gz 3.程序运行时间 Total MapReduce CPU Time Spent: 1 minutes 33 seconds 430 msec OK Time taken: 62.436 seconds
4.使用lzo压缩算法进行压缩,文件后缀是.lzo_deflate
1.使用lzo进行压缩存储 set hive.exec.compress.output=true; set mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzoCodec; insert overwrite table t_fin_demo partition(staits_date ='201905') select name, id_type, idcard, org, loan_no, busi_type, busi_category, open_date, dure_date, loan_amount, happen_time, amout, due_amt, stat from t_fin_demo where staits_date ='201901'; 2.使用du -h命令查看hdfs上文件存储情况 [finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905 121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905/000000_0.lzo_deflate 121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905/000001_0.lzo_deflate 2.1 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201905/000002_0.lzo_deflate 3.程序运行时间 Total MapReduce CPU Time Spent: 58 seconds 700 msec OK Time taken: 42.45 seconds
5.使用Lzop压缩方式,hive存储的文件后缀是.lzo
1.使用lzop进行压缩存储 set hive.exec.compress.output=true; set mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec; insert overwrite table t_fin_demo partition(staits_date ='201906') select name, id_type, idcard, org, loan_no, busi_type, busi_category, open_date, dure_date, loan_amount, happen_time, amout, due_amt, stat from t_fin_demo where staits_date ='201901'; 2.使用du -h命令查看hdfs上文件存储情况 [finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906 121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906/000000_0.lzo 121.9 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906/000001_0.lzo 2.1 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201906/000002_0.lzo 3.程序运行时间 Total MapReduce CPU Time Spent: 47 seconds 280 msec OK Time taken: 34.439 seconds
6.使用BZip2压缩方式,hive存储的文件后缀是.bz2
1.使用Bzip2进行压缩存储 set hive.exec.compress.output=true; set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.BZip2Codec; insert overwrite table t_fin_demo partition(staits_date ='201907') select name, id_type, idcard, org, loan_no, busi_type, busi_category, open_date, dure_date, loan_amount, happen_time, amout, due_amt, stat from t_fin_demo where staits_date ='201901'; 2.使用du -h命令查看hdfs上文件存储情况 [finance@master2-dev hadoop]$ hadoop fs -du -h /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907 52.5 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907/000000_0.bz2 52.5 M /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907/000001_0.bz2 935.2 K /user/finance/hive/warehouse/fdm_sor.db/t_fin_demo/staits_date=201907/000002_0.bz2 3.程序运行时间 Total MapReduce CPU Time Spent: 2 minutes 47 seconds 530 msec OK Time taken: 96.42 seconds
各种压缩算法综合分析
压缩方式 | 原文件大小 | 压缩后文件 | 运行时间 | 备注 |
不使用压缩 | 516.4Mb | 546.70Mb | 36.445s | |
defalte(默认压缩) | 516.4Mb | 153.16Mb | 54.659s | 压缩率高 |
lzo压缩 | 516.4Mb | 245.90Mb | 42.45s | LZO压缩和解压缩很快,但是压缩的文件较大 |
Lzop压缩 | 516.4Mb | 249.90Mb | 34.439s | LZOP压缩和解压缩很快,但是压缩的文件较大 |
gzip压缩 | 516.4Mb | 153.16Mb | 62.436s | GZip 和 BZip2压缩可以保证最小的压缩文件,但是过于消耗时间,非常不适合CPU型运算。 |
Bzip2压缩 | 516.4Mb | 106.00Mb | 96.42s | GZip 和 BZip2压缩可以保证最小的压缩文件,但是过于消耗时间,不适合CPU型运算。 |
综合上表可以看出,每种压缩算法都有自己的优缺点。具体使用哪种压缩取决于具体存储的数据格式与计算模式有关。具体压缩使用与原理参考后续博客。
作者:涤生手记
链接:https://hero78.blog.csdn.net/article/details/85766558
来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。