在将数据从配置单元导出到db2时,sqoop导出是否会发出任何锁定? 它会发出什么类型的锁?如果有锁,这些锁是如何释放的?
由于在同一个db2表上运行并行sqoop导出进程,因此出现验证错误。因此,想知道是否发出了锁和什么类型的锁。
答案 0 :(得分:0)
是的,Aavik,DB2支持锁。共有三种类型的锁。
1. S lock (share)
2. U lock (update)
3. X lock (exclusive)
当您扫描表以读取数据时,例如,执行select * from table where <condition>
时,它将对表进行读取操作,当从表中读取数据时,它将对表施加S锁,这意味着其他请求可以读取数据,但不能更新或写入。
在表上进行事务处理时,它会应用U锁。
当您插入新数据时,它会获得X锁,这意味着它不允许任何读取操作或更新操作。
因此,当您从Hive导出到DB2时,它获得X锁定 该表,因为它正在插入新记录。
进行sqoop导入时,它将获得表上的S锁。
这是一个非常普遍的问题,您有很多选择可以解决此问题。
1. maintain separate views/Tables for regular transactions.
2. Increase number of max retries or write a shell script which checks if DB2 is free from locks, basically you've to create a dependency, I know this will become bit complicated, there may be better ways to do though.
希望这可以使您更好地理解。