Hive3.1.3安装

介绍

hive是一个基于Hadoop的数据仓库工具,用于处理大规模数据集。它提供了类似SQL的查询语言,称为HiveQL(Hive Query Language),使用户能够使用类似于SQL的语法来查询和分析存储在Hadoop集群中的数据。

Hive的设计目标是为非技术用户提供一个简单易用的界面,使他们能够利用hadoop的强大能力进行数据处理和分析,而无需编写复杂的MapReduce程序。Hive将查询转换为一系列的MapReduce任务,并在Hadoop集群上执行这些任务,从而实现数据的处理和分析。

以下是Hive的一些重要特点和功能:

  • SQL-Like查询语言:Hive提供了类似于SQL的查询语言(HiveQL),使用户能够使用熟悉的SQL语法来查询和分析数据。HiveQL支持常见的SQL操作,如SELECT、JOIN、GROUP BY、OROER BY等,以及用户自定义函数(UDF)和聚合函数。
  • 可扩展性:Hive可以处理大规模的数据集,并能够在Hadoop集群上进行并行处理。它利用Hadoop的分布式计算能力,可以处理PB级别的数据。
  • 数据存储和格式:Hive支持多种数据存储格式,包括文本文件、序列文件、Parquet、ORC(Optimized Row Columnar)等。这些存储格式可以提高查询性能和存储效率。
  • 元数据管理:Hive使用元数据来描述和管理存储在Hadoop集群中的数据。元数据存储在关系型数据库中,包含表、列、分区等信息。通过元数据,Hive可以对数据进行优化和管理。
  • 数据抽象和转换:Hive提供了数据抽象和转换的功能,可以将结构化和半结构化数据映射到表中,并进行数据转换和清洗。他支持外部表、分区表和桶表等数据组织方式,以及数据导入和导出数据。
  • 集成生态系统:Hive和Hadoop生态系统中的其他工具和组件(如Hbase、Spark、Tez等)紧密集成,可以与它们进行交互和整合。这使得用户可以灵活地使用不同的工具和技术来处理和分析数据。

安装前准备

环境

  • Centos 7.x
  • java 1.8.0_201
  • Hadoop 3.3.4
  • Hive 3.1.3

Hadoop相关环境安装这里不做赘述,直接进行Hive的安装

安装Hive

下载Hive

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
#下载Hive
wget https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz --no-check-certificate


#解压至安装目录
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /home/hadoop/software/


#安装包下主要目录和文件:
bin:包含了Hive的可执行文件,如Hive、hiveserver2等。这些可执行文件用于启动和管理Hive服务。
binary-package-licenses:包含了hive软件包中包含的其他二进制软件包的许可证文件。
conf:包含了Hive的配置文件,如hive-site.xml、hive-env.sh等。这些配置用于配置Hive的行为,如数据库连接、存储路径等。
examples:包含了一些hive的示例脚本,用于演示和学习hive的用法。
hcatalog:包含了hive的HiveCatalog模块相关的文件。HiveCatalog是hive的元数据存储和管理组件,用于
存储表、分区、列等元数据信息。
jdbc:包含了hive的JDBC驱动程序文件。JDBC驱动程序允许使用java编程语言连接到hive并执行查询。
lib;包含了hive运行时所需的依赖库文件。这些库包括hive的核心功能和第三方库。
scripts:包含了一些hive的脚本文件,如metastore脚本、初始化脚本等。

#将hive安装目录分配至hadoop用户
chown -R hadoop:hadoop /home/hadoop/software/

配置环境变量

此处按自己的需求来,没有必须在/etc/profile添加 正常在~/.bashrc下添加就行,这里都加上了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
vim /etc/profile
......
#hive
export HIVE_HOME=/home/hadoop/software/apache-hive-3.1.3-bin
export PATH=$PATH:$HIVE_HOME/bin
export HIVE_CONF_DIR=/home/hadoop/software/apache-hive-3.1.3-bin/conf



##加载环境环境,测试是否安装成功
source /etc/profile

echo $HIVE_HOME
#出现以下内容,说明正常
/home/hadoop/software/apache-hive-3.1.3-bin
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
su - hadoop

vim ~/.bashrc
......
#hive
export HIVE_HOME=/home/hadoop/software/apache-hive-3.1.3-bin
export PATH=$PATH:$HIVE_HOME/bin
export HIVE_CONF_DIR=/home/hadoop/software/apache-hive-3.1.3-bin/conf

##加载环境环境
source ~/.bashrc

配置Hive

hdfs中创建对应目录

1
2
3
4
5
6
7
8
9
#创建对应目录
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -mkdir -p /user/hive/tmp
hadoop fs -mkdir -p /user/hive/log

#修改权限
hadoop fs -chmod -R 777 /user/hive/warehouse
hadoop fs -chmod -R 777 /user/hive/tmp
hadoop fs -chmod -R 777 /user/hive/log

修改hive-site.xml

默认没有hive-site.xml,参考/home/hadoop/software/apache-hive-3.1.3-bin/conf/hive-default.xml.template在conf目录下创建hive-site.xml

  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
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
#创建hive-site.xml
vim hive-site.xml


<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
      <!-- 配置元数据存储位置,本例使用MySQL数据库 -->
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://172.16.77.81:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
      <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
      <!-- 指定MySQL驱动 -->
      <name>javax.jdo.option.ConnectionDriverName</name>
      <value>com.mysql.jdbc.Driver</value>
      <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
      <!-- 指定MySQL数据库用户名 -->
      <name>javax.jdo.option.ConnectionUserName</name>
      <value>root</value>
      <description>username to use against metastore database</description>
  </property>
  <property>
      <!-- 指定MySQL数据库用户密码 -->
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>bnsbdlmysql</value>
      <description>password to use against metastore database</description>
  </property>
  <property>
      <!-- Hive 元数据存储版本的验证 -->
      <name>hive.metastore.schema.verification</name>
      <value>false</value>
  </property>
  <property>
      <!--元数据存储授权-->
      <name>hive.metastore.event.db.notification.api.auth</name>
      <value>false</value>
  </property>
  <!-- Hive 默认在 HDFS 的工作目录 -->
  <property>
      <!-- 指定Hive元数据仓库的位置 -->
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
  </property>
  <property>
      <!--Hive 运行时结构化日志文件的位置-->
      <name>hive.querylog.location</name>
      <value>/user/hive/log</value>
  </property>
  <property>
      <!--用于指定临时文件和目录的基本路径-->
      <name>hive.exec.scratchdir</name>
      <value>/user/hive/tmp</value>
  </property>
  <!-- HDFS配置结束 -->
  <property>
      <!--   用于在 Hive CLI 中控制查询结果中是否输出表头(Header)信息 -->
      <name>hive.cli.print.header</name>
      <value>true</value>
  </property>
  <property>
    <!--   用于控制是否自动收集列统计信息 -->
    <name>hive.stats.column.autogather</name>
    <value>false</value>
    <description>A flag to gather column statistics automatically.</description>
  </property>
  <property>
      <!--   用于控制在命令行中显示当前正在使用的数据库名称 -->
      <name>hive.cli.print.current.db</name>
      <value>true</value>
  </property>
  <property>
      <!--   HiveServer2所使用的Thrift服务端口号 默认为10000 -->
      <name>hive.server2.thrift.port</name>
      <value>10000</value>
  </property>
  <property>
      <!--指定 Hive Server 2 Thrift 服务绑定的主机名或 IP 地址-->
      <name>hive.server2.thrift.bind.host</name>
      <value>0.0.0.0</value>
      <description>IP address to listen on. Default is 0.0.0.0 for listening on all available interfaces.</description>
  </property>
  <property>
      <!-- 是 HiveServer2的Web UI服务端口号 默认是10002 -->
      <name>hive.server2.webui.port</name>
      <value>10002</value>
      <description>
        This sets the port number on which the HiveServer2 Web UI interface listens.
      </description>
  </property>
  <property>
      <!-- 用于指定 Hive Metastore 的地址,默认端口9083 -->
      <name>hive.metastore.uris</name>
      <value>thrift://172.16.77.202:9083</value>
  </property>
  <property>
      <!--用于控制查询优化器子啊执行查询计划时是否使用统计信息。解决select count(1)为0问题-->
      <name>hive.compute.query.using.stats</name>
      <value>true</value>
  </property>
</configuration>

修改日志文件

关于日志的配置文件有hive-log4j2.propertieshive-exec-log4j2.properties,需要提前复制出来,有需要可以对应修改内容。

1
2
3
4
cd /home/hadoop/software/apache-hive-3.1.3-bin/conf

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

修改hive-log4j2.properties文件

1
2
3
4
vim hive-log4j2.properties
......
#将property.hive.log.dir设置为固定路径
property.hive.log.dir = /home/hadoop/software/apache-hive-3.1.3-bin/logs

修改hive-exec-log4j2.properties

1
2
3
4
5
vim hive-exec-log4j2.properties
......
#修改内容
property.hive.log.file = exec.log
property.hive.log.dir = /home/hadoop/software/apache-hive-3.1.3-bin/logs

修改hive-env.sh

hive-env.sh.template复制为hive-env.sh,然后修改

1
2
3
4
5
6
7
8
vim hive-env.sh
......
#加入以下内容

export HADOOP_HOME=/home/hadoop/software/hadoop-3.3.4
export HIVE_CONF_DIR=/home/hadoop/software/apache-hive-3.1.3-bin/conf
#一个包含Hive附加库(auxiliary jars)的目录的路径。 #hivejar包路径
export HIVE_AUX_JARS_PATH=/home/hadoop/software/apache-hive-3.1.3-bin/lib

下载配置mysql的JDBC驱动

驱动包版本按自己数据库版本来 可以在https://repo1.maven.org/maven2/mysql/mysql-connector-java/ 进行选择下载

1
2
3
# 下载驱动包
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.46/mysql-connector-java-5.1.46.jar
mv  mysql-connector-java-5.1.46.jar $HIVE_HOME/lib/

解决jar包冲突

这里以hadoop的为准,一个是guava包 一个是slf4j包

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
####guava
# 删除hive包下的低版本guava
mv lib/guava-19.0.jar lib/guava-19.0.jar.bak

cp ~/software/hadoop-3.3.4/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/



######slf4j
mv lib/log4j-slf4j-impl-2.17.1.jar  lib/log4j-slf4j-impl-2.17.1.jar.bak

初始化数据库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#将hive目录设置为Hadoop用户所有 这个按需求操作
chown -R hadoop:hadoop /home/hadoop/software/

#切换用户
su - hadoop

#初始化数据库
schematool -initSchema -dbType mysql -verbose
......
#有以下输出就正常
beeline>
beeline> Initialization script completed
schemaTool completed
  • schematool: 这是 Hive 提供的用于管理元数据存储库的命令行工具。
  • -initSchema: 这是 schematool 的一个选项,指示它执行初始化元数据存储库的操作。
  • -dbType mysql: 这是另一个选项,指定要使用的数据库类型。在这种情况下,指定为 MySQL。这表示 Hive 将使用 MySQL 作为元数据存储库。
  • -verbose: 这是一个可选的选项,用于在执行操作时显示详细的输出信息。

启动Hive

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#注意:需要启动两个服务metastore和hiveserver2
#启动会占用9083、10000、10002端口
#9083端口为Hive Metastore
#10000端口为HiveServer2
#10002端口为HiveServer2 HTTP 界面
nohup bin/hive --service metastore > metastore.log 2>&1 &
nohup bin/hive --service hiveserver2 > hiveserver2.log 2>&1 &

#jps查看
jps
......
3098 RunJar
2892 RunJar


#启动客户端
bin/hive

#使用beeline连接,-u 指定jdbc连接
beeline -u jdbc:hive2://localhost:10000/default
Buy me a coffee
支付宝
微信
0%