hive优化

--在Map-only的任务结束时合并小文件
SET hive.merge.mapfiles=TRUE;
--在Map-Reduce的任务结束时合并小文件
SET hive.merge.mapredfiles=TRUE;

set hive.map.aggr = true;
set hive.groupby.mapaggr.checkinterval = 100000;
--输入端的合并类
SET hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;

--设置有多少reducer来处理输出,这里设置1G由一个reducer输出,对于没有reducer的,这里将会失效
SET hive.exec.reducers.bytes.per.reducer=1000000000;
--设置reduce task的数量
SET mapred.reduce.tasks = 8;

--运行速度优化,对于小的数据量,则自动使用本地数据
set hive.exec.mode.local.auto=true
set hive.exec.mode.local.auto.input.files.max = 100;
set hive.exec.mode.local.auto.inputbytes.max = 134217728;	

--开启hive的并行运行
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number = 8;

--配置hive的严格模式(strict)和非严格模式(nostrict)
hive.mapred.mode=nonstrict

--设置mapreducer为本地模式(local)和集群模式(cluster)
set mapred.job.tracker=local

--配置动态分区为非严格模式(nostrict,可以指定变量)和严格模式(strict,必须是参数值)
set hive.exec.dynamic.partition.mode=nostrict
--配置最大分区数
set hive.exec.max.dynamic.partitions=1000
--配置每个MR上可创建的最大分区数
set hive.exec.max.dynamic.partitions.pernode=100

--配置hive的推测执行,如果要配置mapreduce的推测执行,则需要配置mapred.map.tasks.speculative.execution=true和mapred.reduce.tasks.speculative.execution=true
set hive.mapred.reduce.tasks.speculative.execution=true

-- 关闭掉Hive的自动join优化,这里我们手动指定,如果不指定可以开启自动优化
set hive.auto.convert.join = false;
set hive.ignore.mapjoin.hint = false;

-- 配合 /*+ MAPJOIN(b)*/ 使用,这表示只缓存b表,如果想缓存多张表,那么可以用/*+ MAPJOIN(b,c)*/缓存b表和c表
-- SELECT 
-- 		/*+ MAPJOIN(b)*/ 
-- 		a.id,a.name,b.score
-- FROM 
-- 	table_a a 
-- LEFT JOIN 
-- 	table_b b
-- ON a.id=b.stu_id
-- LEFT JOIN 
-- 	table_c c
-- ON a.id=c.stu_id

-- 开启数据倾斜优化
set hive.groupby.skewindata = true;	
set hive.skewjoin.key = 100000;
set hive.optimize.skewjoin = true;

--查看hive支持的压缩类型
set io.compression.codecs;

--开启hive中间压缩,对于hadoop job的是mapred.compress.map.output,并设置压缩为snappy压缩
set hive.exec.compress.intermediate=true;
mapred.map.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec

--开启hive的最终结果压缩,如果设置了开启压缩,那么需呀设置一个编解码器
--默认的编解码器是`org.apache.hadoop.io.compress.DefaultCodec`,这里设置成`org.apache.hadoop.io.compress.GzipCodec`。
--对于hadoop job的是mapred.output.compress
--hive支持GZIP、BZip2、Snappy、LZO
--其中BZip2压缩率最高,但是对cpu消耗比较高,所以速度慢;Gzip是cpu和存储的折中选择;snappy和lzo压缩率低,但是速度快,但是对cpu消耗小
--BZip2和LZO提供了块(Block)级别的压缩,gzip和snappy不支持块级别压缩
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;

--设置sequencefile为BLOCK,设置的参数可选为NONE、RECORD、BLOCK
set mapred.output.compression.type=BLOCK;

--配置hive启用归档文件
set hive.archive.enabled=true;
posted @ 2019-01-08 10:53  shenjie2017  阅读(381)  评论(0编辑  收藏  举报