Hive的压缩
HQL语句最终会被编译成Hadoop的Mapreduce job,因此hive的压缩设置,实际上就是对底层MR在处理数据时的压缩设置。
hive在map阶段的压缩
map阶段的设置, 就是在MapReduce的shuffle阶段对mapper产生的中间结果数据压缩 。 在这个阶段,优先选择一个低CPU开销的算法。
<!-- 指定要不要开启中间压缩 -->
<property>
<name>hive.exec.compress.intermediate</name>
<value>false</value>
</property>
<!-- 指定中间压缩想要使用的压缩编码器(类文件) -->
<property>
<name>hive.intermediate.compression.codec</name>
<value/>
</property>
<!-- 指定压缩编码器中的那种压缩类型 -->
<property>
<name>hive.intermediate.compression.type</name>
<value/>
</property>
hive在reduce阶段的压缩
即对reduce阶段的输出数据进行压缩设置。
<!-- 指定要不要开启最终压缩。 -->
<property>
<name>hive.exec.compress.output</name>
<value>false</value>
</property>
注意:如果开启,默认使用中间压缩配置的压缩编码器和压缩类型。
常用压缩格式
压缩格式 | 压缩比 | 压缩速度 | 需要安装 | 支持切分 |
---|---|---|---|---|
bzip2 | 最高 | 慢 | 否 | 是 |
gzip | 很高 | 比较快 | 否 | 否 |
snappy | 比较高 | 很快 | 是 | 否 |
lzo | 比较高 | 很快 | 是 | 是(需要建立索引) |
压缩编码器:
压缩格式 | 压缩编码器 |
---|---|
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(中间输出使用) |
案例测试:
-- 开启中间压缩机制
hive (mydb)> set hive.exec.compress.intermediate=true;
-- 设置中间压缩编码器
hive (mydb)> set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.DefaultCodec;
-- 设置压缩类型
hive (mydb)> set hive.intermediate.compression.type=RECORD;
-- 开启reduce端的压缩机制
hive (mydb)> set hive.exec.compress.output=true;
create external table if not exists stocks_seq_2 (
exchange1 string,
symbol string,
ymd string,
price_open float,
price_high float,
price_low float,
price_close float,
volume int,
price_adj_close float
)
row format delimited
fields terminated by ','
stored as sequencefile;
--动态加载数据:
insert into stocks_seq_2 select * from stocks_1;
验证数据是否变小了..........