我已经问了一些关于提高Hive查询性能的问题。一些答案与映射器和化简器的数量有关。我尝试使用多个映射器和化简器,但我没有看到执行中的任何区别。不知道为什么,可能是我没有以正确的方式做,或者我错过了其他东西。
我想知道是否可以并行执行 Hive 查询?我的意思是,通常查询在队列中执行。例如:查询1
查询2
查询3
...n
执行需要太多时间,我想减少执行时间。
我需要知道如果我们在Hive JDBC程序中使用mapreduce程序,那么是否可以并行执行它?不知道这是否有效,但这就是我要实现的目标?
我恢复以下问题:
1( 如果可以并行运行多个 Hive 查询,是否需要多个 Hive Thrift Server?
2(是否可以打开多个Hive Thrift服务器?
3(我认为不可能在同一端口上打开多个Hive Thrift服务器?
4(我们可以在不同的端口上打开多个Hive Thrift服务器吗?
请为此向我建议一些解决方案。如果您有任何其他选择,我也会尝试。
你可能已经知道,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作业相当。