Hive 并行编译问题排查解决

文章描述了在执行Hive查询时遇到长时间无响应的问题,通过JStack分析发现SQL编译过程导致锁无法释放。解决方案是修改hive.driver.parallel.compilation参数为true,启用并行编译以避免全局锁的影响,从而提高并发性能。
摘要由CSDN通过智能技术生成

问题描述:

hive执行查询长时间无结果返回:

执行命令:beeline -u jdbc:hive2://xx.xx.xx.xx:port

排查过程:

查看hive2 进程各项指标及日志,以及主机层面的监控均未发现问题

通过命令Jstack hive2进程ID查看进程的堆栈跟踪信息和线程执行信息

2022-12-29 11:48:01
Full thread dump OpenJDK 64-Bit Server VM (25.282-b1 mixed mode):

"Attach Listener" #4132 daemon prio=9 os_prio=0 cpu=0.45ms elapsed=8.72s tid=0x000055c427200800 nid=0x41125 waiting on condition [0x0000000000000000]
   java.lang.Thread.State: RUNNABLE

"hiveserver2-web-4130" #4130 daemon prio=5 os_prio=0 cpu=0.07ms elapsed=19.09s tid=0x00007f0a6edc1000 nid=0x41099 runnable [0x00007f0a57978000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
        at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
        at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
        - locked <0x00007f0aca031510> (a sun.nio.ch.Util$3)
        - locked <0x00007f0aca031528> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00007f0aca031498> (a sun.nio.ch.EPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
        at org.eclipse.jetty.io.ManagedSelector$SelectorProducer.select(ManagedSelector.java:243)
        at org.eclipse.jetty.io.ManagedSelector$SelectorProducer.produce(ManagedSelector.java:191)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.executeProduceConsume(ExecuteProduceConsume.java:249)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceConsume(ExecuteProduceConsume.java:148)
        at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:136)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:671)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:589)
        at java.lang.Thread.run(Thread.java:748)

"hiveserver2-web-4131" #4131 daemon prio=5 os_prio=0 cpu=1.56ms elapsed=19.09s tid=0x00007f0ed2d3a800 nid=0x41098 waiting on condition [0x00007f0a5bab9000]
   java.lang.Thread.State: TIMED_WAITING (parking)
        at sun.misc.Unsafe.park(Native Method)
        - parking to wait for  <0x00007f0ac9f28998> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
        at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
        at org.eclipse.jetty.util.BlockingArrayQueue.poll(BlockingArrayQueue.java:392)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.idleJobPoll(QueuedThreadPool.java:563)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.access$800(QueuedThreadPool.java:48)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
        at java.lang.Thread.run(Thread.java:748)

"hiveserver2-web-4129" #4129 daemon prio=5 os_prio=0 cpu=0.08ms elapsed=19.09s tid=0x00007f0ec8569000 nid=0x41097 runnable [0x00007f0a59695000]
   java.lang.Thread.State: RUNNABLE
        at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
        at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
        at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
        at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
        - locked <0x00007f0ac9f4a290> (a sun.nio.ch.Util$3)
        - locked <0x00007f0ac9f4a2a8> (a java.util.Collections$UnmodifiableSet)
        - locked <0x00007f0ac9f4a218> (a sun.nio.ch.EPollSelectorImpl)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
        at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
        at org.eclipse.jetty.io.ManagedSelector$SelectorProducer.select(ManagedSelector.java:243)

通过查看hive2 线程信息,排查为hive2 进行sql编译时,一条sql编译时间较长,导致编译锁无法释放,后续sql无法执行,

解决方案:

将hive.driver.parallel.compilation参数由false改为true,

由全局锁改为session锁,这样各个session的sql没有关系。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值