hive底层是MapReduce运行的。所以可以以MapReduce的方式进行对Hive优化。
一 map端的压缩:
set hive.exec.compress.intermediate=true;
set mapreduce.map.output.compress=true;
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec
# 设置压缩方式,我这里是用Snappy进行压缩的。
二:reduce端压缩:
set hive.exec.compress.output=true;
set mapreduce.output.fileoutputformat.compress=true;
set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
# 设置压缩方式,我这里是用Snappy进行压缩的。
set mapreduce.output.fileoutputformat.compress.type=BLOCK;
# 设置输出为块元素
三:存储格式修改:
存储格式使用的是orc,在创建表的时候使用,只有从另一张表中迁移来时在有效。
create table if not exists user(id int, name string)
row format
delimited fields
terminated by "\t"
stored as orc;
四:其他优化:
1:map端进行聚合:
set hive.map.aggr=true;
2:设置负载均衡:
set hive.groupby.skewindata=true;
3:map端进行小文件合并:
set hive.input.format=org.apache.hadoop.ql.io.CompresshiveInputFormat;