Hive会将一个查询转化成一个或者多个阶段。这样的阶段可以是MapReduce阶段、抽样阶段、合并阶段、limit阶段。默认情况下,Hive一次只会执行一个阶段。 某些job包含的多个阶段可能并非完全互相依赖的,也就是说有些阶段是可以并行执行的,这样可能使得整个job的执行时间缩短,那么job可能就越快完成。 hive-site.xml:
hive.exec.parallel
false
Whether to execute jobs in parallel
hive.exec.parallel.thread.number
8
How many jobs at most can be executed in parallel
通过设置参数hive.exec.parallel值为true,就可以开启并发执行。 set hive.exec.parallel=true; //打开任务并行执行 set hive.exec.parallel.thread.number=16; //同一个sql允许最大并行度,默认为8。 当然,得是在系统资源比较空闲的时候才有优势,否则,没资源,并行也起不来。
JVM重用JVM重用指的是同一个Job中不同的Task之间重要JVM。 JVM重用是Hadoop调优参数的内容,对Hive的性能具有非常大的影响,特别是对于很难避免小文件的场景或执行的job包含有成百上千task任务的场景。 JVM重用可以使得JVM实例在同一个job中重新使用N次。N的值可以在Hadoop的mapred-site.xml文件中进行配置,通常在10-20之间。
mapreduce.job.jvm.numtasks
10
这个功能的缺点是,开启JVM重用将一直占用使用到的task插槽,以便进行重用,直到任务完成后才能释放。如果某个“不平衡的”job中有某几个reduce task执行的时间要比其他Reduce task消耗的时间多的多的话,那么保留的插槽就会一直空闲着却无法被其他的job使用,直到所有的task都结束了才会释放。
推测执行推测执行(Speculative Execution)机制根据一定的法则推测出可能“拖后腿”的任务,并为这样的任务启动一个备份任务,让该备份任务与原始任务同时处理同一份数据,并最终选用最先成功运行完成任务的计算结果作为最终结果。 推测执行默认是开启的。
设置开启推测执行参数:
-
Hadoop的mapred-site.xml文件中进行配置
mapreduce.map.speculative true mapreduce.reduce.speculative true
-
hive本身也提供了配置项来控制reduce-side的推测执行:
hive.mapred.reduce.tasks.speculative.execution
true