hive优化与源码

一、优化
1、查看执行计划Explain
1.查看简单的执行计划(常用)
	explain select xxx from xxx;
2.查看详细的执行计划
	explain extended select xxx from xxx;
3.语法
	explain 【extended】【dependency】【authorization】 query-sql
2、分区、分桶、指定存储文件格式、压缩格式
常用文件存储格式: orc+snappy\parquet+lzop\orc+lzop
3、动态分区
需要进行一些设置:
	set hive.exec.dynamic.partition=true;开启动态分区
	set hive.exec.dynamic.partition.mode=nonstrict;设置为非严格模式
	set hive.exec.max.dynamic.partitions=1000;所有mr节点的最大动态分区数
	set hive.exec.max.dynamic.partitions.pernode=100;单个mr节点的最大动态分区数
	set hive.exec.max.created.files=100000;整个mr任务可以创建的最大hdfs文件数
	set hive.error.on.empty.partition=false;设置当有空分区生成时是否要报错	
4、语法优化
一、针对单表查询的相关优化:
1.分区裁剪、列裁剪
2.group by
	默认情况Map阶段的同一个key数据会分发到同一个reduce,当一个key数据过多时发生数据倾斜。
	可以在Map端进行预聚合,有以下参数:
		set hive.map.aggr=true;是否在map端进行聚合,默认true
		set hive.groupby.mapaggr.checkinterval=100000;在map端进行聚合的数据量
		set hive.groupby.skewindate=false;是否在数据倾斜时进行负载均衡,默认false
3.vectorization(矢量计算)
	在计算scan、filter、aggregation时可以设置批处理(批量读取1-1024行),参数如下:
	set hive.vectorized.execution.enabled=true;默认值false
	set hive.vectorized.execution.reduce.enabled=true;
4.多重模式
	在有多条sql都是对同一张表进行扫描,只是逻辑不同时,可使用多重模式进行优化:
	列如:
		insert ... select xxx from a where a.xxx = 'xxx';
		...
		insert ... select xxx from a where a.xxx = 'xxx';
		可以修改为:
		from a insert 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值