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

标签 hadoop hive

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

select * from tbl;

给我的结果与以下情况截然不同:
select count(*) from tbl;

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

最佳答案

提交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,因此您会看到不同的结果。

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

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

关于hadoop - 一个查询运行map reduce,另一个查询不运行map reduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41586964/

相关文章:

hadoop - hdfs 和 hive 有什么关系?

hadoop - 使用hacatalog在tez模式下运行Pig脚本时出错

python - 从 Hive 表中的 ip 地址查找地理位置

hadoop - 从一个部分文件中 Sqoop 到两个表( pig 输出)

json - 为什么不是来自 ambari 集群的所有参数都不由蓝图 json 文件表示

email - 在AWS上从EC2或EMR发送邮件

hadoop - 如何在将数据加载到 Hive 时指定输入文件格式

hadoop - 如何列出 Hive 中所有数据库中所有表中的所有列

hadoop - Sqoop 与 Informatica 大数据版本的数据来源对比

hadoop - hive -h <主机名>未建立与hive控制台的连接