Hive 删除分区语句卡死问题
一、问题现象与报错信息
1.1 核心现象
HiveServer2 Web 界面中,执行删除分区语句(如 ALTER TABLE ... DROP PARTITION)时出现长时间执行卡死,无法正常完成,且该分区后续其他操作(如查询、修改)均被阻塞。
1.2 关键报错日志
2021-10-08 18:52:35,755 ERROR ZooKeeperHiveLockManager: [HiveServer2-Background-Pool: Thread-680621]: Unable to acquire IMPLICIT, EXCLUSIVE lock order@order_detail@dt=2021-09-23/hour=02 after 100 attempts.
2021-10-08 18:52:35,764 ERROR org.apache.hadoop.hive.ql.Driver: [HiveServer2-Background-Pool: Thread-680621]: FAILED: Error in acquiring locks: Locks on the underlying objects cannot be acquired. retry after some time
org.apache.hadoop.hive.ql.lockmgr.LockException: Locks on the underlying objects cannot be acquired. retry after some time
at org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager.acquireLocks(DummyTxnManager.java:190)
at org.apache.hadoop.hive.ql.Driver.acquireLocksAndOpenTxn(Driver.java:1244)
...(省略部分堆栈信息)
at java.lang.Thread.run(Thread.java:748)
报错核心原因:删除分区操作需要获取 IMPLICIT(隐式)、EXCLUSIVE(排他)锁,但该锁已被其他操作占用,重试 100 次后仍失败,导致任务卡死。
二、问题根源分析
2.1 直接原因:分区锁被占用
Hive 对分区操作采用锁机制,不同操作对锁的需求不同:
- 查询操作(如
SELECT):会获取 SHARED(共享)锁,允许其他查询共享锁,但禁止排他锁(如删除、修改)。 - 删除/修改分区操作:需要获取 EXCLUSIVE(排他)锁,禁止任何其他锁(包括共享锁),必须等待所有共享锁释放后才能获取。
当目标分区正在执行查询时,共享锁未释放,删除操作无法获取排他锁,导致任务卡死。
2.2 间接原因:HiveServer2 连接与锁竞争
- HiveServer2 连接频繁:大量并发连接导致锁竞争加剧,锁释放延迟。
- 长耗时查询未终止:若分区上的查询操作(如统计大分区数据量
SELECT COUNT(*))执行时间过长,会持续占用共享锁,进一步阻塞删除操作。

1310

被折叠的 条评论
为什么被折叠?



