hive优化

hive常见优化方法总结

1,使用关键字 EXPLAIN  或者 EXPLAIN EXRENDED  ,在要执行的sql语句前面加关键字,不执行语句,可以用来查看语法树

2,使用limit限制的调整,一般使用limit其实还是全表扫描,所以可以修改配置

  <property>

 <name> hive.limit.optimize.enable</name>

<value> true</value>

</property>

3,在数据量少的情况下可以使用本地模式查询

  set oldjobtracker=${hiveconf:mapred.job.tracker}

set mapred.job.tracker=local;

set mapred.tmp.dir=/home/edward/tmp;

select * from  people where firstname=bob;

设置属性 hive.exec.model.local.auto 的值为true

4,join优化

    将最大的表放在join语句的最右边,或者直接使用/*streamtable(table_name)*/语句指出

  如果所有表中有一个表足够的小,可以完整的载入到内存中,那么这时hive可以执行一个map-side JOIN,

这样可以减少reduce过程

5,严格模式

     使用hive.mapred.mode 的值为strict 禁止3中类型查询

     其一:对于分区表,除非where语句中含有分区字段过滤条件来限制数据范围,否则不允许执行。

    其二:对于order by的语句查询,必须使用limit语句,因为order by为了值执行排序过程会将所有的结果数据分发到同一个reduce中进行处理,强制要求用户增加这个limit语句可以防止reducer额外执行很长一段时间

    其三:限制笛卡尔积的查询。在join时使用on,避免使用where

6,并行执行

     通过设置参数hive.exec.parallel的值为true,就可以开启并发执行,不过,在共享集群中,需要注意下,如果job中

并行执行的阶段增多,那么集群的利用率就会增加

<property>

<name>hive.exec.parallel</name>

<value>true</value>

</property>
7,调整mapper和reducer个数

   在hive设置中hive.exec.reducers.bytes.per.reducer(设置的时候是按照字节计算
机器的换算为:
   1G=1000MB
1MB=1000KB
1KB=1000B
把B称为字节、b称为字位、KB称为 千字节、MB称为 兆字节GB称为吉字节。
)的默认值是1G,将这个属性值可以进行调节
  使用命令 hadoop fs -count /user/hive/warehouse/tc.db/tc_order/* | tail -4  查看文件的大小
如果文件大小为4G,则有4个reduce

 

hive的默认reducer个数是3个,可以通过mapred.reduce.tasks的值为不同的值来确定是使用较多还是较少的reducer来缩短执行时间。当在共享集群上处理大任务时,为了控制资源利用情况,属性hive.exec.reducers.max显得非常重要。一个hadoop可以提供的map和reduce资源个数(“插槽”),是固定的。通过设置hive.exec.reducers.max可以阻止某个查询消耗太多的资源。对于之歌属性值的计算公式如下

(集群总Reduce槽位个数*1.5)/(执行中的查询的平均个数)

 

 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值