一个查询运行map reduce,另一个查询不运行

时间:2017-01-11 09:24:58

标签: hadoop hive

我在hive中有一个表,我想从中获取所有数据。问题是:

select * from tbl;

给我的结果与:

非常不同
select count(*) from tbl;

为什么?第二个查询似乎是运行hadoop map reduce,第一个不是 - 它只是返回结果。该表未进行分区或分区,它采用文本(csv)格式。

1 个答案:

答案 0 :(得分:0)

当您提交Hive查询时,Hive会将查询转换为一个或多个阶段。阶段可以是MapReduce阶段,采样阶段,合并阶段,限制阶段或Hive需要执行的其他可能任务。

select * from table_name;

此查询只扫描整个表并将输出转储到屏幕上,因此您可以在控制台上看到不同的日志输出。

虽然select count(*) from table_name只是扫描Hive meta_information并将结果放在他们自己的位置。它也不会运行任何MapReduce作业。

您可以在Hive控制台上运行以下命令,您将能够看到整个信息。

hive> describe formatted table_name;

表格参数:

COLUMN_STATS_ACCURATE   true
numFiles                xx
numRows                 xxxxxxxx

在hadoop中,聚合/条件/算术运算等需要处理引擎来处理和执行结果,因此无论何时提交此类作业,它都会在内部转换为MapReduce程序,MapReduce程序代表查询并将其结果生成到屏幕上的hive和Hive显示,因此您会看到不同的结果。

您可以在查询前放置EXPLAIN关键字,以查看查询计划和其他信息。

请参阅编程Hadoop Book,第10章,了解有关使用Hive EXPLAIN功能的更多信息。