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

ajsxfq5m  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(532)

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

select * from tbl;

给我的结果与:

select count(*) from tbl;

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

tvmytwxo

tvmytwxo1#

提交配置单元查询时,配置单元会将查询转换为一个或多个阶段。阶段可以是mapreduce阶段、采样阶段、合并阶段、限制阶段,也可以是hive需要执行的其他可能任务。 select * from table_name; 这个查询只是扫描整个表并在屏幕上转储输出,因此您可以在控制台上看到不同的日志输出。
select count(*) from table_name 只需扫描Hive元信息,并把他们自己的结果。它也不运行任何mapreduce作业。
您可以在配置单元控制台上运行下面的命令,您将能够看到整个信息。 hive> describe formatted table_name ;
表参数:

COLUMN_STATS_ACCURATE   true
numFiles                xx
numRows                 xxxxxxxx

在hadoop中,聚合/条件/算术操作等需要一个处理引擎来处理和执行结果,因此每当您提交这种类型的作业时,它就会在内部被转换成mapreduce程序,mapreduce程序代表查询执行,并将其结果生成到配置单元和在屏幕上显示的配置单元,因此您将看到不同的结果。
你可以把 EXPLAIN 关键字前面的查询可以看到查询计划等信息。
请参考hadoop编程手册第10章,了解更多关于hive的使用 EXPLAIN 特征。

相关问题