hive执行表操作指令卡死问题的解决
在对hive表执行从一张表查询所有数据,然后覆写到另一张表时候,发现卡住不动了,退出后重进尝试drop表,依然卡住不动。
- 报错如下所示:
Launching Job 1 out of 1 Starting task [Stage-1] in serial mode
操作其他表发现正常
查询发现表锁了,解决
进入hive,执行
show locks;
可以看到里面的那个Blocked By下的EXCLUSIVE
这里简单说一下:hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X)
触发共享锁的操作是可以并发执行的
但是触发互斥锁,那么该表和该分区就不能并发的执行作业了。
于是开始尝试解锁:
unlock table 表名;
但是给我报错了:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
Current transaction manager does not support explicit lock requests. Transaction manager:
org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
- 发现无法解除锁操作,锁还在
- 临时会话关闭锁设置
set hive.support.concurrency=false;
这个是hive的锁机制,可以暂时关掉,默认是true。关掉之后就可以删除表了,删掉之后可以再把它设置为true。但是会有遗留问题,我们会发现那个锁依旧没掉!
这时候需要去执行。
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;
然后再去unlock那个锁!
最后发现尽管表的锁解锁了,但是还是卡住
YARN的ResourceManager可能存在问题
- 如果是hive 3.1.X版本,查看一下hive on Tez是否正常,因为Hive 3.X版本已经将引擎改完Tez了。
- 重启yarn服务。
如果以上方法都没有解决,可查看hive的日志,继续排查错误。 - 我的hive的日志目录 ```/var/log/hive/hadoop-cmf-hive_on_tez-HIVESERVER2-m3.idss.com.log.out