hive优化,
1、环境方面:服务器配置、容器的配置、环境搭建
2、具体的软件配置参数:
3、代码级别的优化:
目录
1、环境方面:服务器配置、容器的配置、环境搭建2、具体的软件配置参数:3、代码级别的优化:
2、join
3、limit的优化:
4、本地模式:
5、并行执行:
6、严格模式:
7、map和reduce 个数:
8、配置jvm重用:
9、数据倾斜:
10、索引
11、视图
12、分区本身就是hive的一种优化
13、分桶
1、explain和explain extended
explain extended select * from text1;
explain:只对hql语句进行解释。
explain extended:对hql语句进行解释,以及抽象表达式树的生成。
stage:相当于一个job,一个stage可以是limit、一个子查询、也是group by 等。
hive默认一次只执行一个stage,但是如果stage之间没有相互依赖,可以并行执行。
任务越复杂,hql代码复杂度越高,stage越多,运行时间就越长。
2、join
hive的查询永远是小表(结果集)驱动大表(结果集)。
hive的on的条件只支持等值连接。
注意hive是否配置普通join转换成map端的join、以及mapjoin小表文件大小的阀值。
3、limit的优化:
set hive.limit.row.max.size =100000
set hive.limit.optimize.limit.file=10
set hive.limit.optimize.enable=false(如果limit比较多的时候建议开启)
set hive.limit.optimize.fetch.max=50000
4、本地模式:
set hive.exec.mode.local.auto=false/true(建议开启)
set hive.exec.mode.local.auto.inputbytes.max=134217728
set hive.exec.mode.local.auto.input.files.max=4
5、并行执行:
set hive.exec.parallel = false/true(建议开启)
set hive.exec.parallel.thread.number=8
6、严格模式:
hive.mapred.mode=nonstrict/strict(建议开启)
7、map和reduce 个数:
不是个数越多就越好,也不是越少越好。
将小文件合并处理(输入类设置成:CombineTextInputFormat)(在文件级别就将小文件合并成大文件,
再上传到hdfs上)
mapred.max.split.size=256000000
mapred.min.split.size.per.node=1
mapred.min.split.size.per.rack=1
hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat
手动设置:
set mapred.map.tasks=2
reduce的个数:自动决定和手动设置
set mapred.reduce.tasks=-1
set hive.exec.reducers.max=1009
8、配置jvm重用:
mapreduce.job.jvm.numtasks=1 ###
mapred.job.reuse.jvm.num.tasks=1
9、数据倾斜:
由于key分布不均衡造成的数据往一个方向偏移的现象。
本身的数据倾斜。
join语句容易造成
count(distinct col)
group by
set hive.map.aggr=true
set hive.groupby.skewindata=false/true(建议开启)
set hive.optimize.skewjoin=false/true
10、索引
11、视图
12、分区本身就是hive的一种优化
13、分桶
mysql用自己的存储引擎,hive使用的hdfs来存储。hbase
mysql使用自己的执行引擎,而hive使用的是mapreduce来执行。
mysql使用环境几乎没有限制,hive是基于hadoop的。
mysql的低延迟,hive是高延迟。
mysql的handle的数据量较小,而hive的handle数据量较大。
mysql的可扩展性较低,而hive的扩展性较高。
mysql的数据存储格式要求严格,而hive对数据格式不做严格要求。
mysql可以允许局部数据插入、更新、删除等,而hive不支持局部数据的操作。