`
yugouai
  • 浏览: 497539 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hive锁与并发模型

 
阅读更多

Hive 并发模型

使用案例

并发支持 (http://issues.apache.org/jira/browse/HIVE-1293) 是数据库的必须,而且他们的使用案例很好懂。至少,我们要尽可能支持并发读和写。添加几个发现当前已经锁定的锁,是有用的。这里没有一个直接的需求添加一个API显式获取锁,所以,所有锁都是隐式获取的。

 

hive定义一下模式的锁(注意不需要意向锁)

  • 共享 (S)
  • 排他 (X)

见名知意,多个共享锁可以同时获取,而排他锁会阻塞其他锁。

 

兼容性列表如下:

  • *
Existing Lock S X
Requested Lock
  • *
  • *
  • *
S
  • *
True False
X
  • *
False False

对于一些操作,锁的性质是有层次的。例如,一些分区操作,表也是被锁定(例如,保证表的分区正在创建时,表不能被删除)

 

锁模式获取背后的原理如下:

 

对于非分区表,锁定模式相当直观。当表正在读取时,一个S锁被获取。而对其他操作(插入数据到表,修改表的任何属性)就要获取X锁。

 

对于分区表,原理如下:

当读取表分区时,会获取表的S锁。对于其他操作,会获取分区的X锁。但是,如果修改仅仅是针对新分区,就会获取表的S锁,而修改是针对所有分区,会获取表的X锁。

 

所以,当旧分区读写时,新分区也可以被转换为RCFile。

 

无论何时,分区被锁定时,会获取所有的它的父节点的S锁。

 

基于这,操作的锁获取如下:

Hive Command Locks Acquired
select .. T1 partition P1 S on T1, T1.P1
insert into T2(partition P2) select .. T1 partition P1 S on T2, T1, T1.P1 and X on T2.P2
insert into T2(partition P.Q) select .. T1 partition P1 S on T2, T2.P, T1, T1.P1 and X on T2.P.Q
alter table T1 rename T2 X on T1
alter table T1 add cols X on T1
alter table T1 replace cols X on T1
alter table T1 change cols X on T1
alter table T1 add partition P1 S on T1, X on T1.P1
alter table T1 drop partition P1 S on T1, X on T1.P1
alter table T1 touch partition P1 S on T1, X on T1.P1
*alter table T1 set serdeproperties * S on T1
*alter table T1 set serializer * S on T1
*alter table T1 set file format * S on T1
*alter table T1 set tblproperties * X on T1
drop table T1 X on T1

为了避免死锁,这里提出一个非常简单的计划.所有锁定的对象按照字典排序,然后在按照锁定模式获取。注意一些场景,对象列表可能不知道——例如,动态分 区,编译时不知道正在修改的分区列表。所以,列表会保守生成,由于分区的数量可能不知道,所以会在表或所知的前缀上获取排他锁。

 

添加两个可配置的参数,决定锁尝试时,锁尝试次数和等待时间。如果重试的次数是非常高的,它可以导致一个活锁。参考zookeeper recipes(http://hadoop.apache.org/zookeeper/docs/r3.1.2/recipes.html#sc_recipes_Locks),理解如何使用zookeeper apis实现read/write锁。需要注意的是,不是等待的锁请求将被拒绝。存在的锁将会释放,然后等待的锁会在尝试周期后继续尝试。

 

因为锁的分层特性,上面列出的规定recipe将无法正常工作:

 

表T的S锁规定如下:

调用create( ),创建一个路径名为"/warehouse/T/read-"的节点。协议中,这个锁定的节点会在后面使用。保证设置序列和临时标志。

在锁定的节点调用getChildren( ),不设置watch的标记

如果已经有一个子节点,路径名以"write-"和一个更小的序列号数字开头,已经被获取了,那么这个锁不能被获取。删除第一步骤创建的节点,返回。

否则授权锁。

 

表T的X锁规定如下:

调用create( ),创建一个路径名为"/warehouse/T/write-"的节点。协议中,这个锁定的节点会在后面使用。保证设置序列和临时标志。

在锁定的节点调用getChildren( ),不设置watch的标记

如果已经有一个子节点,路径名以"read-"或者"write-"和一个更小的序列号数字开头,已经被获取了,那么这个锁不能被获取。删除第一步骤创建的节点,返回。

否则授权锁。

 

拟定的计算,为了读饥饿了写,如果遇到长时间的读,会导致写的饥饿。

这个默认hive行为不会改变,并发不会支持。

 

关闭并发

关闭并发,可以修改下面的变量为false: hive.support.concurrency

 

调试

查看表的锁,可以执行下面的命令:

SHOW LOCKS <TABLE_NAME>;
SHOW LOCKS <TABLE_NAME> extended;
SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>);
SHOW LOCKS <TABLE_NAME> PARTITION (<PARTITION_DESC>) extended;

 

分享到:
评论

相关推荐

    mysql数据抽取,自动生成hive建表语句

    首先,我们需要理解MySQL与Hive之间的数据模型差异。MySQL通常使用行式存储,支持复杂的事务处理,适合频繁的读写操作;而Hive则采用列式存储,适用于大数据批处理,不支持事务,但适合大规模数据分析。因此,在从...

    hive高级分析函数与优化.rar_hive_hive 函数优化_hive 分析 大数据_hive高级优化_oldwlc

    综合来看,这份“Hive高级分析函数与优化”的资料涵盖了从基础的Hive函数使用到高级的系统优化策略,是深入理解和提升Hive技能的宝贵资源。通过阅读其中的PDF文档,读者可以了解到如何有效地利用Hive进行大数据分析...

    Hive大数据仓库-笔记整理 (一)2020年最新版.pdf

    8. **Hive的并发性**:Hive支持多用户同时访问,通过Hive Metastore服务来处理并发的元数据访问,并且可以通过配置Hive Server2以支持多会话并发执行。 9. **Hive的生命周期管理**:Hive提供DDL(Data Definition ...

    阿里巴巴Hive学习笔记.docx

    - **数据模型**:Hive的数据存储模型基于文件,数据被组织成表,每个表可以有多个分区,这些分区通常对应于数据的时间戳或地理位置等维度。 - **文件格式**:Hive支持多种文件格式,如TextFile、SequenceFile、...

    java解决hive快速导数据到Hbase代码

    3. **预处理数据**:根据HBase的存储模型,可能需要对从Hive获取的数据进行预处理。例如,将Hive的宽表转换为HBase的窄行格式,或者按照HBase的行键规则进行数据重组。 4. **批量加载到HBase**:HBase提供了Bulk ...

    hive2.0源码

    3. **ACID Transactions**:Hive 2.0开始支持ACID(原子性、一致性、隔离性和持久性)事务,为多用户并发操作提供了更强的保障。 4. **Optimizations**:例如,基于成本的优化器(CBO)使用统计信息来选择最佳查询...

    大数据系列-Hive入门与实战.pptx

    Hive最初由Facebook开发,旨在解决海量数据的存储和统计分析问题,特别是为了简化MapReduce编程模型的复杂性。自2008年贡献给Apache基金会后,Hive逐渐发展成为一个成熟的开源项目,目前最新的稳定版本是hive-2.0.0...

    Hive用户指南(Hive_user_guide)_中文版

    - **数据模型**:Hive的数据模型更接近于文件系统,而传统数据库则采用表格形式。 - **数据存储**:Hive存储在HDFS上,而传统数据库通常存储在本地文件系统或专用的存储设备上。 - **实时性**:传统数据库支持...

    大数据hadoop,spark,hive等等面试汇总

    面试中可能涉及HiveQL语法、Hive与传统SQL的区别、Hive的元数据存储、以及Hive如何与Hadoop生态系统集成等知识点。 HBase作为NoSQL数据库,是Hadoop生态系统的一部分,用于存储非结构化和半结构化数据。它提供了...

    Hive语法详解.docx (排版清晰,覆盖全面,含目录)

    #### 五、采样与锁机制(Hive高级) - **Random sampling**:随机采样。 - **Bucket tablesampling**:基于分桶表的采样。 - **Block sampling**:基于块的采样。 - **Hive锁**:管理并发操作的安全性。 通过以上...

    hive、Hbase、mysql的区别.docx

    Hive和Hbase的差异主要体现在延迟、数据模型和使用场景上。Hive是高延迟的,适合分析大量静态数据;而Hbase则提供了低延迟的查询,适用于需要快速响应的在线服务。 2. Hive与数据库的比较: - 查询语言:Hive采用...

    hive和HBASE.zip

    【标题】:Hive与HBase的集成与应用 【描述】:本压缩包包含Apache Hive 1.2.2和HBase 1.2.6的安装包,旨在介绍如何在大数据处理环境中将这两个组件结合使用,实现高效的数据存储和查询。 【标签】:Hive、HBase、...

    Doris介绍、原理、安装、集成hive

    为了更好地利用现有Hive生态中的数据资源,Doris提供了与Hive的集成方案。这允许用户在Doris中查询Hive中的数据,无需移动数据,同时也保持了Doris的高性能优势。具体步骤包括: 1. **创建Hive表映射**:在Doris中...

    hive开发资料.pdf

    Hive 的优势在于它的易用性,尤其是对于熟悉 SQL 的用户来说,无需学习新的编程模型。此外,Hive 还可以与其他 Hadoop 生态系统组件集成,如 Pig、HBase 和 Spark,实现更丰富的数据处理和分析功能。然而,由于 Hive...

    基于Facebook的Hive开发

    Hive引入了新的并发模型来支持读写并发操作,这对于大型企业的实时数据分析非常重要。 - **使用案例**:支持并发读写操作,提高了系统的整体吞吐量。 - **锁机制**:包括共享锁和排他锁,确保数据的一致性和完整性...

    大数据-数据迁移-hive、hbase、kudu迁移

    迁移Kudu时,需要考虑其独特的存储模型和分布式特性。可能的策略是先导出数据到HDFS,然后使用脚本或工具如Kudu Bulk Import进行数据加载。在新环境中,需要重新创建表结构,并确保主键和副本分布策略的匹配。 再者...

    hadoop、hbase、hive等相关面试问题

    - **并发模型**:Scala通过Actor模型提供了更优雅的并发解决方案,而Java传统上使用多线程模型。 #### 10. Spark的特点 **知识点解析:** - **内存计算**:Spark通过将数据缓存在内存中,显著提高了数据处理的...

    hive基础知识复习笔记.zip

    Hive是Apache软件基金会开发的一...以上就是关于Hive基础知识的复习,包括其架构、语言、数据模型、存储、性能优化以及与Hadoop生态系统的交互等方面。掌握这些要点,将有助于理解Hive在大数据处理中的作用和使用方式。

    Hive权限设置说明文档

    1. `hive.support.concurrency`:设置为`true`启用元数据锁定,以支持并发操作。 2. `hive.enforce.authorization`:设置为`true`开启Hive的权限检查。 3. `hive.metastore.execute.setugi`:设置为`true`,使Hive ...

Global site tag (gtag.js) - Google Analytics