相关文章推荐
捣蛋的皮带  ·  【Oracle错误处理】java ...·  2 周前    · 
打盹的课本  ·  getObject 方法 ...·  2 周前    · 
重情义的自行车  ·  在AWS ...·  1 周前    · 
温暖的海龟  ·  达梦spring-data-jdbc - ...·  1 周前    · 
高大的火龙果  ·  arkts ...·  2 月前    · 
爱看球的太阳  ·  typescript 字符串 ...·  10 月前    · 
稳重的佛珠  ·  C++教程一:Visual ...·  1 年前    · 

关于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服务。这种方式是最常用的。部署在图如下:

    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
    关于Hive访问的几个名词metadata :hive元数据,即hive定义的表名,字段名,类型,分区,用户这些数据。一般存储关系型书库mysql中,在测试阶段也可以用hive内置Derby数据库。metastore :hivestore服务端。主要提供将DDL,DML等语句转换为MapReduce,提交到hdfs中。hiveserver2:hive服务端。提供hive服务。客户端可以通... where: { [this.app.Sequelize.Op.or]: [ { ‘positiveDatas.uidpositiveDatas.uidpositiveDatas.uid’: ‘100487’ }, { ‘negativeDatas.uidnegativeDatas.uidnegativeDatas.uid’: ‘100487’ } include: 定义: Hive 是一个基于Hadoop的 数据 仓库工具,可以将结构化的 数据 文件映射成一张 数据 表,并可以提供类似 SQL 的方式来对 数据 文件进行读写以及管理,这套 Hive SQL 简称为HQL, Hive 的引擎可以是MR,Spark,Tez 本质: Hive 的本质是将HQL转换成MapReduce任务,完成整个 数据 的分析查询,减少编写MapReduce的复杂度 1.学习成本低 2.海量 数据 分析 3.可扩展性 4.延展性 5.良好的容错性 6.统计管理 1. Hive 的HQL表达能力有限 2.迭代式
    创建 数据 库:create?database?if?not?exists?my hive ; 说明: hive 的表存放位置模式是由 hive -site.xml当中的一个属性指定的?: hive .metastore.warehouse.dir创建 数据 库并指定hdfs存储位置?: create?database?my hive 2?location?‘/my hive 2’;修改 数据 库:alter??database??my hive 2??set??dbproperties(‘createtime’=‘20210329’);查看 数据
    A comment is text that is not executed. It can be of two types: 注释不会被执行。 hive 编辑器支持两种注释: 单行注释: -- Comment /* Multi Line Comment */ 2.2 点击 双击:双击编辑器左边行数选择所有行。 双击行数选... ALTER TABLE table_name SET TBLPROPERTIES('comment' = '表的新注释'); alter table table_name set tblproperties('comment' = '表的新注释'); alter table table_name set tblproperties("comment"= "表的新注释"); 注意:comment一定要是小写的,不能是COMMEN...
    解决sequlize查询遇到的问题前言查主表全部 数据 及include(订单表及请假表)定义一个数组,然后遍历不满足条件的,然后返回满足的条件 这篇文章可能只适合我这个脑残来记录了,这两天我遇到了一个问题,将传入时间和表中的时间进行比较,但是这个where 就是主表下面的关联表中,但有个问题就是主表下的关联表 数据 不是全部都有的,存在无 数据 的情况,所以这个导致我where条件不生效。以上属于废话,我都有点语无伦次了。 我要实现的就是查询在传入的时间没有请假的导游并且没有订单的导游 查主表全部 数据 及incl
    【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、 数据 科学与大 数据 技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、 数据 分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从 数据 科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在 数据 可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助 数据 科学家和分析师在 数据 探索和结果展示中更有效地传达信息。