hive入门学习:hive的调优(二)
并行执行:
hive会把查询转化成为一个或者多个阶段,这样的阶段可以是mapreduce阶段,抽样阶段,合并阶段,limit阶段等等。默认情况下hive一次只会执行一个阶段,不过某些特定的阶段可能会包含众多的阶段,而这些阶段并非互相依赖,可以并行执行,这样就可以大幅度的缩短job的执行时间。如下配置来设定:set hive.exec.parallel=true来开启并行执行。
严格模式:
hive提供的严格模式可以很好的帮助用户减少那些意想不到的不好的影响。可以通过set hive.mapred.mode=strict;来开启严格模式。严格模式分为以下的三种:
(1)对于分区表,在where字句中必须包含分区字段的过滤条件,否则就不允许执行。也就是说,用户不可以扫描所有的分区。因为分区表通常都会含有很大的数据集,并且增加迅速,不进行过滤会加载很多的数据造成I/O瓶颈。
(2)对于使用order by 语句的查询,必须使用limit语句来限制。因为order by会把所有的数据都shuffle到同一个reducer中。造成单节点压力过大。limit会限制数据的大小,仅仅对limit的数据进行排序。
(3)限制笛卡尔积的查询。在传统的关系型数据库中,AB两个表的链接用where语句来进行filter,然后会把where转化成为高效的on关键字进行链接,但是hive并不存在这种优化,当数据表足够大的时候,就会出现不可控的情况。所以不能使用where关键字,只能使用on关键字。