我是靠谱客的博主 愉快玫瑰,最近开发中收集的这篇文章主要介绍hive连接mysql锁_Hive中的锁,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

@Hive中的锁

1. Hive出现死锁的场景

前面遇到过一次因为Hive中表被锁住了,导致定时任务一直失败。原因是连接hiveserver2过于频繁,mysql连接被打满,引发的连锁反应,导致我们的任务一直失败。

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

2. 查看Hive中的死锁

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

hive>show locks history_helpers;

df24b536d6c180b128bb71fbfb7e0bc9.png

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

3. Hive中死锁的机制

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

锁SXS是否

X否否

锁的基本机制是:

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

数据的读取需要共享锁

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

1411622bf5b959966a22235bc0d5b475.png

对于上面的情况,使用解锁命令:unlock table [tableName]

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

4. Hive解锁方法

查看表被锁的情况:show locks [tableName]

常规解锁方法:

unlock table [tableName]; – 解锁表

unlock table [tableName] partition(dt=‘2014-04-01’); – 解锁某个分区

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

5. 可能出现的问题

a. LockManager没有指定

60d24fd30791498f3e0ef4794b49afd2.png

需要执行命令:

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中的锁所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部