Hive中的锁
Hive 锁机制是为了让 Hive 支持并发读写而设计的 ,另外要解决并发读写的情况下”脏读“ (Read uncommited)的问题。脏读的问题本身通过实现了原子的 reader/writer 已经得到解决(https://issues.apache.org/jira/browse/HIVE-829)和锁机制并不绑定。
关闭锁机制
可以通过设置 hive.support.concurrency=fasle
来解决锁的问题
关闭锁机制会造成下面影响:
- 并发读写同一份数据时,读操作可能会随机失败
- 并发写操作的结果在随机出现,后完成的任务覆盖之前完成任务的结果
- SHOW LOCKS, UNLOCK TABLE 会报错
案例
前面遇到过一次因为Hive
中表被锁住了,导致定时任务一直失败。这两天又出现了表被锁,原因是连接hiveserver2
过于频繁,mysql
连接被打满,引发的连锁反应,导致我们的小时任务一直失败,下午重点注意到这个问题,才解决好。
在执行insert into
或insert overwrite
任务时,中途手动将程序停掉,会出现卡死情况(无法提交MapReduce),只能执行查询操作,而<