概述
@Hive中的锁
1. Hive出现死锁的场景
前面遇到过一次因为Hive中表被锁住了,导致定时任务一直失败。原因是连接hiveserver2过于频繁,mysql连接被打满,引发的连锁反应,导致我们的任务一直失败。
在执行insert into或insert overwrite任务时,中途手动将程序停掉,会出现卡死情况(无法提交MapReduce),只能执行查询操作,而drop 、insert操作均不可操作,无论执行多久,都会保持卡死状态
2. 查看Hive中的死锁
查看Hive的中死锁,可以使用**show locks [tableName]**来查看
hive>show locks history_helpers;
可以看到里面的那个Type下的EXCLUSIVE,这是一种互斥锁,需要解决,否则后续的查询和插入任务都会影响
3. Hive中死锁的机制
hive存在两种锁,共享锁**Shared (S)和互斥锁Exclusive (X)**
锁SXS是否
X否否
锁的基本机制是:
元信息和数据的变更需要互斥锁
数据的读取需要共享锁
触发共享锁的操作是可以并发执行的,但是触发互斥锁,那么该表和该分区就不能并发的执行作业了。
对于上面的情况,使用解锁命令:unlock table [tableName]
注意:表锁和分区锁是两个不同的锁,对表解锁,对分区是无效的,分区需要单独解锁
4. Hive解锁方法
查看表被锁的情况:show locks [tableName]
常规解锁方法:
unlock table [tableName]; – 解锁表
unlock table [tableName] partition(dt=‘2014-04-01’); – 解锁某个分区
高版本hive默认插入数据时,不能查询,因为有锁
5. 可能出现的问题
a. LockManager没有指定
需要执行命令:
set hive.support.concurrency=true;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;
b. Hive中删除失败
从Mysql元数据中删除
--查到所有的锁
select * from HIVE_LOCKS;
--根据条件把对应的锁删掉
delete from HIVE_LOCKS where HL_DB = 'cdn' and HL_TABLE = 'cdn_log';
注意:表名和字段都需要大写。
最后
以上就是愉快玫瑰为你收集整理的hive连接mysql锁_Hive中的锁的全部内容,希望文章能够帮你解决hive连接mysql锁_Hive中的锁所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复