温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hive中的锁的用法

发布时间:2021-08-20 18:34:49 来源:亿速云 阅读:174 作者:chen 栏目:云计算

本篇内容主要讲解“Hive中的锁的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hive中的锁的用法”吧!



Hive中的锁

在执行insert intoinsert overwrite任务时,中途手动将程序停掉,会出现卡死情况(无法提交MapReduce),只能执行查询操作,而drop insert操作均不可操作,无论执行多久,都会保持卡死状态。

查看Hive的中死锁,可以使用show locks [table]来查看。

Hive中的锁的用法  
clipboard

可以看到里面的那个Type下的EXCLUSIVE,这是一种互斥锁,需要解决,否则后续的查询和插入任务都会影响。

hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X)

SX
S
X

锁的基本机制是:

  • 元信息和数据的变更需要互斥锁

  • 数据的读取需要共享锁

触发共享锁的操作是可以并发执行的,但是触发互斥锁,那么该表和该分区就不能并发的执行作业了。

Hive中的锁的用法  
微信截图_20201207211428

对于上面的情况,使用解锁命令:

unlock table tableName
 

注意表锁和分区锁是两个不同的锁,对表解锁,对分区是无效的,分区需要单独解锁

 

解锁方法

查看表被锁的情况:

show locks tableName
 

常规解锁方法:

unlock table 表名;  -- 解锁表
unlock table 表名 partition(dt='2014-04-01');  -- 解锁某个分区
 

高版本hive默认插入数据时,不能查询,因为有锁

 

可能出现的问题

解锁之路通常不是一帆风顺的,可能会遇到各种问题,笔者是在Hive2.1.1下面测试,比如:

Hive中的锁的用法  
clipboard3

这个命令无法执行,说LockManager没有指定,这时候需要执行命令:

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

这样重新执行,命令就可以执行了

如果还!是!不!行,终极方法,可以直接去mysql元数据执行:

select * from HIVE_LOCKS where HL_DB=?;
 

查到所有的锁,然后根据条件把对应的锁删掉,这个锁住的表即可释放出来了。

delete from HIVE_LOCKS where HL_DB = 'cdn' and HL_TABLE = 'cdn_log';
 

注意表名和字段都需要大写

通过这种办法,通常可以彻底解决锁的问题。

到此,相信大家对“Hive中的锁的用法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI