hive sql 多行注释_访问Hive数据的几种骚姿势

本文介绍了多种访问Hive的方法,包括通过Python的PyHive库,Java的JDBC和MyBatis,以及SpringBoot的整合。详细讲述了Python的依赖安装,Java的Jdbc连接,MyBatis的配置,以及SpringBoot中数据源的切换和资源管理。还强调了Hive不支持事务操作,并提供了数据量防御策略。
摘要由CSDN通过智能技术生成
045d55785c126f94ef88093e8e03a8f0.png

关于Hive访问的几个名词

  • metadata :hive元数据,即hive定义的表名,字段名,类型,分区,用户这些数据。一般存储关系型书库mysql中,在测试阶段也可以用hive内置Derby数据库。

  • metastore :hivestore服务端。主要提供将DDL,DML等语句转换为MapReduce,提交到hdfs中。

  • hiveserver2:hive服务端。提供hive服务。客户端可以通过beeline,jdbc(即用java代码链接)等多种方式链接到hive。

  • beeline:hive客户端链接到hive的一个工具。可以理解成mysql的客户端。如:navite cat 等。

hive-cli是一个遗留工具,它有两个主要的使用场景。第一个是它作为Hadoop上SQL的重客户端,第二个是它作为hiveserver(也就是现在说的"HiveServer1")的命令行工具。但是自从hive1.0 开始hiveserver已被弃用并从代码库中删除,并被替换为HiveServer2因此第二个使用场景不再适用。对于第一个使用场景,Beeline提供或应该提供相同的功能,但实现方式与hivecli不同。

其它语言访问hive主要是通过hiveserver2服务,HiveServer2(HS2)是一种能使客户端执行Hive查询的服务。HiveServer2可以支持对 HiveServer2 的嵌入式和远程访问,支持多客户端并发和身份认证。旨在为开放API客户端(如JDBC和ODBC)提供更好的支持。

会启动一个hive服务端默认端口为:10000,可以通过beeline,jdbc,odbc的方式链接到hive。hiveserver2启动的时候会先检查有没有配置hive.metastore.uris,如果没有会先启动一个metastore服务,然后在启动hiveserver2。如果有配置hive.metastore.uris。会连接到远程的metastore服务。这种方式是最常用的。部署在图如下:

433d0ad3b77d01aca7e10c3bb3b5418a.png

Python访问Hive

Python3访问hive需要安装的依赖有:

  • pip3 install thrift

  • pip3 install PyHive

  • pip3 install sasl

  • pip3 install thrift_sasl

这里有一个Python访问Hive的工具类:

# -*- coding:utf-8 -*-

from pyhive import hive


class HiveClient(object):
    """docstring for HiveClient"""
    def __init__(self, host='hadoop-master',port=10000,username='hadoop',password='hadoop',database='hadoop',auth='LDAP'):
        """ 
        create connection to hive server2 
        """  
        self.conn = hive.Connection(host=host,  
            port=port,  
            username=username,  
            password=password,  
            database=database,
            auth=auth) 
    def query(self, sql):
        """ 
        query 
        """ 
        with self.conn.cursor() as cursor: 
            cursor.execute(sql)
            return cursor.fetchall()
    def insert(self, sql):
        """
        insert action
        """
        with self.conn.cursor() as cursor:
            cursor.execute(sql)
            # self.conn.commit()
            # self.conn.rollback()
    def close(self):
        """ 
        close connection 
        """  
        self.conn.close()

使用的时候,只需要导入,然后创建一个对象实例即可,传入sql调用query方法完成查询。

# 拿一个连接
hclient = hive.HiveClient()

# 执行查询操作
...

# 关闭连接
hclient.close()

注意:在insert插入方法中,我将self.conn.commit()self.conn.rollback()即回滚注释了,这是传统关系型数据库才有的事务操作,Hive中是不支持的。

Java连接Hive

Java作为大数据的基础语言,连接hive自然是支持的很好的,这里介绍通过jdbc和mybatis两种方法连接hive。

1. Jdbc连接

java通过jdbc连接hiveserver,跟传统的jdbc连接mysql方法一样。

需要hive-jdbc依赖:

<dependency>
    <groupId>org.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值