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