美文网首页
hive执行表操作指令卡死问题的解决

hive执行表操作指令卡死问题的解决

作者: AceCream佳 | 来源:发表于2019-02-13 15:04 被阅读0次

    问题描述

    在对hive表执行alert的时候,发现卡住不动了,退出后重进尝试drop表,依然卡住不动。
    找解决方案如下:

    1.网上的方案:

    先进入mysql,执行

    show variables like 'char%'
    

    查看character_set_database 的value是latin
    然后把latin改成utf-8就好了,然后就解决了。

    然而实际的情况不是这个样子的,我这边mysql里面明明就是utf-8,那么真相只有一个——锁表了!
    那么只能自己想想办法了

    2.解锁方案

    进入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
    

    但是再次使用 show locks; 发现之前的锁没了

    之前遇到怎么都删不掉的情况,解决办法是执行:

    set hive.support.concurrency=false;
    

    这个是hive的锁机制,可以暂时关掉,默认是true。关掉之后就可以删除表了,删掉之后可以再把它设置为true。但是会有遗留问题,我们会发现那个锁依旧没掉!
    这时候需要去执行

    set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;
    

    然后再去unlock那个锁!

    相关文章

      网友评论

          本文标题:hive执行表操作指令卡死问题的解决

          本文链接:https://www.haomeiwen.com/subject/noireqtx.html