Hive中的锁的用法和使用场景

Hive中的锁的用法和使用场景,第1张

前面遇到过一次因为 Hive 中表被锁住了,导致定时任务一直失败。这两天又出现了表被锁,原因是连接 hiveserver2 过于频繁, mysql 连接被打满,引发的连锁反应,导致我们的小时任务一直失败,下午重点注意到这个问题,才解决好。

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

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

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

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

锁的基本机制是:

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

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

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

查看表被锁的情况:

常规解锁方法:

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

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

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

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

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

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

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

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

(已安装则跳过)

yum -y install wget

安装这个包后,会获得两个mysql的yum repo源:

修改配置文件/etc/my.cnf,添加

然后,重启服务:

MYSQL就可以无密码登录了

删除配置文件my.cnf中的skip-grant-tables

重启服务: systemctl restart mysqld

使用密码登录: mysql -uroot -p

注:需要关闭centos防火墙

查看版本号:

mysql -V

启动mysql服务

systemcl start mysqld.service

停止mysql服务

systemctl stop mysqld.service

重启mysql服务

systemctl restart mysqld.service

查看mysql服务当前状态

systemctl status mysqld.service

设置mysql服务开机自启动

systemctl enable mysqld.service

停止mysql服务开机自启动

systemctl disable mysqld.service

rpm -qa|grep mariadb

rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64

输出内容最后root@localhost:XXXXXXXX中的XXXX为初始密码

编写后保存


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8665089.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存