Hive的文件压缩格式应该在不同的应用场景下使用不同的方式,例如cpu资源足够,但是硬盘容量不足时,可以使用bzip2方式。也跟文件格式有关,对列式存储的文件进行压缩,会得到一个可观的压缩比例,我们在上一篇文章中讲解了 Hive文件格式的对比。
一、对比
我们来看下不同的压缩方式的对比:
1 | /* |
二、配置
1.配置文件(永久有效)
1 | [hadoop@hadoop004 hadoop]$ vim core-site.xml |
1 | [hadoop@hadoop004 hadoop]$ vim mapred-site.xml |
1.1 先看看snappy的效果
1 | [hadoop@hadoop004 data]$ hdfs dfs -du -s -h /user/hive/warehouse/page_views/page_views.dat |
1 | hive> SET hive.exec.compress.output; |
因为我在mapred-site.xml里面设置默认的解压缩格式为snappy
1 | hive> |
1 | [hadoop@hadoop004 data]$ hdfs dfs -ls /user/hive/warehouse/page_views_snappy |
1.2 下面采用bzip2瞅瞅
1 | hive> |
1 | hive> create table page_views_bzip2 as select * from page_views; |
1 | [hadoop@hadoop004 hadoop]$ hdfs dfs -ls /user/hive/warehouse/page_views_bzip2 |
1.3 再来看看gzip的
1 | hive> |
1 | hive> |
1 | [hadoop@hadoop004 hadoop]$ hdfs dfs -ls /user/hive/warehouse/page_views_gzip |
2.配置参数(当前session有效)
2.1. Hive中间数据压缩
hive.exec.compress.intermediate:默认该值为false,设置为true为激活中间数据压缩功能。HiveQL语句最终会被编译成Hadoop的Mapreduce job,开启Hive的中间数据压缩功能,就是在MapReduce的shuffle阶段对mapper产生的中间结果数据压缩。在这个阶段,优先选择一个低CPU开销的算法。
mapred.map.output.compression.codec:该参数是具体的压缩算法的配置参数,SnappyCodec比较适合在这种场景中编解码器,该算法会带来很好的压缩性能和较低的CPU开销。设置如下:
1 | set hive.exec.compress.intermediate=true; |
2.2. Hive最终数据压缩
hive.exec.compress.output:用户可以对最终生成的Hive表的数据通常也需要压缩。该参数控制这一功能的激活与禁用,设置为true来声明将结果文件进行压缩。
mapred.output.compression.codec:将hive.exec.compress.output参数设置成true后,然后选择一个合适的编解码器,如选择SnappyCodec。设置如下:
1 | set hive.exec.compress.output=true; |
2.3. 建表:
Text:
1 | ${建表语句} |
Sequence
1 | ${建表语句} |
RCFile
1 |
|
Parquet
1 | set parquet.compression=snappy; |
1 | create table mytable(a int,b int) stored as parquet tblproperties('parquet.compression'='snappy'); |
1 | alter table mytable set tblproperties ('parquet.compression'='snappy'); |
Trobule is Friend.
书山有路勤为径,学海无涯苦作舟。
欢迎关注微信公众号:【程序员写书】
喜欢宠物的朋友可以关注:【电巴克宠物Pets】
一起学习,一起进步。
