`
乡里伢崽
  • 浏览: 112040 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hive并发问题

    博客分类:
  • 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;
分享到:
评论

相关推荐

    Hive实现并发

    hive实现并发机制:hive里,同一sql里,会涉及到n个job,默认情况下,每个job是顺序执行的。 如果每个job没有前后依赖关系,可以并发执行的话,可以通过设置该参数 set hive.exec.parallel=true,实现job并发执行...

    Hive优化方法整理

    Hive 优化方法整理 Hive 优化方法整理是 Hive 数据处理过程中的重要步骤,涉及到 Hive 的类 SQL 语句本身进行调优、参数调优、Hadoop 的 HDFS 参数调优和 Map/Reduce 调优等多个方面。 Hive 类 SQL 语句优化 1. ...

    数据库工具连接hive的驱动包

    同时,由于Hive是分布式系统,网络延迟和并发控制也是需要考虑的因素。 总结来说,“数据库工具连接Hive的驱动包”是连接Hive和数据库管理工具的桥梁,它的正确配置和使用对于高效的数据操作至关重要。了解并掌握...

    hive参数配置说明大全

    如果设置为true,则Hive将开启map/reduce job的并发提交,默认值为false。 15. hive.security.authorization.enabled 该参数决定了Hive是否开启权限认证。如果设置为true,则Hive将开启权限认证,默认值为false。 ...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    - **版本兼容性**:确保Hive JDBC驱动的版本与Hive服务器的版本兼容,不同版本间可能存在API差异或不兼容问题。 - **性能优化**:通过设置连接池,如C3P0或HikariCP,可以提高并发查询的性能和资源利用率。 了解并...

    hive相关jar包

    由于版本问题,用户可能会遇到兼容性问题,因此找到与 Hive 版本相匹配的 JAR 文件至关重要。这个压缩包提供的是一套经过测试、可用的组件,对于那些在寻找合适 JAR 文件的人来说,是一个宝贵的资源。

    Hive-jdbc-3.1.1.zip

    7. **错误处理和调试**:Hive JDBC提供了详细的错误信息和日志记录,帮助开发者诊断和解决连接、查询或数据加载等问题。 8. **API文档**:Hive-jdbc-3.1.1.zip可能包含了Javadoc文档,这为开发者提供了详细的API...

    Hive2.x系列驱动,

    7. guava-14.0.1.jar:Google的Guava库,提供了很多Java基础库的增强功能,如集合、并发、缓存等。 8. datanucleus-core-4.1.6.jar:DataNucleus是一个开源的JDO和JPA实现,Hive可能使用它来处理持久化存储,如元...

    Impala并发查询缓慢问题解决方案.docx

    Impala 并发查询缓慢问题的另一个主要原因是 Parquet 表由 Hive 或者 Spark 生成。如果重新生成这些 Parquet 表,可以解决这个问题。 优点: * 不影响已有的业务系统 * 不需要修改业务系统的ETL程序和Hive/Spark的...

    hive3.1.2+mysql驱动.zip

    Hive 3.1.2是Hive的一个稳定版本,它引入了许多改进和新特性,例如增强的性能、更高的并发性和更好的容错性。 在Hive中,元数据(如表的结构、分区信息等)的存储通常有两种方式:本地元数据存储和远程元数据存储。...

    hive基础知识总结

    使用过程中可能遇到的问题包括无法找到Java编译器等,解决这些问题通常需要复制JDK目录下的`tools.jar`到Hive的lib目录,并将Ant的相关jar文件复制到Hive的lib目录。 - **Jar**: 类似于Hadoop Jar,Hive也支持通过...

    hive-jdbc-1.2.1-standalone

    Hive JDBC是Apache Hive项目的一部分,它提供了一个Java数据库连接(JDBC)接口,使得Java应用程序可以方便地与Hive进行交互。...在大规模并发环境下,考虑使用HiveServer2和Beeline等更高效的方式进行连接。

    大数据技术基础实验报告-Hive安装配置与应用.doc

    默认情况下,Hive使用内嵌的Derby数据库作为元数据库,但考虑到并发访问和性能问题,推荐使用MySQL作为元数据库。首先,我们需要安装MySQL服务器: ``` apt-get install mysql-server -y service mysql start `...

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

    在大数据处理领域,MySQL作为一款常用的在线事务处理(OLTP)数据库系统,常常用于存储实时、高并发的数据。而Hive则是一种基于Hadoop的数据仓库工具,它提供了SQL-like的查询语言(HQL)来处理分布式存储的大规模...

    jdbc hive相关jar包

    12. **多版本并发控制**: 如果Hive部署在多用户环境中,理解Hive的MVCC(多版本并发控制)机制将有助于优化并发性能。 13. **安全性**: Hive JDBC支持认证和授权,例如Kerberos、LDAP等,确保只有授权用户能访问...

    java操作Hive源码之HiveJDBC实例(mysql数据库)

    - 当遇到连接问题时,检查Hive服务器的状态,确认MySQL服务是否正常运行,以及Hive配置是否正确。 - 对于大型数据查询,考虑使用预编译的`PreparedStatement`和批处理操作以提高性能。 通过以上步骤,你将能够...

    hive-part1-基础知识.pdf

    Hive是Facebook开发并且开源的一个基于Hadoop的数据仓库工具,它主要用于解决MapReduce实现复杂查询逻辑时面临的高学习成本和长项目周期的问题。Hive将HDFS上的结构化数据映射为数据库表,并提供了类SQL查询语言HQL...

    Hive整合HBase资源文件.zip

    1. **Hive与HBase的集成背景**:介绍为什么需要将Hive与HBase整合,通常是因为需要结合Hive的数据处理能力与HBase的实时查询和高并发性能。 2. **Hive-HBase连接器**:文件"hive-hbase-handler-1.2.1.jar"是Hive...

    第6章:Hive性能优化及Hive3新特性1

    - Tez是Hive的另一种执行引擎,相比MapReduce提供了更低延迟和更高的并发性。 - Hive与Ranger的集成实现了细粒度的权限管理,确保数据安全性。 11. **Hive3新特性** Hive3引入了LLAP(Live Long and Process)...

Global site tag (gtag.js) - Google Analytics