1 Fetch抓取(Hive可以避免进行MapReduce)
1.1 hive.fetch.task.conversion设置成more
把hive.fetch.task.conversion设置成more,然后执行查询语句,在全局查找、字段查找、limit查找等都不走mapreduce。
set hive.fetch.task.conversion=more;
1.2 本地模式
当Hive的输入数据量非常小时,为避免出现配置maptask比数据运行时间还长,可以通过设置hive.exec.mode.local.auto的值为true,来让Hive在适当的时候自动启动这个优化。
set hive.exec.mode.local.auto=true; //开启本地mr
//设置local mr的最大输入数据量,当输入数据量小于这个值时采用local mr的方式,默认为134217728,即128M
set hive.exec.mode.local.auto.inputbytes.max=51234560;
//设置local mr的最大输入文件个数,当输入文件个数小于这个值时采用local mr的方式,默认为4
set hive.exec.mode.local.auto.input.files.max=10;
2 表的优化
2.1 Join
Join原则:
1)小表Join大表
2)多个表关联时,最好分拆成小段,避免大sql(无法控制中间Job)
3)大表Join大表
- (1)空key过滤
即进行join连接时,先将字段为null的值过滤出去再进行join连接,避免出现大量相同key发送到同一个reducetask的情况
(2)空key转换
原因同上,有时虽然某个key为空对应的数据很多,但是相应的数据不是异常数据,必须要包含在join的结果中,此时我们可以表a中key为空的字段赋一个随机的值,可以为nul