为什么mapreduce不会执行Hive查询?

时间:2016-10-21 08:11:12

标签: hadoop mapreduce hive

我有一个查询,其中我们创建了Hive表,当我们select * from table where=< condition>;时,它立即给出结果而不调用MR作业。当我创建相同的重复表并尝试执行查询时,则调用MR。可能的原因是什么?

2 个答案:

答案 0 :(得分:0)

我得到了答案,原因是桌子上发出了Hive analyze命令。一旦执行hive analyze命令,它就会在hive metastore中存储行数,文件大小。所以,当你选择count(*)时table.It直接从hive Metastore中取出它,而不是调用map reduce工作。 您也可以在列上发出分析命令。

ANALYZE TABLE [db_name.]tablename [PARTITION(partcol1[=val1], partcol2[=val2], ...)]  -- (Note: Fully support qualified table name since Hive 1.2.0, see HIVE-10007.)
  COMPUTE STATISTICS 
  [FOR COLUMNS]          -- (Note: Hive 0.10.0 and later.)
  [CACHE METADATA]       -- (Note: Hive 2.1.0 and later.)
  [NOSCAN];

文档链接: https://cwiki.apache.org/confluence/display/Hive/StatsDev

答案 1 :(得分:0)

本地模式(配置单元不调用MR)取决于几个条件(参见HIVE-1408):

  1. hive.exec.mode.local.auto=true/false - 让Hive确定是否自动以本地模式运行。
  2. hive.exec.mode.local.auto.input.size.max=1G - 当hive.exec.mode.local.auto为真时,对于本地模式,输入字节应小于此值。
  3. hive.exec.mode.local.auto.input.files.max=4 - 当hive.exec.mode.local.auto为真时,本地模式下的任务数应小于此值。
  4. 如果表格具有相同的数据,我的猜测是,在查询两个表时导致一个查询在本地模式下运行而另一个查询生成MR作业时产生的任务数量存在差异。