Hadoop3.x ——Hive安装部署

注意事项

  • Hive是一款基于Hadoop的数据仓库软件,不管使用何种方式配置Hive Metastore,必须先保证服务器的基础环境正常,Hadoop集群健康可用

      1. 服务器基础环境
      • 集群时间同步、防火墙关闭、主机Host映射、免密登录、JDK安装
      1. Hadoop集群健康可用
      • 启动Hive之前必须先启动Hadoop集群
      • 特别要注意,需等待HDFS安全模式关闭之后再启动运行Hive
      • Hive不是分布式安装运行的软件,其分布式的特性主要借由Hadoop完成。包括分布式存储、分布式计算
  • metastore 服务配置模式

    • 本次配置的是远程模式
      请添加图片描述
      请添加图片描述

Hadoop 和 Hive 整合

  • 因为Hive需要把数据存储在HDFS上,并且通过MapReduce作为执行引擎处理数据

  • 因此需要在Hadoop中添加相关配置属性,以满足Hive在Hadoop上运行

  • 修改Hadoop中core-site.xml,并且Hadoop集群同步配置文件重启生效

<!-- 整合hive 用户代理设置 -->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

搭建Hive

1. 安装MySQL

注意MySQL只需要在一台机器安装并且需要授权远程访问

我选择把MySQL安装在node1

  • 卸载Centos7自带的mariadb

    [root@node1 ~]# rpm -qa|grep mariadb
    mariadb-libs-5.5.64-1.el7.x86_64
    You have new mail in /var/spool/mail/root
    [root@node1 ~]# rpm -e --nodeps mariadb-libs-5.5.64-1.el7.x86_64
    [root@node1 ~]# rpm -qa|grep mariadb
    
    • rpm -qa | grep xxx

      | 是管道技术,删选的意思 ; grep 查找——一种文本搜索工具

      解读: 在-qa返回的信息中对xxx进行查找,并返回为最终结果

    • rpm -e --nodeps <rpm packagename>

      不检查依赖而强制删除

  • 安装MySQL

    [root@node1 ~]# mkdir /export/software/mysql
    
    # 上传mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 到上述文件夹下  解压
    [root@node1 ~]# cd /export/software/mysql
    [root@node1 mysql]# ls
    mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
    [root@node1 mysql]# tar -xvf mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar
    
    [root@node1 mysql]# yum -y install libaio
    [root@node1 mysql]# rpm -ivh mysql-community-common-5.7.29-1.el7.x86_64.rpm mysql-community-libs-5.7.29-1.el7.x86_64.rpm mysql-community-client-5.7.29-1.el7.x86_64.rpm mysql-community-server-5.7.29-1.el7.x86_64.rpm
    
  • MySQL 初始化设置

    #初始化
    [root@node1 mysql]# mysqld --initialize
    
    #更改所属组
    [root@node1 mysql]# chown mysql:mysql /var/lib/mysql -R
    
    #启动mysql
    [root@node1 mysql]# systemctl start mysqld.service
    
    #查看生成的临时root密码
    [root@node1 mysql]# cat  /var/log/mysqld.log
    # 找到类似如下信息,这里 >kl-lOa!i6FB 就是生成的临时root密码
    [Note] A temporary password is generated for root@localhost: >kl-lOa!i6FB
    

    chown mysql:mysql /var/lib/mysql -R

    递归地将/var/lib/mysql以及其子目录下的所有文件的所有者皆变更为用户mysql

  • 修改root密码,授权远程访问,设置开机自启动

    [root@node1 mysql]# mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.29
    
    Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    
    # 更新root密码,设置为hadoop
    # 使用user()可以获取当前用户名
    mysql> alter user user() identified by 'hadoop';
    
    # 授权
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hadoop' WITH GRANT OPTION;
    
    # 刷新
    mysql> FLUSH PRIVILEGES;
    
    # ctrl+d 可以直接退出MySQL
    
    # mysql的启动,关闭,状态查看 (这几个命令必须记住)
    [root@node1 mysql]# systemctl stop mysqld
    [root@node1 mysql]# systemctl status mysqld
    [root@node1 mysql]# systemctl start mysqld
    
    # 设置MySQL为开机自启
    [root@node1 mysql]# systemctl enable mysqld
    
    # 检查是否设置成功,有这么一行是enable就可以了
    [root@node1 mysql]# systemctl list-unit-files | grep mysqld
    mysqld.service                                enabled
    
  • 补充——Centos7 干净卸载mysql 5.7

    #关闭mysql服务
    [root@node1 ~]# systemctl stop mysqld.service
    
    #查找安装mysql的rpm包
    [root@node1 ~]# rpm -qa | grep -i mysql      
    mysql-community-libs-5.7.29-1.el7.x86_64
    mysql-community-common-5.7.29-1.el7.x86_64
    mysql-community-client-5.7.29-1.el7.x86_64
    mysql-community-server-5.7.29-1.el7.x86_64
    
    #卸载
    [root@node1 ~]# yum remove mysql-community-libs-5.7.29-1.el7.x86_64 mysql-community-common-5.7.29-1.el7.x86_64 mysql-community-client-5.7.29-1.el7.x86_64 mysql-community-server-5.7.29-1.el7.x86_64
    
    #查看是否卸载干净
    [root@node1 ~]# rpm -qa | grep -i mysql
    
    #查找mysql相关目录 删除
    [root@node1 ~]# find / -name mysql
    /var/lib/mysql
    /var/lib/mysql/mysql
    /usr/share/mysql
    
    [root@node1 ~]# rm -rf /var/lib/mysql
    [root@node1 ~]# rm -rf /var/lib/mysql/mysql
    [root@node1 ~]# rm -rf /usr/share/mysql
    
    #删除默认配置 日志
    [root@node1 ~]# rm -rf /etc/my.cnf 
    [root@node1 ~]# rm -rf /var/log/mysqld.log
    

2. 安装Hive

node1安装即可,因为Hive虽然不是分布式的软件,却具有分布式能力(借助Hadoop和其他分布式计算引擎)

  • 上传、解压安装包

    [root@node1 mysql]# cd ../../server/
    [root@node1 server]# pwd
    /export/server
    [root@node1 server]# ls
    apache-hive-3.1.2-bin.tar.gz  hadoop-3.3.0  jdk1.8.0_241
    [root@node1 server]# tar -zxvf apache-hive-3.1.2-bin.tar.gz 
    
  • 解决Hive与Hadoop之间guava版本差异

    [root@node1 server]# cd apache-hive-3.1.2-bin/
    [root@node1 apache-hive-3.1.2-bin]# rm -rf lib/guava-19.0.jar 
    [root@node1 apache-hive-3.1.2-bin]# cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
    
  • 修改Hive的配置文件

    • hive-env.sh

      [root@node1 apache-hive-3.1.2-bin]# cd conf/
      [root@node1 conf]# mv hive-env.sh.template hive-env.sh
      
      [root@node1 conf]# vim hive-env.sh
      export HADOOP_HOME=/export/server/hadoop-3.3.0
      export HIVE_CONF_DIR=/export/server/apache-hive-3.1.2-bin/conf
      export HIVE_AUX_JARS_PATH=/export/server/apache-hive-3.1.2-bin/lib
      
    • hive-site.xml (新文件)

      <configuration>
      <!-- 存储元数据mysql相关配置 -->
      <property>
      	<name>javax.jdo.option.ConnectionURL</name>
      	<value>jdbc:mysql://node1:3306/hive3?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
      </property>
      
      <property>
      	<name>javax.jdo.option.ConnectionDriverName</name>
      	<value>com.mysql.jdbc.Driver</value>
      </property>
      
      <property>
      	<name>javax.jdo.option.ConnectionUserName</name>
      	<value>root</value>
      </property>
      
      <property>
      	<name>javax.jdo.option.ConnectionPassword</name>
      	<value>hadoop</value>
      </property>
      
      <!-- H2S运行绑定host -->
      <property>
          <name>hive.server2.thrift.bind.host</name>
          <value>node1</value>
      </property>
      
      <!-- 远程模式部署metastore metastore地址 -->
      <property>
          <name>hive.metastore.uris</name>
          <value>thrift://node1:9083</value>
      </property>
      
      <!-- 关闭元数据存储授权  --> 
      <property>
          <name>hive.metastore.event.db.notification.api.auth</name>
          <value>false</value>
      </property>
      </configuration>
      
      
  • 上传mysql jdbc驱动到hive的lib

    mysql-connector-java-5.1.32.jar

  • 初始化元数据(确保Hadoop集群已经启动且健康可用)

    [root@node1 conf]# cd ../
    [root@node1 apache-hive-3.1.2-bin]# bin/schematool -initSchema --dbType mysql -verbos
    
    #出现下面这两行表示初始化成功
    Initialization script completed
    schemaTool completed
    #初始化成功会在mysql中创建74张表
    
  • 在hdfs创建hive存储目录(如存在则不用操作)

    [root@node1 conf]# hadoop fs -mkdir /tmp
    [root@node1 conf]# hadoop fs -mkdir -p /user/hive/warehouse
    [root@node1 conf]# [root@node1 conf]# hadoop fs -chmod g+w /tmp
    [root@node1 conf]# hadoop fs -chmod g+w /user/hive/warehouse
    

3. 启动Hive

  • 1、启动Metastore服务

    #前台启动  关闭ctrl+c
    [root@node1 conf]# /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore
    
    #前台启动开启debug日志
    [root@node1 conf]# /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore --hiveconf hive.root.logger=DEBUG,console  
    
    
    #后台启动 进程挂起  关闭使用jps+ kill -9
    [root@node1 conf]# nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service metastore &
    [root@node1 apache-hive-3.1.2-bin]# jps
    # 多出了一个RunJar进程
    14958 RunJar
    
    # 后台启动的日志在启动时的目录下的 nohup.out
    [root@node1 apache-hive-3.1.2-bin]# cat nohup.out
    
  • 2、启动HiveServer2服务

    Hive 自带客户端

    老版本 bin/hive

    新版本 bin/beeline

    启动HiveServer2之前必须先启动Metastore服务,服务启动到正常提供服务需要一定时间

    [root@node1 conf]# nohup /export/server/apache-hive-3.1.2-bin/bin/hive --service hiveserver2 &
    
    # 会出现两个RunJar
    [root@node1 bin]# jps
    3157 RunJar
    2990 RunJar
    
  • 3、beeline客户端连接

    • 拷贝node1安装包到beeline客户端机器上(node3)

      [root@node1 bin]# scp -r /export/server/apache-hive-3.1.2-bin/ root@node3:/export/server
      
  • 4、第一代客户端访问

    [root@node3 ~]# /export/server/apache-hive-3.1.2-bin/bin/hive
    
    Logging initialized using configuration in jar:file:/export/server/apache-hive-3.1.2-bin/lib/hive-common-3.1.2.jar!/hive-log4j2.properties Async: true
    Hive Session ID = ef5421b2-af79-486e-bd6f-d44ac5cd561f
    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.
    hive> 
    
  • 5、第二代客户端访问

    [root@node3 ~]# /export/server/apache-hive-3.1.2-bin/bin/beeline
    
    beeline> ! connect jdbc:hive2://node1:10000
    Enter username for jdbc:hive2://node1:10000: root
    Enter password for jdbc:hive2://node1:10000: (不用输密码,直接回车)
    
  • 6、如果发生如下错误

    Error: Could not open client transport with JDBC Uri: jdbc:hive2://node1:10000: Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: root is not allowed to impersonate root (state=08S01,code=0)
    
    • 措施

      在hadoop的配置文件core-site.xml中添加如下属性:
      <property>
              <name>hadoop.proxyuser.root.hosts</name>
              <value>*</value>
      </property>
      <property>
              <name>hadoop.proxyuser.root.groups</name>
              <value>*</value>
      </property>
      

4. DataGrip连接hive

需要重新配置driver,导入hive的驱动

请添加图片描述
请添加图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值