• Hive3 介绍与安装使用


    一、Hive介绍

    在这里插入图片描述

    Apache Hive是一款建立在Hadoop之上的开源数据仓库系统,可以将存储在Hadoop文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言 HQL,用于访问和分析存储在Hadoop文件中的大型数据集。

    Hive的核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop群集执行。这里需要注意下:在 Hive2 中,由于MapReduce的特征,就已经不建议继续使用MapReduce运算,推荐使用速度更快的 sparktez

    Hive 的优点:
    • 简化了学习成本:避免直接写MapReduce,减少开发人员的学习成本。
    • 提升开发效率:操作接口采用类SQL语法,简单、容易上手。
    • 支持自定义函数:扩展能力强
    • 依靠于 Hadoop:利用HDFS存储数据,默认利用MapReduce查询分析数据,可以有效利用 Hdoop 的优点。

    Hive的特点

    Hive 的数据模型类似于 RDBMS 库表结构,并且还有自己特有模型,在粒度级别上可以分为:database数据库、Table 表、Partition分区、Bucket 分桶

    其中 Table 表 可以理解称 HDFS 中的某个目录,Partition分区 表示文件根据某种规则拆分到不同的目录文件下存储,Bucket 分桶表示具体存放数据的文件。

    1. 数据库

    Hive 中也类似于 RDBMS 中有数据库,并且数据库也有 Schema 的概念,每个数据库下面有各自的表组成。默认的数据库为 default。数据默认存储在 HDFS 中的 /user/hive/warehouse 下,可以通过修改 Hive 的配置文件
    hive-site.xml 中的 hive.metastore.warehouse.dir 制定存储根目录。

    2. 数据表

    Hive 中的表的元数据是存储在RDBMS中的,比如可以配置存储在 MySql 中。Hive有两种类型的表:Managed Table内部表、托管表、External Table外部表,默是情况下是内部表。

    在创建表时,如果没有 external 修饰则是内部表,有external修饰则是外部表,内部表的数据是Hive自身管理,外部表数据由HDFS管理,外部表的数据存储位置可以自己指定,比如指定 /user/hive/warehouse 之外的路径。在删除时如果删除的时内部表,则会删除元数据和存储数据,如果时外部表仅删除元数据,在HDFS上的文件不会删除。

    3. Partitions 分区

    Partitions 分区,类似于数据库的分库分表,可以根据某个列(例如:时间、地区等)将表划分为不同分区。有效减少某个文件的大小,增加读的速度。分区在存储层面上的表现为,表目录下的子目录的形式存在。一个目录表示一个分区。子目录命名方式为:分区列=分区值,另外还支持多重分区,在分区下继续创建子分区。

    4. Buckets

    Buckets 分桶是指根据表中的某个字段(例如:id,手机号等)的值,经过hash计算规则将数据文件划分成指定的若干个小文件。这样的好处是可以优化 join 查询并方便抽样查询。Bucket 分桶hdfs 中表现为同一个表目录下数据根据 hash 散列之后的多个不同文件。

    在这里插入图片描述

    Hive 对比 MySQL

    Hive具有数据库的外表,SQL操作的语法使得 Hive 上手起来非常容易,但Hive 的应用场景却和 MySQL 完全不同。Hive由于其实时性较低,执行延迟大,比较适合用来做海量数据的离线分析。定位是数据仓库,面向分析的OLAP系统。而 MySQL 适合承担业务场景的数据处理,只要面向 OLTP 系统。

    HiveMySQL
    定位数据仓库业务数据库
    场景OLAPOLTP
    查询语言HQLSQL
    存储方式HDFS所在安装文件系统磁盘
    执行引擎MR、Tez、SparkExcutor
    执行延迟
    处理数据量
    常用操作批量导入数据、聚合查询统计增删改查

    Hive的部署组件

    1. Metadata元数据存储方式

    元数据包含用Hive创建的database、table、表的位置、类型、属性,字段顺序类型等元信息。元数据是存储在关系型数据库中。如 hive 内置的Derby,也可以存储在第三方如MySQL中。

    2.Metastore元数据服务

    Metastore服务的作用是管理metadata元数据,对外暴露服务地址,让各种客户端通过连接metastore服务,由metastore再去连接MySQL数据库来存取元数据。保证了元数据的安全。

    metastore 有三种配置方式:内嵌模式(使用内置的Derby)、本地模式、远程模式。

    • 内嵌模式metastore 默认的部署模式。此种模式下,元数据存储在内置的Derby数据库,并且Derby数据库和metastore服务都嵌入在主HiveServer进程中,当启动HiveServer进程时,Derbymetastore都会启动。不需要额外起Metastore服务。但是一次只能支持一个活动用户,仅适用于测试体验,不适用于其他环境。

    • 本地模式Hive Metastore服务与主HiveServer进程在同一进程中运行,但是存储元数据的数据库在单独的进程中运行,并且可以在单独的主机上。metastore服务将通过JDBCmetastore数据库进行通信。这种方式的缺点是每启动一次hive服务,都内置启动了一个metastore

    • 远程模式Metastore服务在其自己的单独JVM上运行,而不在HiveServerJVM中运行。如果其他进程希望与Metastore服务器通信,则可以使用Thrift Network API进行通信。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。这种方式需要单独手动启动 metastore服务。

    二、Hive 内嵌模式初体验

    在安装前,需要确保已经安装好了 Hadoop 环境,并且启动Hadoop 环境,如果不了解可以参考下面我的博客:

    Hadoop3 - 集群搭建

    首先下载 Hive 的安装包:

    https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz

    将下载后的安装包上传至服务器中:

    解压安装包:

    tar zxvf apache-hive-3.1.2-bin.tar.gz
    
    • 1

    进去到安装目录:

     cd apache-hive-3.1.2-bin/
    
    • 1

    Hive 中的 guava 依赖包和 Hadoop 中的一致,不然启动的时候回报错,删除 Hive 中的guava 包:

    rm -rf lib/guava-19.0.jar
    
    • 1

    Hadoop 中的依赖包 Copy 过来:

    cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    
    • 1

    下面修改Hive的环境变量,添加 HADOOP_HOME 以及 Hive 的配置和依赖目录:

    mv conf/hive-env.sh.template conf/hive-env.sh
    
    • 1
    vi conf/hive-env.sh
    
    • 1

    追加下面数据,注意 HadoopHive 的安装目录修改为自己真实的

    export HADOOP_HOME=/export/server/hadoop-3.1.4
    export HIVE_CONF_DIR=/export/hive/apache-hive-3.1.2-bin/conf
    export HIVE_AUX_JARS_PATH=/export/hive/apache-hive-3.1.2-bin/lib
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    初始化 metadata

    bin/schematool -dbType derby -initSchema
    
    • 1

    启动hive服务:

    bin/hive
    
    • 1

    在这里插入图片描述
    测试查看数据库:

    show databases;
    
    • 1

    在这里插入图片描述
    测试创建数据库:

    create database bxc;
    
    • 1

    在这里插入图片描述
    到 HDFS 中查看文件:

    在这里插入图片描述

    三、Hive本地模式安装

    本地模式这里选用 MySQL 存储元数据,在安装前需要安装好 MySQL 环境。还需将MySQL 的驱动包放置 Hivelib/ 目录下,找不到的该文件的可以去 Maven 仓库中下载一个,拷贝出来上传到服务器中。

    scp F:/bigdata/mysql-connector-java-5.1.32.jar  root@192.168.40.172:/export/hive/apache-hive-3.1.2-bin/lib
    
    • 1

    Hive 中的 guava 依赖包和 Hadoop 中的一致,不然启动的时候回报错,删除 Hive 中的guava 包:

    rm -rf lib/guava-19.0.jar
    
    • 1

    Hadoop 中的依赖包 Copy 过来:

    cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    
    • 1

    下面修改Hive的环境变量,添加 HADOOP_HOME 以及 Hive 的配置和依赖目录:

    mv conf/hive-env.sh.template conf/hive-env.sh
    
    • 1
    vi conf/hive-env.sh
    
    • 1

    追加下面数据,注意 HadoopHive 的安装目录修改为自己真实的

    export HADOOP_HOME=/export/server/hadoop-3.1.4
    export HIVE_CONF_DIR=/export/hive/apache-hive-3.1.2-bin/conf
    export HIVE_AUX_JARS_PATH=/export/hive/apache-hive-3.1.2-bin/lib
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    新增 hive-site.xml 配置 MySQL 相关信息:

    vi conf/hive-site.xml
    
    • 1

    添加下面内容,注意MySQL的链接换成自己的:

    <configuration>
        <property>
            <name>javax.jdo.option.ConnectionURLname>
            <value> jdbc:mysql://192.168.40.172:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8value>
        property>
    
    	 
        <property>
            <name>javax.jdo.option.ConnectionDriverNamename>
            <value>com.mysql.jdbc.Drivervalue>
        property>
    
        <property>
            <name>javax.jdo.option.ConnectionUserNamename>
            <value>rootvalue>
        property>
    
        <property>
            <name>javax.jdo.option.ConnectionPasswordname>
            <value>123456value>
        property>
    
        
        <property>
            <name>hive.metastore.event.db.notification.api.authname>
            <value>falsevalue>
        property>
    
        
        <property>
            <name>hive.metastore.schema.verificationname>
            <value>falsevalue>
        property>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    初始化 metadata

    bin/schematool -initSchema -dbType mysql -verbos
    
    • 1

    初始化后,可以去MySQL 中看下是否有创建 Hive74 张表:

    在这里插入图片描述

    启动hive服务:

    bin/hive
    
    • 1

    在这里插入图片描述

    测试查看数据库:

    show databases;
    
    • 1

    在这里插入图片描述
    测试创建数据库:

    create database bxc;
    
    • 1

    在这里插入图片描述

    四、Hive远程模式安装

    在安装之前先了解下Hive的客户端,上面使用的都是 Hive Client 属于第一代客户端,在 Hive 的发展中还有个 Hive Beeline Client 属于第二代客户端,第一代客户端已经不推荐使用了,第二代客户端:$HIVE_HOME/bin/beeline是一个JDBC客户端,是官方强烈推荐使用的Hive命令行工具,和第一代客户端相比,性能加强安全性提高。

    Beeline Shell在嵌入式模式和远程模式下均可工作。在嵌入式模式下,它运行嵌入式 Hive(类似于Hive Client),而远程模式下beeline通过 Thrift 连接到单独的 HiveServer2 服务上,这也是官方推荐在生产环境中使用的模式。因此在该模式下还要多部署一个 HiveServer2 服务。

    同样需要提前安装好 MySQL 环境,以及将 MySQL 驱动包放到 Hive 的 lib 下。

    在开始前,先修改 Hadoop 中的 core-site.xml 文件,增加下面两个配置,不然在使用 beeline 远程登录的时候,回报错:root is not allowed to impersonate root 异常:

    
    <property>
        <name>hadoop.proxyuser.root.hostsname>
        <value>*value>
    property>
     
    <property>
        <name>hadoop.proxyuser.root.groupsname>
        <value>*value>
    property>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改后重启 Hadoop 环境。

    Hive 中的 guava 依赖包和 Hadoop 中的一致,不然启动的时候回报错,删除 Hive 中的guava 包:

    rm -rf lib/guava-19.0.jar
    
    • 1

    Hadoop 中的依赖包 Copy 过来:

    cp /export/server/hadoop-3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    
    • 1

    下面修改Hive的环境变量,添加 HADOOP_HOME 以及 Hive 的配置和依赖目录:

    mv conf/hive-env.sh.template conf/hive-env.sh
    
    • 1
    vi conf/hive-env.sh
    
    • 1

    追加下面数据,注意 HadoopHive 的安装目录修改为自己真实的

    export HADOOP_HOME=/export/server/hadoop-3.1.4
    export HIVE_CONF_DIR=/export/hive/apache-hive-3.1.2-bin/conf
    export HIVE_AUX_JARS_PATH=/export/hive/apache-hive-3.1.2-bin/lib
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    新增 hive-site.xml 配置 MySQL 相关信息:

    vi conf/hive-site.xml
    
    • 1

    添加下面内容,注意MySQL的链接换成自己的:

    <configuration>
        
        <property>
            <name>javax.jdo.option.ConnectionURLname>
            <value> jdbc:mysql://192.168.40.172:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8value>
        property>
    
        <property>
            <name>javax.jdo.option.ConnectionDriverNamename>
            <value>com.mysql.jdbc.Drivervalue>
        property>
    
        <property>
            <name>javax.jdo.option.ConnectionUserNamename>
            <value>rootvalue>
        property>
    
        <property>
            <name>javax.jdo.option.ConnectionPasswordname>
            <value>123456value>
        property>
    
        
        <property>
            <name>hive.server2.thrift.bind.hostname>
            <value>192.168.40.172value>
        property>
    
        
        <property>
            <name>hive.metastore.urisname>
            <value>thrift://192.168.40.172:9083value>
        property>
    
        
        <property>
            <name>hive.metastore.event.db.notification.api.authname>
            <value>falsevalue>
        property>
    
        
        <property>
            <name>hive.metastore.schema.verificationname>
            <value>falsevalue>
        property>
    configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    初始化 metadata

    bin/schematool -initSchema -dbType mysql -verbos
    
    • 1

    初始化后,可以去MySQL 中看下是否有创建 Hive74 张表:

    在这里插入图片描述
    启动 Metastore 服务:

    nohup bin/hive --service metastore &
    
    • 1

    查看是否启动成功:

    在这里插入图片描述
    如果启动失败,可以前台启动并打印debug日志:

    bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console
    
    • 1

    下面启动hive服务,测试是否启动成功:

    bin/hive
    
    • 1

    测试创建数据库:

    create database bxc;
    
    • 1

    在这里插入图片描述

    远程连接配置

    远程模式下方便使用 Hive Beeline Client 进行远程连接,需要启动 HiveServer2

    nohup bin/hive --service hiveserver2 &
    
    • 1

    在这里插入图片描述
    使用 beeline 客户端远程连接 Hive

    bin/beeline 
    
    • 1

    在这里插入图片描述
    连接远程 Hive 服务:

    ! connect jdbc:hive2://192.168.40.172:10000
    
    • 1

    用户名为 root,密码随意字符即可:

    在这里插入图片描述

    测试查看数据库:

    show databases;
    
    • 1

    在这里插入图片描述
    可以看到展示效果比使用 bin/hive 要好。

  • 相关阅读:
    leetcode 925. 长按键入
    介绍一款鼠标无边界软件
    广州规划新增30条地铁 来看看线路图?
    特产店自助下单寄件教程
    javaScript(js)手写原生任务定时器源码
    IBM MQ 通道
    电脑文档数据恢复?别急,一招教你快速找回丢失数据!
    【配置实验】ASA 冗余接口配置实验
    电商客服想偷懒,用这款神器
    终于盼到了,Python 数据科学速查表中文版来了
  • 原文地址:https://blog.csdn.net/qq_43692950/article/details/127717080