[Hadoop高可用集群]数仓工具之Hive的安装部署(超级详细,适用于初学者)

[Hadoop]数仓工具Hive的安装部署

📕作者:喜欢水星记

🏆系列:Hadoop高可用集群

🔋收藏:本文记录我搭建过程供大家学习和自己之后复习,如果对您有用,希望能点赞收藏加关注

Hive的简介

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

最初,Hive是由Facebook开发,后来由Apache软件基金会开发,并作为进一步将它作为名义下Apache Hive为一个开源项目。

Hive 建立在Hadoop 基础之上,Hive 与 Hadoop 紧密集成,其设计可快速对 PB 级数据进行操作。

Hive的意义就是在业务分析中将用户容易编写、会写的Sql语言转换为复杂难写的MapReduce程序,从而大大降低了Hadoop学习的门槛,让更多的用户可以利用Hadoop进行数据挖掘分析。

Hive的优点

  • Hive 所采用的数据可通过批处理快速处理 PB 级数据。

  • Hive 提供非程序员可以使用的熟悉的类似于 SQL 的界面。

  • Hive 可根据使用者的需求被轻松分发与扩展。

  • Hive支持标准的SQL语法,免去了用户编写MapReduce程序的过程,大大减少了公司的开发成本

  • Hive的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能力较弱与不擅长Java语言的用户能够在HDFS大规模数据集上很方便地利用SQL 语言查询、汇总、分析数据

    Hive的架构

    架构图


    Hadoop 和 MapReduce 是 Hive 架构的根基

    Hive的体系结构可以分为以下几部分:

    1. 用户接口主要有三个:CLI,JDBC/ODBC和 Web UI。
      • ①其中,最常用的是CLI,即Shell命令行;
      • ②JDBC/ODBC Client是Hive的Java客户端,与使用传统数据库JDBC的方式类似,用户需要连接至Hive Server;
      • ③Web UI是通过浏览器访问。
      • Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
      • 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
      • Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成。

    安装Hive

    Hive搭建环境

    • Centos7的操作系统
    • 已安装完JDK
    • 已搭建Hadoop
    • 已搭建MySQL数据库平台

      如果没有安装可以查看我上一篇文章:

      Hadoop海量数据存储与计算高可用集群部署

      ==注意:==初学者最好在完成我上一篇Hadoop集群搭建之后再安装Hive

      软件版本选用

      选用Hive的2.1.1版本,软件包名apache-hive-2.1.1-bin.tar.gz

      Hive工具使用JDBC方式连接MySQL数据库,需要用到MySQL数据库连接工具软件,选用该软件的5.1.42版本,软件包名mysql-connector-java-5.1.42-bin.jar

      软件下载:

      提取链接

      提取码:0768

      Hive工具安装配置

      Hive的安装过程只需要在Cluster-01主机的admin用户下进行

      在Cluster-01上:

      su - admin # 进入admin用户

      mkdir setups # 将本次实验所需要的软件包上传至该目录,之前已经上传 我这里就不上传了

      mkdir hive #创建用于存放Hive相关文件的目录

      cd ~/hive

      mkdir tmp

      tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz

      [root@Cluster-01 ~]# su - admin				# 进入admin用户
      Last login: Mon May  1 22:42:23 CST 2023 on pts/0
      [admin@Cluster-01 ~]$ mkdir hive			# 创建用于存放Hive相关文件的目录
      [admin@Cluster-01 ~]$ cd hive/				
      [admin@Cluster-01 hive]$ mkdir tmp			# 创建Hive的本地临时文件目录"tmp"
      [admin@Cluster-01 hive]$ tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz
      [admin@Cluster-01 hive]$ ls
      apache-hive-2.1.1-bin  tmp
      

      配置Hive相关的环境变量

      vi ~/.bash_profile

      对配置文件进行修改,在文件末尾添加以下内容:

      #hive environment
      HIVE_HOME=/home/admin/hive/apache-hive-2.1.1-bin
      PATH=$HIVE_HOME/bin:$PATH
      export HIVE_HOME PATH
      

      刷新环境变量,使其立即生效

      source ~/.bash_profile

      验证环境变量是否配置成功

      echo $HIVE_HOME

      echo $PATH

      出现hive则表明环境变量配置成功

      修改Hive相关配置文件

      进入Hive的配置文件目录

      cd ~/hive/apache-hive-2.1.1-bin/conf

      Hive的配置文件默认都被命名为了模板文件,需要对其进行拷贝重命名之后才能使用:

      cp hive-env.sh.template hive-env.sh

      cp hive-log4j2.properties.template hive-log4j2.properties

      cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

      cp hive-default.xml.template hive-site.xml

      对配置文件进行修改,找到相关配置项并对其值进行修改(本个文件一共有3处修改的)

      vi hive-env.sh

      找到配置项“HADOOP_HOME”,该项用于指定Hadoop所在的路径,将其值改为以下内容:

      HADOOP_HOME=/home/admin/hadoop/hadoop-2.7.3
      

      找到配置项“HIVE_CONF_DIR”,该项用于指定Hive的配置文件所在的路径,将其值改为以下内容:

      export HIVE_CONF_DIR=/home/admin/hive/apache-hive-2.1.1-bin/conf
      

      找到配置项“HIVE_AUX_JARS_PATH”,该项用于指定Hive的lib文件所在的路径,将其值改为以下内容:

      export HIVE_AUX_JARS_PATH=/home/admin/hive/apache-hive-2.1.1-bin/lib
      

      启动相关进程

      在五台主机的admin用户下执行

      zkServer.sh status #查看zookeeper的状态

      zkServer.sh start #启动zookeeper,如果zookeeper已经启动则不需要执行本条命令

      在Cluster-01的admin用户下执行

      start-all.sh

      在Cluster-02的admin用户下执行

      yarn-daemon.sh start resourcemanager

      在HDFS中创建Hive相关目录并赋权

      本项操作仅在Cluster-01的admin用户下进行

      hadoop fs -mkdir -p /user/hive/tmp

      hadoop fs -mkdir -p /user/hive/warehouse

      hadoop fs -mkdir -p /user/hive/log

      hadoop fs -chmod 777 /user/hive/tmp

      hadoop fs -chmod 777 /user/hive/warehouse

      hadoop fs -chmod 777 /user/hive/log

      [admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/tmp	  #在HDFS中分别创建Hive的临时文件目录tmp
      [admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/warehouse	#在HDFS中分别创建Hive的数据存储目录“warehouse”
      [admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/log	#在HDFS中分别创建Hive的日志文件目录“log”
      [admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/tmp			# 赋权
      [admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/warehouse
      [admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/log
      [admin@Cluster-01 conf]$ hadoop fs -ls /user/hive			# 查看刚刚创建的目录
      Found 3 items
      drwxrwxrwx   - admin supergroup          0 2023-05-08 21:32 /user/hive/log
      drwxrwxrwx   - admin supergroup          0 2023-05-08 21:32 /user/hive/tmp
      drwxrwxrwx   - admin supergroup          0 2023-05-08 21:32 /user/hive/warehouse
      

      修改相关配置文件

      vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml

      找到下列标签“”所标识的属性项名称所在位置,修改其标签“”所标识的属性值部分的内容:

      第一处:  hive.exec.scratchdir /tmp/hive 修改为::  hive.exec.scratchdir /user/hive/tmp (只修改了标签里面的值)
      
      第二处: hive.metastore.warehouse.dir /user/hive/warehouse location of default database for the warehouse修改为:: hive.metastore.warehouse.dir /user/hive/warehouse location of default database for the warehouse注意:这里有的人可能不需要修改 
      第三处:  hive.querylog.location ${system:java.io.tmpdir}/${system:user.name} Location of Hive run time structured log file 修改为:::  hive.querylog.location /user/hive/log Location of Hive run time structured log file(只修改了标签里面的值)
      

      小技巧:该文档内容较多,可以在编辑器内使用命令“/关键字”直接进行搜索,使用快捷键“n”可以切换到下一个关键字的所在位置。

      创建hive元数据数据库

      本项的所有操作步骤使用五台主机的用户root进行,5台都要操作

      在MySQL数据库SQL服务节点Cluster-04中创建一个数据库“hive”用于存放Hive的元数据,该数据库的用户名和密码均为“hive”,数据库名、用户名、密码均可以自行设定,但需要与Hive配置文件中的内容相对应,连接MySQL数据库:

      启动MySQL:

      将五台主机切换到root用户

      su - root (五台都要执行)

      在Cluster-01执行:

      ndb_mgmd -f /usr/local/mysql/etc/config.ini

      在Cluster-02,03 执行:

      ndbd

      在Cluster-04,05执行:

      service mysql start

      执行完后查看连接状态:

      ndb_mgm -e show

      进入控制台

      在Cluster-04的root用户下执行

      mysql -hCluster-04 -uroot -pmysqlabc

      在控制台执行以下命令进行数据库的创建:

      CREATE DATABASE hive;

      USE hive;

      CREATE USER ‘hive’@‘%’ IDENTIFIED BY ‘hive’;

      GRANT ALL ON hive.* TO ‘hive’@‘%’;

      FLUSH PRIVILEGES;

      show databases;

      quit;

      mysql> CREATE DATABASE hive;			# 创建数据库hive
      Query OK, 1 row affected (0.05 sec)
      mysql> USE hive;						# 切换到新创建的hive数据库
      Database changed
      mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';		# 创建数据库用户hive
      Query OK, 0 rows affected (0.00 sec)
      mysql> GRANT ALL ON hive.* TO 'hive'@'%';    # 设置hive数据库的访问权限,hive用户拥有所有操作权限并支持远程访问
      Query OK, 0 rows affected (0.00 sec)
      mysql> FLUSH PRIVILEGES;					# 刷新数据库权限信息
      Query OK, 0 rows affected (0.00 sec)
      mysql> show databases;						# 显示数据库
      +--------------------+
      | Database           |
      +--------------------+
      | information_schema |
      | hive               |
      | mysql              |
      | ndbinfo            |
      | performance_schema |
      | sys                |
      | test               |
      +--------------------+
      7 rows in set (0.00 sec)
      mysql> quit;				# 退出数据库控制台
      Bye
      

      添加MySQL连接的相关配置信息

      本项仅在Cluster-01的admin用户下进行

      vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml

      找到下列标签“”所标识的属性项名称所在位置,修改其标签“”所标识的属性值部分的内容:

      将:  javax.jdo.option.ConnectionURL jdbc:derby:;databaseName=metastore_db;create=true  修改为:::
       javax.jdo.option.ConnectionURL jdbc:mysql://Cluster-04:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false  只需要修改标签里面的内容即可
      
       javax.jdo.option.ConnectionDriverName org.apache.derby.jdbc.EmbeddedDriver Driver class name for a JDBC metastore 修改为:  javax.jdo.option.ConnectionDriverName com.mysql.jdbc.Driver Driver class name for a JDBC metastore 
      将:  javax.jdo.option.ConnectionUserName APP Username to use against metastore database 修改为:  javax.jdo.option.ConnectionUserName hive Username to use against metastore database 
      将:
       javax.jdo.option.ConnectionPassword mine password to use against metastore database 修改为:  javax.jdo.option.ConnectionPassword hive password to use against metastore database 

      将MySQL的数据库连接工具包添加到Hive的“lib”目录下

      cp -v ~/setups/mysql-connector-java-5.1.42-bin.jar ~/hive/apache-hive-2.1.1-bin/lib

      添加MySQL连接的相关配置信息

      vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml

      在编辑器中使用快捷键“:”进入到编辑器的命令模式,也称为末行模式,然后使用命令

      %s#${system:java.io.tmpdir}#/home/admin/hive/tmp#g
      
      %s#${system:user.name}#${user.name}#g
      

      Hive初始化

      在Cluster-01的admin用户下进行

      schematool -initSchema -dbType mysql

      删除hive中$HIVE_HOME/lib下面的log4j-slf4j-impl-2.4.1.jar包

      cd $HIVE_HOME/lib

      rm -rf log4j-slf4j-impl-2.4.1.jar

      为了防止与Hadoop中的jar包slf4j-log4j12-1.7.10.jar冲突

      Hive工具启动和验证

      本项步骤只在中Cluster-01主机admin用户上进行操作即可

      进入hive控制台

      hive

      查看数据库

      show databases;

      退出

      quit;

      简单练习

      在Cluster-01的admin用户下

      基本命令

      show databases; # 显示数据库信息

      create database test; # 创建一个名为test的数据库

      use test; # 使用刚刚创建的test库

      show tables; # 显示当前的表

      进入hive控制台

      hive

      创建表及加载数据

      create table student1 (
      id int comment 'id of student1',
      name string comment 'name of student1',
      age int comment 'age of student1',
      gender string comment 'sex of student1',
      addr string
      )    
      comment 'this is a demo'
      row format delimited fields terminated by '\t';
      

      查看表

      desc student1;

      在任意一台主机的root用户下,我这里使用Cluster-04的root进入MySQL

      mysql -hCluster-04 -uroot -pmysqlabc

      (注意:mysqlabc 是我自己设置的密码)

      进入mysql控制台之后,调用hive的库

      use hive;

      查看刚刚创建的表信息

      select * from TBLS;

      退出控制台

      quit;