hive 表锁、分区锁

场景:

在执行insert into或insert overwrite任务时,觉得hive速度有点慢,中途手动将程序停掉,改成了spark的引擎继续跑数,然后出现卡死情况(无法提交MapReduce),只能执行查询操作,而drop insert操作均执行不成功,无论执行多久,都会保持卡死状态。

原因:

hive表被锁或者某个分区被锁,需要解锁。hive存在两种锁,共享锁Shared (S)和互斥锁Exclusive (X)。

其中只触发s锁的操作可以并发的执行,只要有一个操作对表或者分区出发了x锁,则该表或者分区不能并发的执行作业,

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

操作:

show locks table_name; --查看表被锁的情况

unlock table table_name; – 表解锁

unlock table table_name partition(day=‘2018-08-16’); – 某个分区解锁

lock table dws_prem_m_bak_20180630 exclusive ; – 锁表

当分区不存在或是没数据分区被锁上,锁解不开的情况发生时,需要添加分区,然后解锁:

01、alter table table_name add partition (day=‘2018-08-16’);

02、unlock table table_name partition(day=‘2018-08-16’);

转载: https://zhuanlan.zhihu.com/p/42204989

### Hive动态分区的使用教程、配置与示例 #### 一、Hive动态分区概述 Hive中的动态分区功能允许在数据加载过程中根据实际数据内容自动生成并填充分区字段[^2]。相比静态分区,动态分区减少了手动维护分区的工作量,提高了灵活性。 #### 二、必要配置 为了启用Hive动态分区功能,需调整以下关键参数: - `hive.exec.dynamic.partition`:用于开启动态分区功能,默认值为`false`。将其设置为`true`即可激活该功能。 - `hive.exec.dynamic.partition.mode`:定义动态分区的操作模式。当设为`nonstrict`时,允许所有分区字段均为动态分区;而`strict`模式下,则要求至少有一个分区字段为静态分区[^3]。 具体配置命令如下: ```sql SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; ``` 此外,还可以通过其他参数优化性能或控制分区数量: - `hive.exec.max.dynamic.partitions.pernode`:单个节点上允许创建的最大动态分区数,默认值为1000。 - `hive.exec.max.dynamic.partitions`:整个作业中允许创建的最大动态分区总数,默认值为1000。 #### 三、动态分区插入数据示例 假设有一张名为`samples`的,其结构包含两个分区字段`year`和`month`以及若干常规列。可以通过以下SQL语句实现基于动态分区的数据插入操作: ```sql -- 创建目标 samples,其中 year 和 month 是分区字段 CREATE TABLE IF NOT EXISTS samples ( id INT, name STRING, value DOUBLE ) PARTITIONED BY (year INT, month INT); -- 启用动态分区相关配置 SET hive.exec.dynamic.partition = true; SET hive.exec.dynamic.partition.mode = nonstrict; -- 插入数据到samples,并利用动态分区特性 INSERT INTO TABLE samples PARTITION(year, month) SELECT id, name, value, YEAR(event_date), MONTH(event_date) FROM source_table; ``` 上述代码片段展示了如何从源`source_table`提取数据,并依据事件日期(`event_date`)计算出对应的年份和月份作为分区键值。 #### 四、注意事项 尽管动态分区提供了极大的便利性,在实际应用中仍需要注意以下几个方面: - 数据倾斜可能导致某些分区过大或者过小,影响查询效率; - 如果未合理设定最大分区数目限制(如`hive.exec.max.dynamic.partitions`),可能会因过度分割而导致资源耗尽问题。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值