【问题标题】:One query runs map reduce, the other does not一个查询运行 map reduce,另一个不运行
【发布时间】:2017-01-11 09:24:58
【问题描述】:

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

select * from tbl;

给我的结果与:

select count(*) from tbl;

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

【问题讨论】:

标签: hadoop hive


【解决方案1】:

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

select * from table_name;

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

select count(*) from table_name 只是扫描 Hive 元信息并将结果从它们本身中取出。它也不运行任何 MapReduce 作业。

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

hive> describe formatted table_name;

表格参数:

COLUMN_STATS_ACCURATE   true
numFiles                xx
numRows                 xxxxxxxx

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

可以在查询前面加上EXPLAIN关键字,查看查询计划等信息。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多