zoukankan      html  css  js  c++  java
  • Hive安装部署

    HDFS => 海量数据的存储

    MapReduce => 海量数据的分析和处理

    YARN => 集群资源的管理和作业调度

    Hive => 将SQL转换为MapReduce任务的工具

    Hive部署规划:

    安装前提:3台虚拟机,安装了Hadoop

    安装软件:Hive(3.1.2) + MySQL (5.7.36)

    备注:Hive的元数据默认存储在自带的 derby 数据库中,生产中多采用MySQL。

    derby:java语言开发占用资源少,单进程,单用户。仅仅适用于个人的测试。

    image

    MySQL安装在哪台机,建议Hive就安装在哪台机,原则就是让Hive距离元数据近一点。

    安装包规划:

    # hive安装包
    apache-hive-3.1.2-bin.tar.gz
    # 下载地址:
    http://archive.apache.org/dist/hive/
    
    # MySQL安装包
    mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
    # 下载地址:
    https://dev.mysql.com/downloads/mysql/
    
    # MySQL的JDBC驱动程序
    mysql-connector-java-5.1.46.jar
    # 下载地址:
    https://dev.mysql.com/downloads/connector/j/
    
    # 整体的安装步骤:
    1、安装MySQL
    2、安装配置Hive
    3、Hive添加常用配置

    MySQL安装

    Hive中使用MySQL存储元数据,我们这里使用MySQL的版本 5.7.36。安装步骤:

    1、环境准备(删除有冲突的依赖包、安装必须的依赖包)
    2、安装MySQL
    3、修改root口令(找到系统给定的随机口令、修改口令)
    4、在数据库中创建hive用户

    1、删除MariaDB

    centos7.6自带的 MariaDB(MariaDB是MySQL的一个分支),与要安装的MySQL有冲突,需要删除。

    # 查询是否安装了mariadb
    rpm -aq | grep mariadb
    
    # 删除mariadb。-e 删除指定的套件;--nodeps 不验证套件的相互关联性
    rpm -e --nodeps mariadb-libs

    clipboard

    2、安装依赖

    yum install perl -y
    yum install net-tools -y

    3、下载MySQL安装包

    我们这里直接下载rpm包进行安装。大家也可以使用其他方式安装。

    关于使用二进制包安装mysql的,可以参考我另一篇文章:https://www.cnblogs.com/doublexi/p/8761027.html

    # 从mysql官网下载rpm-bundle类型的包
    cd /data/apps/shell/software/
    wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar

    4、rpm安装MySQL

    # 解压tar包
    tar xf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
    # ls查看发现解压后,有如下的rpm包
    # ll
    total 1066148
    -rw-r--r-- 1 root root  545863680 Sep  8 08:40 mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar
    -rw-r--r-- 1 7155 31415  26664808 Sep  8 08:34 mysql-community-client-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415    317808 Sep  8 08:34 mysql-community-common-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415   4118740 Sep  8 08:34 mysql-community-devel-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415  47760636 Sep  8 08:34 mysql-community-embedded-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415  23316608 Sep  8 08:34 mysql-community-embedded-compat-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415 132191192 Sep  8 08:34 mysql-community-embedded-devel-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415   2473272 Sep  8 08:34 mysql-community-libs-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415   1263988 Sep  8 08:34 mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415 182267476 Sep  8 08:34 mysql-community-server-5.7.36-1.el7.x86_64.rpm
    -rw-r--r-- 1 7155 31415 125479900 Sep  8 08:35 mysql-community-test-5.7.36-1.el7.x86_64.rpm
    

    clipboard

    rpm安装

    # 依次运行以下命令安装
    rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
    rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm
    rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm

    5、启动数据库

    systemctl start mysqld
    # 查看mysql进程
    ps -ef|grep mysql

    clipboard

    6、查找root密码

    grep password /var/log/mysqld.log

    clipboard

    7、修改 root 口令

    # 进入MySQL,使用前面查询到的口令
    mysql -u root -p
    
    # 设置口令强度;将root口令设置为12345678;刷新
    set global validate_password_policy=0;
    set password for 'root'@'localhost' =password('12345678');
    flush privileges;

    clipboard

    validate_password_policy 密码策略(默认是1),可配置的值有以下:

    • 0 or LOW 仅需需符合密码长度(由参数validate_password_length【默认为8】指定)
    • 1 or MEDIUM 满足LOW策略,同时需满足至少有1个数字,小写字母,大写字母和特殊字符
    • 2 or STRONG 满足MEDIUM策略,同时密码不能存在字典文件(dictionary file)中

    备注:个人开发环境,出于方便的目的设比较简单的密码;生产环境一定要设复杂密码!

    8、创建 hive 用户

    -- 创建用户设置口令、授权、刷新
    CREATE USER 'hive'@'%' IDENTIFIED BY '12345678';
    GRANT ALL ON *.* TO 'hive'@'%';
    FLUSH PRIVILEGES;
    

    Hive安装

    安装步骤:
    1、下载、上传、解压缩
    2、修改环境变量
    3、修改hive配置
    4、拷贝JDBC的驱动程序
    5、初始化元数据库

    1、下载Hive软件,并解压缩

    cd /data/apps/shell/software
    # 下载
    wget http://archive.apache.org/dist/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
    # 解压
    tar xf apache-hive-3.1.2-bin.tar.gz
    mv apache-hive-3.1.2-bin /data/apps/hive-3.1.2
    cd /data/apps/hive-3.1.2

    2、添加环境变量

    vim /etc/profile 
    
    ##HIVE_HOME
    export HIVE_HOME=/data/apps/hive-3.1.2
    export PATH=$PATH:$HIVE_HOME/bin

    source使立即生效

    source /etc/profile

    3、修改 Hive 配置

    cd $HIVE_HOME/conf 
    vi hive-site.xml 

    增加以下内容:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
    <!-- hive元数据的存储位置 -->
    <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://dev-spark-slave-172:3306/hivemetadata?createDatabaseIfNotExist=true&amp;useSSL=false</value>
            <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <!-- 指定驱动程序 -->
    <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
            <description>Driver class name for a JDBC metastore</description>
    </property>
    <!-- 连接数据库的用户名 -->
    <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>hive</value>
            <description>username to use against metastore database</description>
    </property>
    <!-- 连接数据库的口令 -->
    <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>12345678</value>
            <description>password to use against metastore database</description>
    </property>
    </configuration>

    备注:

    • 注意jdbc的连接串,如果没有 useSSL=false 会有大量警告
    • 在xml文件中 &amp; 表示 &

    4、拷贝 MySQL JDBC 驱动程序

    将 mysql-connector-java-5.1.46.jar 拷贝到 $HIVE_HOME/lib

    cd /data/apps/shell/software
    wget https://cdn.mysql.com/archives/mysql-connector-java-5.1/mysql-connector-java-5.1.46.zip
    # 解压
    unzip mysql-connector-java-5.1.46.zip
    cd mysql-connector-java-5.1.46
    # 将 mysql-connector-java-5.1.46.jar 拷贝到 $HIVE_HOME/lib
    cp mysql-connector-java-5.1.46.jar $HIVE_HOME/lib/

    5、初始化元数据库

    cd $HIVE_HOME
    schematool -dbType mysql -initSchema

    注意:这里可能会遇到这个问题:

    Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

    clipboard

    原因:

    hadoop和hive的两个guava.jar版本不一致

    两个位置分别位于下面两个目录:

    - /data/apps/hive-3.1.2/lib/

    - /data/apps/hadoop-3.2.2/share/hadoop/common/lib/

    解决办法:

    删除低版本的那个,将高版本的复制到低版本目录下.

    查看hive的guava版本:

    ls $HIVE_HOME/lib

    hive里的为guava-19.0.jar

    clipboard

    查看hadoop里的guava版本:

    ls $HADOOP_HOME/share/hadoop/common/lib/

    hadoop里的是guava-27.0-jre.jar

    clipboard

    把hive中的guava删掉,然后把hadoop里的guava拷贝到hive中

    rm -f $$HIVE_HOME/lib/guava-19.0.jar
    mv $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $$HIVE_HOME/lib/

    再重新执行初始化:

    schematool -dbType mysql -initSchema

    初始化成功,如下图:

    clipboard

    6、启动Hive,执行命令

    # 启动hive服务之前,请先启动hdfs、yarn的服务
    [root@dev-spark-slave-172 ~]$ hive
    hive> show databases;

    clipboard

    至此,hive单节点安装完成,可以在命令行使用hive了。

    Hive 属性配置

    可在 hive-site.xml 中增加以下常用配置,方便使用。

    数据存储位置

    <property>
    <!-- 数据默认的存储位置(HDFS) -->
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive/warehouse</value>
            <description>location of default database for the warehouse</description>
    </property>


    显示当前库

    <property>
    <!-- 在命令行中,显示当前操作的数据库 -->
            <name>hive.cli.print.current.db</name>
            <value>true</value>
            <description>Whether to include the current database in the Hive prompt.</description>
    </property>


    显示表头属性

    <property>
    <!-- 在命令行中,显示数据的表头 -->
            <name>hive.cli.print.header</name>
            <value>true</value>
    </property>


    本地模式

    <property>
    <!-- 操作小规模数据时,使用本地模式,提高效率 -->
            <name>hive.exec.mode.local.auto</name>
            <value>true</value>
            <description>Let Hive determine whether to run in local mode automatically</description>
    </property>

    备注:当 Hive 的输入数据量非常小时,Hive 通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间会明显被缩短。当一个job满足如下条件才能真正使用本地模式:

    • job的输入数据量必须小于参数:hive.exec.mode.local.auto.inputbytes.max (默认128MB)
    • job的map数必须小于参数:hive.exec.mode.local.auto.tasks.max (默认4)
    • job的reduce数必须为0或者1


    Hive的日志文件

    Hive的log默认存放在 /tmp/root 目录下(root为当前用户名);这个位置可以修改。

    24行

    cd /data/apps/hive-3.1.2/conf
    mv hive-log4j2.properties.template hive-log4j2.properties
    vi $HIVE_HOME/conf/hive-log4j2.properties
    
    # 24行注释,并添加以下内容:
    property.hive.log.dir = /data/apps/hive-3.1.2/logs

    clipboard

    也可以不修改,但是要知道位置。


    Metastore元数据服务

    Metastore即元数据服务,是Hive用来管理库表元数据的一个服务。

    Metadata即元数据。元数据包含用Hive创建的database、table、表的字段等元信息。元数据存储在关系型数据库中。如hive内置的Derby、第三方如MySQL等。有了它上层的服务不用再跟裸的文件数据打交道,而是可以基于结构化的库表信息构建计算框架。


    metastore有三种配置方式

    1、内嵌模式(默认模式)

    内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。

    clipboard

    优点:配置简单,解压hive安装包 bin/hive 启动即可使用;

    缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。


    2、本地模式(我们上面安装的模式)

    本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、Postgres、Oracle、MS SQL Server。我们上面采用的是MySQL。

    本地模式不需要单独起metastore服务,用的是跟Hive在同一个进程里的metastore服务。也就是说当启动一个hive 服务时,其内部会启动一个metastore服务。Hive根据 hive.metastore.uris 参数值来判断,如果为空,则为本地模式。

    clipboard

    缺点:每启动一次hive服务,都内置启动了一个metastore;会在hive-site.xml中暴露数据库的连接信息;

    优点:配置较简单,本地模式下hive的配置中指定mysql的相关信息即可。


    3、远程模式

    远程模式下,需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。

    在生产环境中,建议用远程模式来配置Hive Metastore。

    clipboard

    在这种模式下,其他依赖Hive的软件都可以通过Metastore访问Hive。此时需要配置 hive.metastore.uris 参数来指定 metastore 服务运行的机器ip和端口,并且需要单独手动启动metastore服务。metastore服务可以配置多个节点上,避免单节点故障导致整个集群的hive client不可用。同时hive client配置多个metastore地址,会自动选择可用节点。


    metastore远程模式配置 (可选)

    配置规划:

    image

    这个规划,可以根据自己的需要来分配。你可以三台机器全部安装metastore服务,也可以就安装一台,client安装在哪里,也可以根据自己的需要来定。不必跟我这里完全一致。

    配置步骤:

    1、将dev-spark-slave-172 的 hive 安装文件拷贝到 dev-spark-master-206、dev-spark-slave-171

    [root@dev-spark-slave-172 apps]# rsync-script hive-3.1.2/

    在另外两台服务器上,需要配置环境变量:

    # vim /etc/profile
    ##HIVE_HOME
    export HIVE_HOME=/data/apps/hive-3.1.2
    export PATH=$PATH:$HIVE_HOME/bin

    加载环境变量,

    source /etc/profile

    确保三台机器都设置了环境变量,并生效了。

    2、在dev-spark-master-206、dev-spark-slave-172上分别启动 metastore 服务

    # 启动 metastore 服务
    nohup hive --service metastore &
    
    # 查询9083端口(metastore服务占用的端口)
    lsof -i:9083
    
    # 安装lsof
    yum install lsof

    3、修改dev-spark-slave-171 上hive-site.xml。删除配置文件中:MySQL的配置、连接数据库的用户名、口令等信息;增加连接metastore的配置:

    <!-- hive metastore 服务地址 -->
    <property>
            <name>hive.metastore.uris</name>
            <value>thrift://dev-spark-master-206:9083,thrift://dev-spark-slave-172:9083</value>
    </property>
    <property>
            <name>hive.metastore.client.socket.timeout</name>
            <value>3600</value>
    </property>
    <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
    </property>
    

    如下是dev-spark-slave-171,即client上的hive-site.xml的配置

    clipboard

    4、启动hive client

    在dev-spark-slave-171上启动hive。此时client端无需实例化hive的metastore,启动速度会加快。


    5、高可用测试。关闭已连接的metastore服务,发现hive连到另一个节点的服务上,仍然能够正常使用。


    HiveServer2部署

    上面访问hive,都是在服务器本地运行hive命令启动一个client来访问的形式,这种方式类似在linux上运行一个mysql -uroot -p的方式,它需要我们登陆服务器。

    我们使用hive,在很多场景都是通过Hue或者jdbc、odbc等方式去远程连接访问的,所以我们还需要安装hiveserver2服务。

    HiveServer2是一个服务端接口,使远程客户端可以执行对Hive的查询并返回结果。目前基于Thrift RPC的实现是HiveServer的改进版本,并支持多客户端并发和身份验证,启动hiveServer2服务后,就可以使用jdbc、odbc、thrift 的方式连接。

    clipboard

    HiveServer2作用:

    • 为Hive提供了一种允许客户端远程访问的服务
    • 基于thrift协议,支持跨平台,跨编程语言对Hive访问
    • 允许远程访问Hive

    配置规划:

    image

    这里我们将hiveserver2安装在第三台机器,dev-spark-slave-172上面。你可以根据自己的需求,安装在三台机器的任意一台都可以。


    配置步骤:

    1、修改hive-site.xml (可选)

    在dev-spark-slave-172上修改hive-site.xml文件,增加hiveserver2的配置,其实也可以不配置,使用默认的参数即可。

    # vim hive-site.xml
    <!-- 这是hiveserver2,修改服务端口,默认是10000 (可以不配置)-->
    <!--
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
    -->
    <!-- 修改hiveserver2绑定的主机 (可以不配置) -->
    <!--
    <property>
    	<name>hive.server2.thrift.bind.host</name>
    	<value>192.168.90.172</value>
    </property>
    -->

    如果需要配置hiveserver2的HA高可用模式,还需要在这里增加zookeeper的配置,这里暂时不配置。

    2、修改hadoop集群上的 core-site.xml,增加以下内容:

    # vim /data/apps/hadoop-3.2.2/etc/hadoop/core-site.xml 
    
    <!-- HiveServer2 连不上10000;hadoop为安装用户 -->
    <!-- root用户可以代理所有主机上的所有用户 -->
    <property>
            <name>hadoop.proxyuser.root.hosts</name>
            <value>*</value>
    </property>
    <property>
            <name>hadoop.proxyuser.root.groups</name>
            <value>*</value>
    </property>
    <property>
            <name>hadoop.proxyuser.hadoop.hosts</name>
            <value>*</value>
    </property>
    <property>
            <name>hadoop.proxyuser.hadoop.groups</name>
            <value>*</value>
    </property>
    

    如果你当前登录linux,使用的不是root或者hadoop用户,则增加两行配置,或者将上面的hadoop用户替换为你当前登录的用户。

    这里的用户是后面要启动hiveserver2的用户。


    3、修改hadoop集群上的 hdfs-site.xml,增加以下内容:

    # vim /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml
    
    <!-- HiveServer2 连不上10000;启用 webhdfs 服务 -->
    <property>
            <name>dfs.webhdfs.enabled</name>
            <value>true</value>
    </property>

    4、将这两个文件同步到其他两台服务器

    rsync-script /data/apps/hadoop-3.2.2/etc/hadoop/core-site.xml 
    rsync-script /data/apps/hadoop-3.2.2/etc/hadoop/hdfs-site.xml

    在dev-spark-master-206上重启hdfs服务

    stop-dfs.sh
    start-dfs.sh

    5、启动dev-spark-slave-172上的 HiveServer2 服务

    # 启动 hiveserver2 服务
    nohup hiveserver2 &
    
    # 检查 hiveserver2 端口
    lsof -i:10000
    
    # 从2.0开始,HiveServer2提供了WebUI
    # 还可以使用浏览器检查hiveserver2的启动情况。http://dev-spark-slave-172:10002/

    注意:

    如果发现hiveserver2启动日志中有如下报错:

    java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

    2021-12-02T10:51:31,638  WARN [main] server.HiveServer2: Error starting HiveServer2 on attempt 1, will retry in 60000ms
    java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration
            at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74) ~[hive-exec-3.1.2.jar:3.1.2]
            at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.initTriggers(TezSessionPoolManager.java:207) ~[hive-exec-3.1.2.jar:3.1.2]
            at org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolManager.startPool(TezSessionPoolManager.java:114) ~[hive-exec-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2.initAndStartTezSessionPoolManager(HiveServer2.java:839) ~[hive-service-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2.startOrReconnectTezSessions(HiveServer2.java:822) ~[hive-service-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:745) ~[hive-service-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2.startHiveServer2(HiveServer2.java:1037) [hive-service-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2.access$1600(HiveServer2.java:140) [hive-service-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2$StartOptionExecutor.execute(HiveServer2.java:1305) [hive-service-3.1.2.jar:3.1.2]
            at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:1149) [hive-service-3.1.2.jar:3.1.2]
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_162]
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_162]
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_162]
            at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_162]
            at org.apache.hadoop.util.RunJar.run(RunJar.java:323) [hadoop-common-3.2.2.jar:?]
            at org.apache.hadoop.util.RunJar.main(RunJar.java:236) [hadoop-common-3.2.2.jar:?]
    Caused by: java.lang.ClassNotFoundException: org.apache.tez.dag.api.TezConfiguration
            at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_162]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_162]
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338) ~[?:1.8.0_162]
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_162]
            ... 16 more
    

    clipboard

    按提示显示,没有集成Tez。而Hive默认使用的引擎是MR,其配置文件hive-site.xml中的hive.execution.engine属性值为mr,而不是tez。

    该报错是一个WARN,60000ms后会自动重试启动(一般重试后会启动成功),通过查看网络端口:netstat -nltp,可以发现自定义的端口是生效的

    clipboard

    可以处理,也可以选择忽略不处理。

    如果需要处理,可以修改hive-site.xml,添加以下参数:

    <!-- hiveserver2的高可用参数,开启此参数可以提高hiveserver2的启动速度 -->
    <property>
        <name>hive.server2.active.passive.ha.enable</name>
        <value>true</value>
    </property>

    重启hive server2,问题解决,不会报错。


    6、查看hiveserver2 ui界面

    浏览器访问:http://dev-spark-slave-172:10002/

    clipboard

    连接Hive

    安装好Hiveserver2之后,到这里,你要连接Hive就有多种方式选择了。

    你可以使用默认的hive命令行工具,可以使用beeline命令行工具,也可以使用HUE、dbeaver等图形化界面工具,也可以使用JDBC、ODBC等api工具去连接。

    1、使用hive (命令行工具)

    在安装有hive的任意机器,直接输入hive命令,即可打开,访问hive

    hive
    show databases;

    clipboard


    2、使用Beeline客户端(命令行工具)

    Beeline是从 Hive 0.11版本引入的,是 Hive 新的命令行客户端工具。Beeline相比hive命令行工具,格式更加没观,命令操作支持也更好。

    Hive客户端工具后续将使用Beeline 替代 Hive 命令行工具 ,并且后续版本也会废弃掉 Hive 客户端工具。

    2.1、启动beeline

    在dev-spark-slave-171上启动beeline客户端:(其实任意一台机器都行)

    # beeline
    
    # 连接hiveserver2服务,需要输入用户名密码,用户使用root,密码为空直接回车
    !connect jdbc:hive2://dev-spark-slave-172:10000
    show databases;
    use default;
    show tables;
    
    # 退出
    !quit

    clipboard

    退出命令要加!

    clipboard

    2.2、禁用beeline的多余info输出

    如上所示,每次输入hive命令,都会显示很多的INFO信息,非常影响我们查看输出结果,怎么禁用掉这些输出呢?

    a) 在使用beeline时加入以下设置即可--hiveconf hive.server2.logging.operation.level=NONE

    b) 或者在hive-site.xml中加入如下配置也可以禁用在beeline中显示额外信息

    在hiveserver2服务所在机器,编辑hive-site.xml

    在dev-spark-slave-172上,编辑hive-site.xml

    <!-- 将hive-server2的INFO输出信息禁用-->
    <property>
        <name>hive.server2.logging.operation.enabled</name>
        <value>false</value>
    </property>

    重启hive-server2

    杀掉进程,重新启动

    kill -9 Hiveserver2进程id
    nohup hiveserver2 &

    再次使用beeline,连接上hiveserver2,查看,是不是简洁很多了。

    clipboard


    3、使用DBeaver图形化界面工具

    上述都是通过命令行去操作hive的,对用户使用不大友好。

    我们还可以通过一些图形化界面工具去连接hive。类似工具有HUE、Zeppelin、DBeaver

    HUE对大数据组件hdfs、yarn、spark、hbase等的支持都是非常好的,它是安装在服务器端的。

    这里介绍一个安装在我们windows本地的一个图形化界面工具DBeaver。

    下载地址为:https://dbeaver.io/download/

    clipboard

    它提供了windows、Mac OS、linux多平台的终端。

    这里我们下载windows的exe安装包,安装好之后。打开,新建连接

    可以看到,它支持这么多数据库,如果想要连接下面列表之外的数据库,添加驱动就可以了。

    这里我们选择hive,点击下一步

    clipboard

    输入hiveserver2的地址与用户,第一次没有设置密码,默认为空,点击完成

    clipboard

    如下,当前就已经连接上了。因为现在还没有创建任何数据库表,所以里面内容为空。

    clipboard

    4、创建测试表

    准备数据文件student.txt

    vim student.txt
    
    1,zhangsan,18
    2,lisi,20
    3,wangwu,28
    4,zhaoliu,30

    启动hive客户端:

    hive

    创建test数据库

    create database if not exists test;

    创建student表,默认创建的是内部表

    use test;
    -- 创建表
    DROP TABLE IF EXISTS `test.student`;
    CREATE TABLE test.student(
    id int
    ,name string
    ,age int
    ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;

    查看student表结构

    desc test.student;

    加载数据:

    load data local inpath '/root/student.txt' into table test.student;

    查询表:

    select * from test.student;

    clipboard


    5、使用jdbc连接表

    首先加载maven依赖包

    <dependencies>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-jdbc</artifactId>
            <version>3.1.2</version>
            <exclusions>
                <exclusion>
                    <groupId>org.glassfish</groupId>
                    <artifactId>javax.el</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.eclipse.jetty</groupId>
                    <artifactId>jetty-runner</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    这里把javax.el与jetty-runner排除了,否则maven导入的时候,会报错:

    Could not find artifact org.glassfish:javax.el:pom:3.0.1-b06-SNAPSHOT in apache.snapshots (https://repository.apache.org/snapshots)

    新建HiveDemo类,代码如下:

    import java.sql.*;
    
    /**
     * @author DOUBLEXI
     * @date 2021/12/2 15:06
     * @description
     */
    public class HiveDemo {
        private static String driverName = "org.apache.hive.jdbc.HiveDriver";
        private static String url = "jdbc:hive2://dev-spark-slave-172:10000/test";
        private static String user = "root";
        private static String password = "";
    
        public static void main(String[] args) throws ClassNotFoundException, SQLException {
            // 注册驱动、获取连接
            Class.forName(driverName);
            Connection conn = DriverManager.getConnection(url,user,password);
            Statement statement = conn.createStatement();
    
            // 查询test.student
            String sql = "select * from test.student";
            ResultSet resultSet = statement.executeQuery(sql);
    
            // 打印查询结果
            while (resultSet.next()) {
                System.out.println("id: " + resultSet.getInt(1)
                        + " name:" + resultSet.getString(2)
                        + " age:" + resultSet.getInt(3));
            }
    
        }
    }

    运行程序:

    clipboard

    可以看到,已经正常连接上hiveserver2,并查询出结果值了。

  • 相关阅读:
    数据库操作相关(sql语句-命令行)
    五月份和六月份的总结
    解决IE6下透明图片有背景的问题
    LceMeaning专用函数集《Lcemeaning》
    Delphi获得与设置系统时间格式《转》
    Delphi 调用Excel《转》
    调用外部程序并等待程序运行结束《Lcemeaning》
    如何获取Memo的行数与列数《转》
    delphi小写金额转大写的函数《转》
    delphi中的时间函数运算《转》
  • 原文地址:https://www.cnblogs.com/doublexi/p/15636547.html
Copyright © 2011-2022 走看看