hive 0.10.0为了执行效率考虑,简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤。
1、本地模式下,hive可以简单的读取目录路径下的数据,然后输出格式化后的数据到控制台,比如有本地员工employee,当执行 select * from employee 时,直接将文件中数据格式化输出。
2、查询语句中的过滤条件只是分区字段的情况下不会进行Mapreduce。
设置:
在hive-site.xml里面有个配置参数叫
hive.fetch.task.conversion = more
将这个参数设置为more,简单查询就不走map/reduce了,设置为minimal,就任何简单select都会走map/reduce
1.当时用select * from tableName情况下,Hive可以简单的读取table对应的存储目录下的文件,然后输出格式化后的文件到控制台。对于在where条件中使用分区字段这种情况,也是无需MapReduce过程的,例如select * from tableName where partition1=‘’;无论使用limit语句限制记录条数。
2.如果属性hive.exec.mode.local.auto的值设置为true的话,Hive还会尝试使用本地模式执行其他的操作:
set hive.exec.mode.local.auto=true;
注意:最好是将set hive.exec.mode.local.auto=true这个设置增加到$HOME/.hiverc配置文件中