1.背景
在数据仓库开发中,遇到了读取数据任务导致锁表问题,发现是因为补数据或月度大任务跨天运行,此时凌晨定时的写入操作就会被阻塞进入等待状态(如果超过最大等待时间会失败),直到读取任务完成写入任务才可以继续运行,导致当天结果层数据输出延迟。因此分析并总结下锁表机制原理以及解决方式。
2.锁机制及原理分析
Hive 目前主要有两种锁,SHARED(共享锁 S)和 Exclusive(排他锁 X),同时又分表锁与分区锁,分区锁为最小粒度;共享锁 S 和 排他锁 X 它们之间的兼容性矩阵关系如下:
解释:
- 1)表锁与分区锁,分区锁为最小粒度(如果表锁未锁写入的分区,是可以执行写入任务的)
- 2)查询操作使用共享锁(S锁),共享锁是可以多重、并发使用的(就是说其他查询也可以挂S锁,并发查询不会阻塞修改会阻塞)
- 3)修改表操作使用独占锁(X锁),它会阻止其他的查询、修改操作
- 4)S锁和X锁同时出现会出现死锁情况(查询和写入不可同时发生)
以下情况会出发锁,以及它的类型和锁定范围如下:
Hive Command |
Lo |