6

我已经问了一些关于提高 Hive 查询性能的问题。一些答案与映射器和减速器的数量有关。我尝试了多个映射器和减速器,但我没有看到执行中有任何区别。不知道为什么,可能是我没有以正确的方式做到这一点,或者我错过了其他东西。

我想知道是否可以并行执行 Hive 查询?我的意思是,通常查询会在队列中执行。例如:查询1

查询2

查询3

. . . n

执行时间太长,我想减少执行时间。

我需要知道如果我们在 Hive JDBC 程序中使用 mapreduce 程序,那么是否可以并行执行它?不知道这是否可行,但这是我的目标?

我在下面恢复我的问题:

1)如果可以并行运行多个 Hive 查询,是否需要多个 Hive Thrift Server?

2) 是否可以打开多个 Hive Thrift 服务器?

3) 我认为不可能在同一个端口上打开多个 Hive Thrift Server?

4) 我们可以在不同的端口上打开多个 Hive Thrift Server 吗?

请为此建议我一些解决方案。如果您有其他选择,我也会尝试。

4

1 回答 1

6

您可能已经知道,Hive 是 Hadoop 和 Map-reduce 的类似 SQL 的前端。Hive 上的任何重要查询都被编译为 Map-Reduce 并在 Hadoop 上运行。Map-reduce 是一个并行处理框架,因此您的每个 Hive 查询都将并行运行和处理数据。Hive 默认使用 FIFO 调度程序来调度 Hadoop 上的作业,因此,在给定时间只能执行一个 Hive 查询,并且将在第一个查询完成后执行下一个查询。在大多数情况下,我建议人们优化单个 Hive 查询,而不是并行化多个 Hive 查询。如果您倾向于并行化 Hive 查询,则可能表明您的集群使用效率低下。要进一步分析 Hive 查询的性能和使用情况,您可以安装一个分布式监控系统,例如Ganglia用于监控集群的使用情况(Amazon EMR 也支持)。

长话短说,您不必编写 map-reduce 程序;这就是您首先使用 Hive 的目的。但是,如果您可能了解 Hive 可能不了解的数据,则可能会导致 Hive 查询的性能欠佳。例如,您的数据可能按某些列排序,而 Hive 可能不知道该信息。在这种情况下,如果您无法在 Hive 中设置额外的元信息,那么编写一个将额外信息考虑在内并可能为您提供更好性能的 map-reduce 作业可能是有意义的。在大多数情况下,我发现 Hive 性能与 Hive 查询对应的 Map-reduce 作业相当。

于 2012-05-12T14:59:04.257 回答