Hive调优

Hive调优,第1张

Hive调优 Hive调优 参数调优
#合并输入文件
	#执行Map前进行小文件合并,一个data_node节点上多个小文件合并,合并数由mapred.max.split.size限制的大小决定
	set hive.input.format = org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;
	#每个Map最大的输入大小
	set mapred.max.split.size = 512000000;
	#一个节点上split的至少的大小,决定了多个data_node上的文件是否需要合并
	set mapred.min.split.size.per.node = 256000000;
	#一个交换机下split的至少的大小,决定了多个交换机上的文件是否需要合并
	set mapred.min.split.size.per.rack = 256000000;
#合并输出文件
	#在Map-only的任务结束时合并小文件
	set hive.merge.mapfiles = true;
	#在Map-Reduce的任务结束时合并小文件
	set hive.merge.mapredfiles = true;
	#合并文件的大小
	set hive.merge.size.per.task = 256000000;
	#当输出文件的平均大小小于该值时,启动一个独立的map-reduce任务进行文件的merge
	set hive.merge.smallfiles.avgsize = 128000000;

#一般JVM参数可以是Yarn申请内存的80%,如果 
#Map JVM内存
set mapreduce.map.java.opts=-Xmx20480m;
#Map Yarn 申请内存
set mapreduce.map.memory.mb=4096;
#Reduce JVM内存
set mapreduce.reduce.java.opts=-Xmx20480m;
#Reduce Yarn 申请内存
set mapreduce.reduce.memory.mb=5120;
#AM Yarn 申请内存
set yarn.app.mapreduce.am.resource.mb=2000;
#AM JVM内存
set yarn.app.mapreduce.am.command-opts=-Xmx1524m;



#开启任务并行执行
set hive.exec.parallel = true;
#同一个sql允许并行任务的最大线程数
set hive.exec.parallel.thread.number = 8;
#存储临时Hive统计信息的方式
set hive.stats.dbclass=counter;

#开启Map输出阶段压缩
#开启map输出阶段压缩可以减少job中map和reduce task间数据传输量
	#开启hive中间传输数据压缩功能
	set hive.exec.compress.intermediate=true;
	#开启map输出压缩功能
	set mapreduce.map.output.compress = true;
	#设置map输出数据的压缩方式
	#set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
	set mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzopCodec;
#开启Reduce输出阶段压缩
#当Hive将输出写入到表中时,输出内容同样可以进行压缩。hive.exec.compress.output控制这个功能。默认此参数为false,默认输出的就是非压缩的纯文本文件。
	#开启hive最终输出数据压缩功能
	set hive.exec.compress.output = true;
	#开启mapreduce最终输出数据压缩
	set mapreduce.output.fileoutputformat.compress=true;
	#设置mapreduce最终数据输出压缩方式
	#set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
	set mapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec;
	#设置mapreduce最终数据输出压缩为块压缩
	set mapreduce.output.fileoutputformat.compress.compress.type=BLOCK;
	#set mapreduce.output.fileoutputformat.compress=true;
	#set mapred.output.compression.codec=com.hadoop.compression.lzo.LzopCodec;
	#set set mapred.output.compression.type=BLOCK;
#动态分区
	set hive.exec.dynamic.partition.mode = nonstrict;
	set hive.exec.dynamic.partition = true;
	#动态分区属性,全局可以创建的最大文件个数,比如2000个map表有60个分区 就会创建2000*60=120000>100000(默认值),会报错
	set hive.exec.max.created.files=1000000;	#默认100000 
#map-side join
	set hive.auto.convert.join = true;
	#设置小表的数据文件的大小,小于此值使用mapside
	set hive.mapjoin.smalltable.filesize = 10240000;
#顶层的聚合 *** 作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提高总体性能
	set hive.map.aggr = true;
#本地模式,尝试避免执行MapReduce在本地执行查询将数据查询显示出来
	set hive.exec.mode.local.auto=true; #Hive查询数据可能不全,只是一个节点上的数据,可供测试查询使用
	
#默认CombineHiveInputFormat不能识别LZO的索引文件,而将索引文件当作输入文件,更为严重的是,这会导致LZO文件无法切片。所以要读取LZO文件时加上如下参数
	set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;


写法调优
#谓词下推
#join时小表在左
#union all替代union
#行列裁剪表
#distribute by 分区字段(默认hash) sort by  排序字段 --> 代替order by
#多维分析函数的使用 --> 提高效率,节省资源,避免多次查询维度汇总数据
#数据量大时避免使用distinct

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5696060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存