Hive优化

本文转载自:点击打开链接

hive常见优化方法总结

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

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

 

  hive.limit.optimize.enable

true

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中

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

hive.exec.parallel

true


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)/(执行中的查询的平均个数)

你可能感兴趣的:(hive优化,HIVE)