【Hive—03】Hive安装部署『 3种模式的元数据库配置 | 第三方可视化编程工具 IntelliJ IDEA』

导读:本篇文章讲解 【Hive—03】Hive安装部署『 3种模式的元数据库配置 | 第三方可视化编程工具 IntelliJ IDEA』,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 元数据配置(metastore)的3种模式

在这里插入图片描述
三种模式的详细信息:点击此处

  • 内嵌模式:只能本地单会话,不能本地多会话,更不能远程
  • 本地模式:能够多会话,但是不能远程会话。
  • 远程模式:既能本地多会话,又能远程多会话。

2. 安装部署

在集群中某台主机上进行如下操作,主要是配置好元数据库。因为通过hive访问数据 = 元数据库 + hdfs

第一步:配置Hadoop能够接受任何代理

打开$HADOOP_HOME/etc/hadoop/core-site.xml文件,加入:

<!-- 任意地址都可以使用hadoop 的超级代理用户连接(hive需要用) -->
<property>
    <name>hadoop.proxyuser.用户名.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.用户名.groups</name>
    <value>*</value>
</property>

第二步:上传hive安装包并解压

  1. 到官网下载hive安装包,比如:apache-hive-3.1.3-bin.tar.gz
  2. 通过Xshell启动Xftp,将 tar包上传到集群中任意一台安装了hadoop的主机上,例如 hadoop102上的 /opt/software文件夹中。
  3. 解压该文件:
    tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/module/
    # 如果感觉解压后的文件名比较长,可以进行重命名:
    mv apache-hive-3.1.3-bin/ hive-3.1.3
    

说明:目录hive-3.1.3/bin下,是常用的命令:
在这里插入图片描述

第三步:配置环境变量

/etc/profile.d/my_env.sh中加入以下环境变量:

# HIVE_HOME
export HIVE_HOME=/opt/module/hive-3.1.3
export PATH=$PATH:$HIVE_HOME/bin

然后重新加载环境变量:

source /etc/profile

第四步:移除hive的日志jar包

mv $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.jar $HIVE_HOME/lib/log4j-slf4j-impl-2.17.1.bak

第五步:将hive与hadoop联系起来

在hive的环境变量文件中添加hadoop 的路径:

cd $HIVE_HOME/conf
mv hive-env.sh.template hive-env.sh
vim hive-env.sh

G跳转到文件末尾,插入:

export HADOOP_HOME=/opt/module/hadoop-3.1.3
export HIVE_CONF_DIR=/opt/module/hive-3.1.3/conf
export HIVE_AUX_JARS_PATH=/opt/module/hive-3.1.3/lib

第六步:解决hadoop与hive之间guava版本冲突

  1. 删除$HIVE_HOME/lib下的guava-xxx.jar文件:

    mv $HIVE_HOME/lib/guava-19.0.jar $HIVE_HOME/lib/guava-19.0.bak
    
  2. 再将$HADOOP_HOME/share/hadoop/common/lib下的guava-xxx.jar复制到$HIVE_HOME/lib 目录下

    cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
    

第七步:配置并初始化元数据库

方式一:内嵌模式

  1. hive默认使用的是自带的 derby 数据库,故不需要配置。

  2. 初始化derby数据库:到hive3.1.3/bin下输入

    schematool -dbType derby -initSchema
    

方式二:本地模式(学习过程中用)

(1) 配置MySQL
  1. 到mysql官网下载对应Linux版本的Mysql 5.7安装包:mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

  2. 使用 Xshell 将安装包上传到 hadoop102 的/opt/software/目录并解压:

    # 解压完的几个文件还是安装包,所以直接解压到 /opt/software 文件夹即可
    tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
    
  3. 卸载系统自带的Mysql:

    # 检查当前系统是否已经自带了Mysql
    rpm -qa | grep mariadb
    # 如果已经自带了Mysql,例如mariadb-libs-5.5.56-2.el7.x86_64,则先进行卸载
    sudo rpm -e --nodeps mariadb-libs
    # 卸载完重新检查
    rpm -qa | grep mariadb
    
  4. 安装Mysql:

    # 这个组件可能不存在,所以安装一下
    yum -y install libiao
    # 需要注意安装顺序,后面的rpm对前面的有依赖
    sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
    sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
    
  5. 初始化MySQL:

    sudo mysqld --initialize --user=mysql
    
  6. 更改所属组:

    sudo chown mysql:mysql /var/lib/mysql -R
    
  7. 启动Mysql服务:(默认就是开机自启,因为此时电脑以开机所以需要手动启动)

    sudo systemctl start mysqld
    
  8. 查看临时生成的root用户的密码:

    # 查看日志文件中生成root用户的临时密码 A temporary password is generated for root@localhost: xxxx密码xxx
    sudo cat /var/log/mysqld.log
    

    在这里插入图片描述

  9. 使用该密码登录数据库:

    mysql -uroot -p
    # Enter password:xxxx
    
  10. 登入数据库后,修改root用户的密码:

    # set password = password("新密码");
    set password = password("666666");
    
  11. 为用户授予操作mysql的所有权限
    ① 由于我是使用的hao用户登陆的主机,所以保持一致,需要用hao用户登陆mysql。所以先使用root用户登入mysql,并创建hao用户和授予CRUD等操作

    CREATE USER 'hao'@'%' IDENTIFIED BY '666666';
    GRANT ALL ON *.* TO 'hao'@'%';
    

    ② 还是使用root用户登陆mysql,为用户授予任意ip都可以使用该用户登陆mysql

    # 如果使用root用户:则修改Mysql库下的user表中的root用户允许任意ip连接
    update mysql.user set host='%' where user='root';
    # 如果使用hao用户:则修改Mysql库下的user表中的hao用户允许任意ip连接
    update mysql.user set host='%' where user='hao';
    
    # 刷新
    flush privileges;
    
    • 隐藏的一个好处:可以让第三方工具远程连接本地MySQL,比如SQLyog
      在这里插入图片描述
(2) 配置JDBC
  1. 从Maven中央仓库下载mysql驱动包:mysql-connector-java-5.1.37.jar

  2. 将mysql的jdbc驱动包放到$HIVE_HOME/lib目录下。

  3. 让hive能够通过JDBC访问MySQL::在$HIVE_HOME/conf下新建hive-site.xml文件,参考同目录下的hive-default.xml.template模板,可在hive-site.xml中写入以下内容

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://hadoop102:3306/hive?useSSL=false</value>
            <description>jdbc连接的URL</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
            <description>jdbc驱动类</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
            <description>用户名</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>root</value>
            <description>密码</description>
        </property>
        
        <!-- 下面两处的校验是为了derby的校验。如果换成了Mysql数据库,都需要设置成false,否则hive会启动失败 -->
        <property>
            <name>hive.metastore.schema.verification</name>
            <value>false</value>
            <description>hive元数据存储版本的验证</description>
    	</property>
        <property>
            <name>hive.metastore.event.db.notification.api.auth</name>
            <value>false</value>
            <description>hive元数据存储授权</description>
    	</property>
        
        <!-- hive存储真实数据路径:这个路径是有一个基础的,是建立在hdfs路径下
        	而在hdfs分布式根路径可通过web页面查看:http://192.168.10.111:9870/ -->
        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive/warehouse</value>
            <description>Hive表数据在HDFS的默认存储的工作目录</description>
        </property>
    </configuration>
    
(3) 初始化元数据库
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql -verbos

如果报错:Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'。这是因为没有创建hive数据库。创建即可:
在这里插入图片描述

若初始化成功,则hive数据库下创建74张表:
在这里插入图片描述

方式三:远程模式(实际开发中用)

(1) 配置MySQL

方式二中配置MySQL步骤一样

(2) 配置JDBC
  1. 方式二一致

  2. 方式二一致

  3. 让hive能够通过JDBC访问MySQL:在$HIVE_HOME/conf下新建hive-site.xml文件,参考同目录下的hive-default.xml.template模板,可在hive-site.xml中写入以下内容

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://hadoop102:3306/hive?useSSL=false</value>
            <description>jdbc连接的URL</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionDriverName</name>
            <value>com.mysql.jdbc.Driver</value>
            <description>jdbc驱动类</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionUserName</name>
            <value>root</value>
            <description>用户名</description>
        </property>
        <property>
            <name>javax.jdo.option.ConnectionPassword</name>
            <value>root</value>
            <description>密码</description>
        </property>
        
        <!-- hive存储真实数据路径:这个路径是有一个基础的,是建立在hdfs路径下
        	而在hdfs分布式根路径可通过web页面查看:http://192.168.10.111:9870/ -->
        <property>
            <name>hive.metastore.schema.verification</name>
            <value>false</value>
            <description>hive元数据存储版本的验证</description>
    	</property>
        <property>
            <name>hive.metastore.event.db.notification.api.auth</name>
            <value>false</value>
            <description>hive元数据存储授权</description>
    	</property>
        
        <!-- hive存储真实数据路径:在hdfs分布式根路径下的路径
    	     而在hdfs分布式根路径可通过web页面查看:http://192.168.10.111:9870/ -->
        <property>
            <name>hive.metastore.warehouse.dir</name>
            <value>/user/hive/warehouse</value>
            <description>Hive表数据在HDFS的默认存储的工作目录</description>
        </property>
    
        <!-- hive为外部提供一个访问元数据库的端口-->
        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://hadoop111:9083</value>
        </property>
    
        <!-- HiveServer2运行绑定host-->
        <property>
            <name>hive.server2.thrift.bind.host</name>
            <value>hadoop111</value>
        </property>
    </configuration>
    
(3) 初始化元数据库
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql -verbos

如果报错:Underlying cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown database 'hive'。这是因为没有创建hive数据库。创建即可:
在这里插入图片描述

若初始化成功,则hive数据库下创建74张表:
在这里插入图片描述

第五步:使用本地第一代hive客户端进行测试

  1. 先启动hadoop

  2. 启动数据库
    ① 如果是内嵌模式,则忽略此步。
    ② 如果本地模式远程模式,则要保证MySQL是开启的

    # 查看mysql状态:systemctl status mysqld
    # 关闭mysql:systemctl stop mysqld
    # 开启mysql:systemctl start mysqld
    
  3. 启动元数据库服务
    ① 如果是内嵌模式本地模式 ,则忽略此步。
    ② 如果是远程模式,则需要手动启动元数据库。有三种启动方式:

    1. 方式一:前台启动。启动后,当前窗口不可关闭,一旦关闭窗口(或按ctrl+c主动关闭),则元数据库停止服务

      $HIVE_HOME/bin/hive --service metastore
      
    2. 方式二:后台启动。能一直在后台运行。

      nohup $HIVE_HOME/bin/hive --service metastore &
      

      在这里插入图片描述

    3. 方式三:前台启动,开启日志。(方便查看错误信息)

      $HIVE_HOME/bin/hive --service metastore --hiveconf
      hive.root.logger=DEBUG,console
      
  4. 启动本地第一代hive客户端

    cd $HIVE_HOME/bin
    hive
    

    注意:

    1. 此时默认会在以下路径生成hive日志:/tmp/用户名/hive.log
    2. 会出现一个警告
      Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
      基于MR的Hive在 hive 2时已经过时,将来版本中可能会被弃用,考虑使用其他引擎(例如spark、tez),或者使用 hive 1.x。
      

      hive不推荐使用默认的MR做为执行引擎。

  5. 测试hive是否成功?
    在这里插入图片描述

    生成的test文件,其路径默认为hdfs路径下的:/user/hive/warehouse/test/000000_0。这是存储真实hive真实数据的路径,可以修改,在上面配置JDBC这一小节的第三步,编写hive-site.xml文件时,在如下代码中设置即可:
    在这里插入图片描述

第六步:使用远程hive客户端进行测试

只要元数据配置使用远程模式,才能有远程hive客户端

(1) 远程第一代hive客户端进行测试

原理:第一代hive客户端通过元数据服务访问元数据库
在这里插入图片描述
步骤:

  1. 在远程主机上,按照本地安装hive步骤第一步、第二步、第三步、第四步、第五步、第六步安装hive

  2. 在远程主机上,在$HIVE_HOME/conf下新建hive-site.xml文件,写入:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <!-- 通过以下元数据端口范围元数据库-->
        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://192.168.10.111:9083</value>
        </property>
    </configuration>
    
  3. 集群开启hadoop

  4. 在配有元数据库的主机上,开启MySQL

    # 查看mysql状态:systemctl status mysqld
    # 关闭mysql:systemctl stop mysqld
    # 开启mysql:systemctl start mysqld
    
  5. 在配有元数据库的主机上,开启metastore服务

    # 方式一:前台启动
    $HIVE_HOME/bin/hive --service metastore
    # 方式二:后台启动
    nohup $HIVE_HOME/bin/hive --service metastore &
    # 方式三:前台启动并开启日志
    $HIVE_HOME/bin/hive --service metastore --hiveconf
    hive.root.logger=DEBUG,console
    
  6. 在远程主机上开启第一代hive客户端

    cd $HIVE_HOME/bin
    hive
    
(2) 远程第二代hive客户端进行测试

原理:第二代hive客户端先HiveServer2服务连接元数据访问,元数据访问能直接访问元数据库。
在这里插入图片描述

步骤:

  1. 在远程主机上,按照本地安装hive步骤第一步、第二步、第三步、第四步、第五步、第六步安装hive

  2. 在远程主机上,在$HIVE_HOME/conf下新建hive-site.xml文件,写入:

    <?xml version="1.0"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
        <!-- 通过以下元数据端口范围元数据库-->
        <property>
            <name>hive.metastore.uris</name>
            <value>thrift://192.168.10.111:9083</value>
        </property>
    </configuration>
    
  3. 集群开启hadoop

  4. 在配有元数据库的主机上,开启MySQL

    # 查看mysql状态:systemctl status mysqld
    # 关闭mysql:systemctl stop mysqld
    # 开启mysql:systemctl start mysqld
    
  5. 在配有元数据库的主机上,开启metastore服务

    # 方式一:前台启动
    $HIVE_HOME/bin/hive --service metastore
    # 方式二:后台启动
    nohup $HIVE_HOME/bin/hive --service metastore &
    # 方式三:前台启动并开启日志
    $HIVE_HOME/bin/hive --service metastore --hiveconf
    hive.root.logger=DEBUG,console
    
  6. 在配有元数据库的主机主机上,开启hiveserver2服务

    # 方式一:前台启动
    $HIVE_HOME/bin/hive --service hiveserver2
    # 方式二:后台启动
    nohup $HIVE_HOME/bin/hive --service hiveserver2&
    # 方式三:前台启动并开启日志
    $HIVE_HOME/bin/hive --service hiveserver2--hiveconf
    hive.root.logger=DEBUG,console
    
  7. 在远程主机上开启第二代hive客户端

    cd $HIVE_HOME/bin
    beeline
    

    jdbc:hive2://hadoop102:10000/default
    在这里插入图片描述

3. 第三方可视化工具 IntelliJ IDEA

(1) 连接hive

使用hive自带的第一代或第二代hive客户端去写HQL不太方便,接下来使用第三方工具IDEA充当hive客户端的角色。

由于Hadoop集群配置在虚拟机中,IDEA只能远程访问hive,所以hive必须必须采用远程模式配置元数据库。配置好后:

  1. 先启动hadoop

  2. 启动MySQL数据库

    # 查看mysql状态:systemctl status mysqld
    # 关闭mysql:systemctl stop mysqld
    # 开启mysql:systemctl start mysqld
    
  3. 启动元数据库服务

    # 采用后台启动元数据服务
    nohup $HIVE_HOME/bin/hive --service metastore &
    

    在这里插入图片描述

  4. 开启hiveserver2服务

    # 采用后台启动hiveserver2服务
    nohup $HIVE_HOME/bin/hive --service hiveserver2 &
    

    在这里插入图片描述

  5. 打开IDEA进行配置

    1. 创建项目
      在这里插入图片描述

    2. 配置hive驱动

      • 方式一:在pom.xml文件中配置hive-jdbc【通过方式二可以查看对应hive版本】
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述

      • 方式二:将hive-jdbc-jar包配置到IDEA中
        在这里插入图片描述
        在这里插入图片描述

        再将hive安装包解压,在$HIVE_HOME$/jdbc/下找到hive驱动程序,并添加到IDEA中。
        在这里插入图片描述
        在这里插入图片描述

    3. 开启连接
      在这里插入图片描述
      在这里插入图片描述

(2) 创建文件,并执行MySQL语句

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(3) 一些按钮的解释

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/84537.html

(0)
小半的头像小半

相关推荐

半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!