- 浏览: 112034 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
flume 自定义source -
土豆蛋儿:
大神,您好。
flume 自定义source
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;
使用案例
并发支持 (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 + hbase
2015-01-04 10:42 773环境配置: hadoop-2.0.0-cdh4.3.0 (4 ... -
hive 数据倾斜
2014-08-27 09:03 687链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 576总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 739索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1148设置索引: 使用聚合索引优化groupby操作 hive> ... -
Hive 中内部表与外部表的区别与创建方法
2014-08-15 17:11 763分类: Hive 2013-12-07 11:56 ... -
hive map和reduce的控制
2014-08-15 16:14 625一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1769Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 881修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1189HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30701.sort_array(): sort_array(arra ... -
hive lateral view
2014-08-09 14:59 2026通过Lateral view可以方便的将UDTF得到的行转列的 ... -
hive数据的导出
2014-07-28 21:53 445在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中 ... -
hive udaf
2014-07-25 16:11 755package com.lwz.udaf; import o ... -
hive自定义InputFormat
2014-07-25 09:13 862自定义分隔符 package com.lwz.inputf; ... -
HiveServer2连接ZooKeeper出现Too many connections问题的解决
2014-07-24 08:49 1768HiveServer2连接ZooKeeper出现Too man ... -
hive 常用命令
2014-07-17 22:22 6961.hive通过外部设置参数传入脚本中: hiv ... -
CouderaHadoop中hive的Hook扩展
2014-07-16 21:18 3338最近在做关于CDH4.3.0的hive封装,其中遇到了很多问题 ... -
利用SemanticAnalyzerHook回过滤不加分区条件的Hive查询
2014-07-16 16:43 1468我们Hadoop集群中将近百分之80的作业是通过Hive来提交 ... -
hive 的常用命令
2014-07-16 10:07 0设置、查看hive当前的角色: set sys ...
相关推荐
hive实现并发机制:hive里,同一sql里,会涉及到n个job,默认情况下,每个job是顺序执行的。 如果每个job没有前后依赖关系,可以并发执行的话,可以通过设置该参数 set hive.exec.parallel=true,实现job并发执行...
Hive 优化方法整理 Hive 优化方法整理是 Hive 数据处理过程中的重要步骤,涉及到 Hive 的类 SQL 语句本身进行调优、参数调优、Hadoop 的 HDFS 参数调优和 Map/Reduce 调优等多个方面。 Hive 类 SQL 语句优化 1. ...
同时,由于Hive是分布式系统,网络延迟和并发控制也是需要考虑的因素。 总结来说,“数据库工具连接Hive的驱动包”是连接Hive和数据库管理工具的桥梁,它的正确配置和使用对于高效的数据操作至关重要。了解并掌握...
如果设置为true,则Hive将开启map/reduce job的并发提交,默认值为false。 15. hive.security.authorization.enabled 该参数决定了Hive是否开启权限认证。如果设置为true,则Hive将开启权限认证,默认值为false。 ...
- **版本兼容性**:确保Hive JDBC驱动的版本与Hive服务器的版本兼容,不同版本间可能存在API差异或不兼容问题。 - **性能优化**:通过设置连接池,如C3P0或HikariCP,可以提高并发查询的性能和资源利用率。 了解并...
由于版本问题,用户可能会遇到兼容性问题,因此找到与 Hive 版本相匹配的 JAR 文件至关重要。这个压缩包提供的是一套经过测试、可用的组件,对于那些在寻找合适 JAR 文件的人来说,是一个宝贵的资源。
7. **错误处理和调试**:Hive JDBC提供了详细的错误信息和日志记录,帮助开发者诊断和解决连接、查询或数据加载等问题。 8. **API文档**:Hive-jdbc-3.1.1.zip可能包含了Javadoc文档,这为开发者提供了详细的API...
7. guava-14.0.1.jar:Google的Guava库,提供了很多Java基础库的增强功能,如集合、并发、缓存等。 8. datanucleus-core-4.1.6.jar:DataNucleus是一个开源的JDO和JPA实现,Hive可能使用它来处理持久化存储,如元...
Impala 并发查询缓慢问题的另一个主要原因是 Parquet 表由 Hive 或者 Spark 生成。如果重新生成这些 Parquet 表,可以解决这个问题。 优点: * 不影响已有的业务系统 * 不需要修改业务系统的ETL程序和Hive/Spark的...
Hive 3.1.2是Hive的一个稳定版本,它引入了许多改进和新特性,例如增强的性能、更高的并发性和更好的容错性。 在Hive中,元数据(如表的结构、分区信息等)的存储通常有两种方式:本地元数据存储和远程元数据存储。...
使用过程中可能遇到的问题包括无法找到Java编译器等,解决这些问题通常需要复制JDK目录下的`tools.jar`到Hive的lib目录,并将Ant的相关jar文件复制到Hive的lib目录。 - **Jar**: 类似于Hadoop Jar,Hive也支持通过...
Hive JDBC是Apache Hive项目的一部分,它提供了一个Java数据库连接(JDBC)接口,使得Java应用程序可以方便地与Hive进行交互。...在大规模并发环境下,考虑使用HiveServer2和Beeline等更高效的方式进行连接。
默认情况下,Hive使用内嵌的Derby数据库作为元数据库,但考虑到并发访问和性能问题,推荐使用MySQL作为元数据库。首先,我们需要安装MySQL服务器: ``` apt-get install mysql-server -y service mysql start `...
在大数据处理领域,MySQL作为一款常用的在线事务处理(OLTP)数据库系统,常常用于存储实时、高并发的数据。而Hive则是一种基于Hadoop的数据仓库工具,它提供了SQL-like的查询语言(HQL)来处理分布式存储的大规模...
12. **多版本并发控制**: 如果Hive部署在多用户环境中,理解Hive的MVCC(多版本并发控制)机制将有助于优化并发性能。 13. **安全性**: Hive JDBC支持认证和授权,例如Kerberos、LDAP等,确保只有授权用户能访问...
- 当遇到连接问题时,检查Hive服务器的状态,确认MySQL服务是否正常运行,以及Hive配置是否正确。 - 对于大型数据查询,考虑使用预编译的`PreparedStatement`和批处理操作以提高性能。 通过以上步骤,你将能够...
Hive是Facebook开发并且开源的一个基于Hadoop的数据仓库工具,它主要用于解决MapReduce实现复杂查询逻辑时面临的高学习成本和长项目周期的问题。Hive将HDFS上的结构化数据映射为数据库表,并提供了类SQL查询语言HQL...
1. **Hive与HBase的集成背景**:介绍为什么需要将Hive与HBase整合,通常是因为需要结合Hive的数据处理能力与HBase的实时查询和高并发性能。 2. **Hive-HBase连接器**:文件"hive-hbase-handler-1.2.1.jar"是Hive...
- Tez是Hive的另一种执行引擎,相比MapReduce提供了更低延迟和更高的并发性。 - Hive与Ranger的集成实现了细粒度的权限管理,确保数据安全性。 11. **Hive3新特性** Hive3引入了LLAP(Live Long and Process)...