hive 连接url及acid事务配置

apache hive:
    数据仓库,通过sql语句很方便的读、写、管理分布式系统中的大数据集,hadoop上层的工具。    
    1.通过sql语句访问数据,可以支持ETL(extract/transform/load)、报表和数据分析等。
    2.支持丰富的数据格式,加强数据结构化
    3.既可以直接访问hadoop上的数据,也可以访问hbase之类的数据存储系统上的数据。
    4.支持通过Tez、spark、MapReduce查询引擎查询数据。
并不是设计用来OLTP,最佳使用场所就是替代传统的数据仓库,有极强的伸缩性,扩展机器、高性能,容错,数据格式宽泛。

组件:
    HCatLog:允许用户使用不同的数据处理工具,如pig、MapReduce等,更容易读写集群上的数据,是hadoop上的表和存储管理层。
    WebHCat:提供一些特别的服务,可以使用HTTP(REST风格)接口来运行MapReduce或者Yarn、pig、hive
jobs任务,或者来管理hive配置。

HiveServer2客户端:
1.beeline:
    基于sqlline的一个jdbc客户端(http://sqlline.sourceforge.net/),hive为嵌入模式时类似hive
cli,远程模式时,通过thrift连接到hiveserver进程。
    远程模式的hiveserver仅仅支持thrift调用,通过http方式时也一样,请求体中包含thrift的有效载荷。 
    eg:beeline -u jdbc:hive2://localhost:10000/default -n scott -w password_file    
    支持命名的url,设置一个环境变量指定连接的url,通过环境变脸连接的到hive,BEELINE_URL_<name>,如BEELINE_URL_BLUE
可以通过!connect blue 连接到hive。  

2.jdbc:
    链接URL:
    jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;sess_var_list?hive_conf_list#hive_var_list
    host:port >> 默认端口是10000,如果为空则使用嵌入式的服务,如果启用服务发现,可以使用逗号分隔的多个。
    dbName:初始数据库的名称,一般为default
    sess_var_list:分号分隔的键值对,如user=admin;password=admin
    hive_conf_list:y,用于配置该session使用的hive配置项。
    hive_var_list:分号分隔的键值对,设置该session的hive变量。
    如果使用嵌入的服务:jdbc:hive2://

    如果hiveserver2运行在http模式:
        jdbc:hive2://<host>:<port>/<db>;transportMode=http;httpPath=<http_endpoint>
        1.<http_endpoint> is the corresponding HTTP endpoint configured in hive-site.xml. Default value is cliservice.
        2.默认端口是10001

    如果hiveserver2服务启用了ssl:
        jdbc:hive2://<host>:<port>/<db>;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>
    如果在http模式启用了ssl:
        jdbc:hive2://<host>:<port>/<db>;ssl=true;sslTrustStore=<trust_store_path>;trustStorePassword=<trust_store_password>;transportMode=http;httpPath=<http_endpoint>

    如果启用了zookeeper服务:
        在hive 2.0和1.3的版本中,一些额外的配置参数不需要写在链接URL中,比如认证模式、传输模式、ssl的参数等,这些可以通过zookeeper获取。
        jdbc:hive2://<zookeeper quorum>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
        zookeeper quorum:jktest163:2181,jktest161:2181,jktest180:2181 
    驱动类:
    org.apache.hive.jdbc.HiveDriver

hive中的acid事务:
    启用acid的表才可以执行update操作。
    1.begin、commit、rollback还不支持,计划中,所有的更改、删除等都是自动提交的。
    2.目前仅ORC格式的文件支持事务。
    3.默认事务是关闭的。
        必须的参数:
        hive.support.concurrency=true
        hive.enforce.bucketing=true  (hive 2.0中不需要配置)
        hive.exec.dynamic.partition.mode = nonstrict
        hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
        hive.compactor.initiator.on = true 
        hive.compactor.worker.threads  = n (n>0) 
    4.启用事务的表必须启用bucketed功能,同一系统中不使用事务的表,不需要启用bucketed。
    5.目前仅仅支持快照级别的隔离级别。当发生一个查询时,会使用一份一致的数据快照,来执行查询。现在还不支持脏读、读已提交、可重复读以及serializable。
    6.已存在zookeeper和内存锁管理器与事务不兼容。
    7.使用oracle作为Metastore数据库,并且设置datanucleus.connectionPoolingType=BONECP,可能会提示No such lock... 和 No such transaction错误,推荐设置datanucleus.connectionPoolingType=DBCP。

启用事务时表属性设置:
    transactional=true必须要设置 1.1.0版本之后,大小写不敏感
    如果表拥有者不希望系统决定什么时候执行合并操作,创建表时可以设置NO_AUTO_COMPACTION属性。也可以通过alter语句修改。(表属性通过TPLPROPERTIES子句设置) 1.1.0版本之后,大小写不敏感
    创建支持事务的表示例:
        create table if not exists users (username string,host string,updates int,last_change timestamp) clustered by (username) into 10 buckets stored as orc tblproperties('transactional'='true')

语法的一些改变:
    添加了show transactions 和 show compactions命令。
    show locks 修改以显示与事务相关的锁。
    alter table 添加了一个新的选项,用于将表或分区压缩。
        ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] COMPACT 'compaction_type';

设计原理:
    HDFS不支持文件修改(支持读取、新增、删除),当另一个用户在向文件追加数据时,对其它的用户也不提供读取的一致性。表和分区的数据存储在一个base文件集合中,新增的记录、修改及删除的信息,存储在一个delta集合中。hive为每一个修改表或分区的事务创建一个新的delta文件集合。当读取的时候,会合并base集合和delta集合的文件,并且应用更新和删除操作。
    delta文件的压缩:
         delta文件的改变合并到base文件集合中。为了做这个工作,Hive的metastore中添加了一些线程,这些线程负责决定什么时候要执行压缩,并执行压缩的具体工作,最后还要进行无用资源的清理工作。有两种类型的压缩:
         Minor:对于每一批数据,把delta集合中的多个文件,重写成一个单独的delta文件。
         Major:对于每一批数据,把一个或多个delta文件和这批数据的base文件重写成一个单独的base文件。
    所有的压缩操作都在后台进行,并不会影响数据的并发读写。当所有读取旧文件的任务完成之后,系统删除这些旧的文件。
    压缩是一个以<hostname>-compactor-<db>.<table>.<partition>这种格式命名的MR任务。
锁管理:
    DbLockManager:新添加的锁管理器,所有的锁信息存储到metastore中。这意味着事务和锁都被持久化了,服务死掉后,这些信息并不会丢。为了防止因为客户端失去连接,而留下无效的事务和锁信息,锁的持有者和事务的发起者需要向metastore发送心跳数据,当超时后,事务和锁会被撤销掉。
    在hive
    1.3.0版本,当锁管理器不能获取锁时,会等待一段时间后重试。为了防止短查询给metastore造成太大压力,每次尝试等待时间都会翻倍。初始的等待时间是100ms,最大等待时间由hive.lock.sleep.between.retries参数设置,hive.lock.numretries设置重新尝试的次数,
 

转载于:https://my.oschina.net/sskxyz/blog/725987

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值