介绍
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&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.properties和hive-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
|