Fetch
Hive中对某些情况的查询不必使用mapreduce,一些简单的查询,hive可以读取存储目录下的文件,然后输出查询结果到控制台,通过参数声明设置fetch参数,可以控制查询是否走mapreduce
set hive.fetch.task.conversion=none;//走mapreduce程序
set hive.fetch.task.conversion=more;//不走mapreduce
本地模式
大多数的job是需要hadoop提供完整的可扩展性来处理大数据集,不过有时候hive的输入数据非常小,在这种情况下,为查询触发执行任务时消耗的时间比实际的job的执行时间更多,因此可以通过本地模式在单台机器上处理所有的任务,对小数据集,可以明显的缩短执行时间
set hive.exec.model.local.auto=true;//开启本地模式
set hive.exec.model.local.auto=false;//关闭本地模式
聚合
默认情况下,map阶段同一key数据会分发给一个reduce,当一个key数据过大的时候就会发生数据倾斜,并不是所有的聚合操作都需要在reduce阶段完成,很多聚合操作可以现在map段进行部分聚合,最后在reduce阶段得出最终的结果
是否在map阶段进行聚合,默认为true
set hive.map.aggr=true;
在map阶段进行聚合操作的条目的数目
set hive.groupby.mapaggr.checkinterval=10000;
有数据倾斜的时候进行