Hive之Fetch和本地模式

1、Fetch 抓取 

Fetch 抓取是指,Hive 中对某些情况的查询可以不必使用 MapReduce 计算。

例如:
SELECT * FROM employees;

在这种情况下,Hive 可以简单地读取 employee 对应的存储目录下的文件,然后输出查询结果到控制台。

在 hive-default.xml.template 文件中 hive.fetch.task.conversion 默认是 more,老版本 hive默认是 minimal,该属性修改为 more 以后,在全局查找、字段查找、limit 查找等都不走mapreduce。  

    
   hive.fetch.task.conversion     
   more     
   Expects one of [none, minimal, more].       
   Some select queries can be converted to single FETCH task minimizing latency.       
   Currently the query should be single sourced not having any subquery and should not have                                   
   any aggregations or distincts (which incurs RS), lateral views and joins.       
   0. none : disable hive.fetch.task.conversion       
   1. minimal : SELECT STAR, FILTER on partition columns, LIMIT only       
   2. more  : SELECT, FILTER, LIMIT only (support TABLESAMPLE and virtual columns)     
   
  
 

2、本地模式 

大多数的 Hadoop Job 是需要 Hadoop 提供的完整的可扩展性来处理大数据集的。不过,有时 Hive 的输入数据量是非常小的。在这种情况下,为查询触发执行任务消耗的时间可能会比实际 job 的执行时间要多的多。对于大多数这种情况,Hive 可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间可以明显被缩短。

 通过设置 hive.exec.mode.local.auto 的值为 true,来让 Hive 在适当的时候自动 启动这个优化。 

 (1)开启本地 mr (默认不开启)

set hive.exec.mode.local.auto=true;

(2)设置 local mr 的最大输入数据量

当输入数据量小于这个值时采用 local  mr 的 方式,默认为 134217728,即 128M 

set hive.exec.mode.local.auto.inputbytes.max=50000000; 

(3)设置 local mr 的最大输入文件个数

当输入文件个数小于这个值时采用 local mr 的方式,默认为 4 

set hive.exec.mode.local.auto.input.files.max=10; 

注意:开启本地 mr,但是数据超过最大输入数据量 或者 超过最大输入文件个数,不会走本地mr。


 

你可能感兴趣的:(研磨Hadoop)