hive中使用iceberg表格式时锁表总结

news/2024/5/19 16:10:34/文章来源:https://www.cnblogs.com/30go/p/16669666.html

1. 原因

写入iceberg表时,会在hive_locks表中插入一条记录,表示该表正在被写入(hive中的独占锁)
image
当数据插入完成后,会自动删除该条记录。

2. 出现场景

(1)在同时往同一个iceberg表中写入数据时,会出现Retrying task after failure: Waiting for lock之类的警告信息

如果有一个表正在写入中,并且在hive_locks中插入了一条记录。并且有另一个任务也在写入该表,就会出现这个警告信息,等待前面的任务执行完成后,这个任务就会自动执行下去,此时不需要进行任何其他的操作。

但是如果前面一个任务写入表的时候,突然中断了,导致在hive_locks表中这条记录没有删除,那么就会一直出现这个错误,此时的解决方法是手工删除hive_locks表中该表对应的锁记录。

(2)在删除表后,重新创建表时,也会出错,提示错误信息是该表存在。
在重新创建新表时,会去hive_locks这个表中校验是否存在正在写入的锁记录,如果存在,就会提示该表已存在的错误信息,此时也是相同的解决方案,手工删除hive_locks表中该表对应的锁记录。

3. Hive中的锁

3.1 锁的介绍

hive中存在两种锁,共享锁shared(S)和互斥锁exclusive(X)
共享锁 S 和 排他锁 X 它们之间的兼容性关系如下:
1)查询操作使用共享锁,共享锁是可以多重、并发使用的
2)修改表操作使用独占锁,它会阻止其他的查询、修改操作
3)可以对分区使用锁。

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

3.2 锁的常用操作

show locks tableName  --查看锁
unlock table 表名;  -- 解锁表
unlock table 表名 partition(dt='2014-04-01');  -- 解锁某个分区--如果这个命令无法执行,LockManager没有指定,这时候需要执行命令:
set hive.support.concurrency=true;
set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DummyTxnManager;--如果还不行,那么就直接去mysql的元数据表hive_locks中去执行:
delete from HIVE_LOCKS where HL_DB = 'xxx.db' and HL_TABLE = 'xxx_table';

3.3 锁配置

全局配置,修改hive-site.xml,配置如下

<property><name>hive.support.concurrency</name><value>true</value>
</property>
-- 单独锁表
lock table t1 exclusive;
--解除锁
unlock table t1;--关闭锁
set hive.support.concurrency=false;

配置条件

hive.lock.numretries #重试次数
hive.lock.sleep.between.retries #重试时sleep的时间

hive默认的sleep时间是60s,比较长,在高并发场景下,可以减少这个的数值来提供job的效率。

如何查看是否配置了锁?
我们在hive的webui中可以查看配置,http://hadoop:10002/conf
直接搜索 hive.support.concurrency
image

3.4 Hive(CDH4.2.0)的锁处理流程

应该是修改了源码。。。

1.首先对query进行编译,生成QueryPlan2.构建读写锁对象(主要两个成员变量:LockObject,Lockmode)对于非分区表,直接根据需要构建S或者X锁对象对于分区表:(此处是区分input/output)
If S mode:直接对Table/related partition 构建S对象
Else:If 添加新分区:构建S对象Else构建X对象
End3.对锁对象进行字符表排序(避免死锁),对于同一个LockObject,先获取Execlusive4.遍历锁对象列表,进行锁申请
While trynumber< hive.lock.numretries(default100):创建parent(node)目录,mode= CreateMode.PERSISTENT创建锁目录,mode=CreateMode.EPHEMERAL_SEQUENTIALFor Child:ChildrenIf Child已经有写锁:获取child写锁seqnoIf mode=X 并且 Child 已经有读锁获取child读锁seqnoIf childseqno>0并且小于当前seqno释放锁Trynumber++Sleep(hive.lock.sleep.between.retries:default1min)

以上对hive中的锁有个大概的了解。

4. Iceberg中的锁原理

摘录自网络的中的一段话:

数据文件的写和数据文件的元数据提交,分别通过Flink的两个算子IcebergStreamWriter和IcebergFilesCommitter来实现:
IcebergStreamWriter借助Flink DataStream的并发机制,将数据文件的写操作并行化,可互不影响地写数据;IcebergFilesCommitter 收集IcebergStreamWriter创建的数据文件,来创建manifest数据清单文件和快照的提交。
因为提交文件元数据涉及到资源竞争,因此在提交元数据端使用了并发控制:
Iceberg根据Catalog存储类型的不同,而使用不同的控制方式,
比如使用Hadoop Catalog时,Iceberg基于文件rename来保证元数据的提交不冲突
使用Hive Catalog或者 JDBC Catalog则使用数据库的锁或者MVCC来保证元数据的提交不冲突
那如何保证数据文件的写和数据文件元数据提交这两个阶段的原子性呢?
这就依赖Flink的Checkpoint两阶段提交机制了,一旦Flink Checkpoint成功完成,数据文件和元数据都外可见,否则快照失效。因为快照本身是不变的,所有基于快照的查询看到的结果都一样,因此保证了事务的ACID属性。
Iceberg快照保证了事务的ACID属性,解决了并发的读写问题。同时,因为快照本身记录了版本相关的元信息,比如快照的开始和结束时间、数据大小、行数、以及其他一些统计指标,因此Iceberg 快照具备了超过数据库快照更多的能力,尤其是在基于CBO的查询优化。

从这里可以了解到iceberg为了保证事务的ACID属性,解决并发的读写问题,使用到了数据库的锁,我们目前创建iceberg使用到的是hive_catalog,所以自然也就使用了hive中的数据库锁。
但是即使我们在hive中不配置锁,iceberg也是直接使用了hive的数据库中hive_locks表。

相关内容引用参考:
https://maimai.cn/article/detail?fid=1726689402&efid=CwV6BWN0RlCKeCTF98V2mQ
https://developer.aliyun.com/article/903837
https://blog.csdn.net/qq_40713537/article/details/118543513

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_5989.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker 环境 Nacos2 MySQL8

本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。本文介绍 docker 环境下安装并单机运行 Nacos2,使用 docker 环境下的 MySQL 8 存储数据。 1 拉取镜像 1.1 创建目录 在硬盘上创建 nacos 的有关目录: mkdir -p /Users/yygnb/dockerMe/…

FPGA之旅设计99例之第十三例-----FPGA在OLED上显示DHT11数据

一. 简介 这是FPGA之旅设计的第十三例啦&#xff0c;本例是一个综合性的例程&#xff0c;基于OLED屏幕显示&#xff0c;和DHT11温湿度采集&#xff0c;将DHT11采集到的温湿度显示到OLED屏幕上。 在开始本例之前&#xff0c;先补充一下&#xff0c;在上例中&#xff0c;代码中…

Webpack 打包 - 14. html压缩

这里使用 html-webpack-plugin 插件压缩 html 文件。 1.文件结构 2.代码 index.html<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>webpack</title> </head> <body> <!--这里…

《Hyperspectral Image Classification With Deep Feature Fusion Network》论文笔记

论文题目《Hyperspectral Image Classification With Deep Feature Fusion Network》 论文作者:Weiwei Song, Shutao Li, Leyuan Fang,Ting Lu 论文发表年份:2018 网络简称:DFFN 一、本文提出的挑战 1.由于光谱混合和光谱特征空间变异性的存在,HSIs通常具有非常复…

KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

KingbaseES 、repmgr案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作。若主节点已经失效,希望将异地备机提升为主节点。 $bin/repmgr standby promote 适用版本:KingbaseES V8R6 集群节点信息…

Postman和Jmeter的区别

Postman是一款功能强大的用于发送HTTP请求的Chrome插件&#xff0c;主要用于接口测试&#xff1b; Jmeter是apache公司基于java开发的一款开源压力测试工具&#xff0c;也可以用来进行接口测试。 很多同学经常将两款工具混淆&#xff0c;这里就为大家介绍一下二者的区别。 1…

Java 将Excel转为UOS

以.uos为后缀的文件,表示Uniform Office Spreadsheet文件,是一种国产的办公文件格式,该格式以统一办公格式(UOF)创建,使用XML和压缩保存电子表格。既有的Excel表格文件,可以通过格式转换的方式转换为UOS格式,本文将对此作相关介绍。 【导入jar包】 使用jar包:Spire.Xls…

Nginx log 日志分割

Nginx日志不处理的话,会一直追加,文件会变得很大 Linux nginx_log.sh#!/bin/bash date=$(date +%F -d -1day) cd /usr/local/nginx/logs if [ ! -d bak ] ; thenmkdir -p bak fi mv access.log bak/access_$date.log mv error.log bak/error_$date.log # /usr/bin/…

Cache一致性导致的踩内存问题【转】

转自:http://blog.coderhuo.tech/2019/07/28/DMA_mem_crash/ 本文主要分享一个Cache一致性踩内存问题的定位过程,涉及到的知识点包括:backtrace、内存分析、efence、wrap系统函数、硬件watchpoint、DMA、Cache一致性等。 1 背景 设备上跑的是嵌入式实时操作系统(RTOS,具体为…

9.7--prompt理论学习

但是这些表现低于有监督的方法&#xff0c;但是我们在工作当中&#xff0c;我们引入了PET 利用模板的训练 Pattern Exploiting Training(PET) 把分类变成了完形填空的问题&#xff0c;来帮助模型理解任务 最后卖弄一下他的论文 最后在训练集上运用了有监督的训练。 并且远远…

[NOIP2014 提高组] 飞扬的小鸟题解

[NOIP2014 提高组] 飞扬的小鸟题解 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏…

java1.8环境配置

https://blog.csdn.net/blbyu/article/details/126152202 可用,java1.8环境配置 最主要的是这个步骤,小心仔细看清楚 java1.8 下载 地址 https://www.oracle.com/java/technologies/downloads/#java8-windows 往下拉可用看到jdk8版本下载即可

iOS APP 转让避坑指南

背景 由于公司主体改变&#xff0c;跟进法务要求&#xff0c;需要将APP下面的主体改变成新主体。主体改变有两种途径&#xff1a; 直接在开发者账号-联系我们-会员资格和账户-组织名称更改。 通过App Store Connect 来进行APP转让&#xff0c;将APP转让到新主体下面。 第一…

Apple iPhone 14 Pro 药丸设计看不懂,药丸上面那条屏幕缝隙完全没有用处呀?

Apple iPhone 14 Pro 药丸设计看不懂,药丸上面那条屏幕缝隙完全没有用处呀?Apple iPhone 14 Pro 药丸设计看不懂,药丸上面那条屏幕缝隙完全没有用处呀?iPhone 14 Pro 不值得购买的原因不支持 Type-C (国外禁售罚款,欧盟;国内什么时间行动呀) 不配备充电器 (国外禁售罚…

操作系统学习笔记8 |段页式内存管理

多进程图像中的CPU管理已经告一段落,接下来要介绍另一大方面——内存管理。首先我们也来看看内存是如何被使用起来的。最后介绍段页式内存管理的实现过程。多进程图像中的CPU管理已经告一段落,接下来要介绍另一大方面——内存管理。首先我们也来看看内存是如何被使用起来的。…

阿里云的“终端云化”实践,基于ENS进行边缘架构构建

终端无休止的更新迭代,是软件对计算资源的需求激增。作者|王广芳 编辑|IMMENSE 终端云化:打破硬件的桎梏 近几年,“终端云化”技术开始规模化落地,其核心思想是“计算卸载”,即将智能终端的计算任务卸载到边缘云虚拟终端处理,解决终端设备在算力和存储等方面的不足…

数学建模—模糊综合评价模型

一、概述 1、数学归纳法和秃子悖论 数学归纳法&#xff1a;&#xff08;1&#xff09;当n1时&#xff0c;成立&#xff1b;&#xff08;2&#xff09;当nk时&#xff0c;成立&#xff1b;&#xff08;3&#xff09;只需要证明当nk1时&#xff0c;也成立&#xff1b;则推出对所…

3

1.宏与vba 宏是一系列函数和命令-----一组动作的组合 vba与vb:

ElasticSearch入门到入土手册请查阅

文章目录ElasticSearch来源用途Elasticsearch特点核心概念index语法查看索引创建索引删除索引TypeDocumentDocument的CRUD插入数据指定id使用自动生成id方式新增字段删除文档Mapping查看Mapping指定Mapping整体核心架构倒排索引分词ElasticSearch内置分词器Standard AnalyzerSi…