2

我想在 Hive 中找到查询的预期运行时间。使用 EXPLAIN 给出执行计划。有没有办法找到预期的时间?

我需要 Hive 相当于 SQL 查询 EXPLAIN COSTS 。

4

3 回答 3

2

目前没有 OOTB 功能可以促进这一点。实现这一目标的一种方法是从历史中学习。根据您之前运行的类似数据和查询收集模式,并尝试推断出一些见解。您可能会发现Starfish等工具在此过程中很有帮助。

我不建议您根据数据的子集来决定任何事情,因为在小数据集和实际数据集上运行查询非常不同。这有利于测试功能,但不适用于任何类型的成本近似。这背后的原因是这个过程涉及到很多因素,比如系统资源(磁盘、CPU 插槽、N/W 等)、系统配置、其他正在运行的作业等。你可能会发现在一个小数据集上运行流畅,但是随着数据量的增加,所有这些因素都开始发挥重要作用。即使是很小的配置参数也可能发挥重要作用。(您可能已经注意到有时 Hive 查询最初运行很快,但逐渐开始变慢)。此外,Hive 查询的执行比简单的 MR 作业要复杂得多。

请参阅此JIRA以获得一些想法,他们正在讨论为 Hive 中的联接开发基于成本的查询优化。您可能还会发现很有帮助。

于 2013-07-06T04:12:30.647 回答
1

我认为这是不可能的,因为内部 map reduce 会针对任何特定的 Hive 查询执行。此外,map reduce 作业的执行时间取决于集群负载及其配置。所以很难预测执行时间。也许您可以做一件事,您可以在运行查询之前使用一些计时器,然后在完成之后您可以计算执行所需的确切执行时间。

于 2013-07-04T10:04:58.283 回答
0

可能您可以使用分区、存储桶功能等从表中抽取一小部分记录,然后针对小数据集运行查询。注意执行时间,然后乘以因子(total_size/sample_size)。

于 2013-07-05T21:15:13.683 回答