3.6 Hive优化

Hive 优化

好多优化要基于底层

Hadoop—JVM

把HiveSQL 当做Mapreduce程序去优化


Fetch

hive-default.xml.template hive.fetch.task.conversion →
	默认more 如果 none那么每次执行select * from 都是执行MapReduce

本地模式

hive.exec.mode.local.auto=true

并行执行

set hive.exec.parallel=true; //打开任务并行执行

set hive.exec.parallel.thread.number=16; //同一个sql允许最大并行度

严格模式

  • 防止用户执行低效率的SQL查询
  • 对于分区表,除非where语句中含有分区字段过滤条件来限制范围,否则不允许执行
  • 对于使用了order by语句的查询,要求必须使用limit语句
  • 限制笛卡尔积的查询。

JVM重用

难避免小文件的场景或task特别多的场景,这类场景大多数执行时间都很短


表的优化(小表与大表)

  • Hive默认第一个(左面的)表是小表,然后将其存放到内存中,然后去与第二张表进行比较
  • 现在优化后小表前后无所谓

表的优化(大表与大表)

针对于空值,可以将空值随机设置一个不影响结果的值
      将来reduce的时候可以分区到不同的reduce,减少压力


mapside聚合

  • 分两次进行mapredue,第一次随机分获取中间结果
  • 第二次正常分,获取最终结果

Count(Distinct)

  • 防止所有的数据都分到一个Reduce上面
  • 首先使用Group By对数据进行分组,然后在统计

防止笛卡尔积


当表关联的时候,优先使用子查询对表的数据进行过滤

这样前面表关联数据就是少的,减少关联的次数


https://tech.meituan.com/2014/02/12/hive-sql-to-mapreduce.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值