前言

前面我们已经搭建了 Hadoop 环境,现在开始搭建 Hive 环境 - Hive2.3.8 下载地址

安装

下载并解压

1
2
3
wget https://downloads.apache.org/hive/hive-2.3.8/apache-hive-2.3.8-bin.tar.gz
tar -zxvf apache-hive-2.3.8-bin.tar.gz -C /opt/bigdata
mv /opt/bigdata/apache-hive-2.3.8-bin /opt/bigdata/hive-2.3.8

安装 mysql

1
sudo apt-get install -y mysql-server-5.7

输入 root 密码完成安装

下载 mysql jdbc driver

1
2
cd /opt/bigdata/hive-2.3.8/lib
wget https://maven.aliyun.com/repository/public/mysql/mysql-connector-java/8.0.20/mysql-connector-java-8.0.20.jar

配置环境变量

/etc/profile 添加如下配置:

1
2
export HIVE_HOME=/opt/bigdata/hive-2.3.8
PATH=$PATH:$HIVE_HOME/bin

source /etc/profile 使配置生效

配置 hive

1
2
3
mv conf/hive-env.sh.template conf/hive-env.sh # 重命名环境文件
mv conf/hive-log4j2.properties.template conf/hive-log4j2.properties # 重命名日志文件
cp conf/hive-default.xml.template conf/hive-site.xml # 拷贝生成 xml 文件

然后修改 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
<!-- hive元数据地址,默认是/user/hive/warehouse -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<!-- hive查询时输出列名 -->
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<!-- 显示当前数据库名 -->
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!-- 开启本地模式,默认是false -->
<property>
<name>hive.exec.mode.local.auto</name>
<value>true</value>
</property>

<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>Username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
<!-- URL用于连接远程元数据 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master1:9083</value>
</property>
<!-- 元数据使用mysql数据库 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master1:3306/hivedb?createDatabaseIfNotExist=true&amp;userSSL=false</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>

开启 mysql 远程连接

1
2
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;

再进入 /etc/mysql/mysql.conf.d/mysqld.cnf 文件将 bind-address 设置成 0.0.0.0

重启 mysql 服务

1
sudo systemctl restart mysql  

验证 Hive 安装

运行Hive之前,需要创建 /tmp 文件夹在 HDFS 独立的 Hive 文件夹。在这里使用 /user/hive/warehouse 文件夹。

1
2
3
4
hadoop fs -mkdir /tmp 
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse

初始化 Hive

1
schematool -dbType mysql -initSchema

出现 schemeTool completed 表示初始化成功

1
2
3
4
5
6
7
Metastore connection URL:	 jdbc:mysql://master1:3306/hivedb?createDatabaseIfNotExist=true&userSSL=false
Metastore Connection Driver : com.mysql.cj.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

开启元数据服务

1
nohup hive --service metastore & 

进入 Hive Shell

1
2
3
4
5
6
7
8
bennie@master1:/opt/bigdata/hive-2.3.8$ hive
Logging initialized using configuration in file:/opt/bigdata/hive-2.3.8/conf/hive-log4j2.properties Async: true
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> show databases;
OK
default
Time taken: 8.601 seconds, Fetched: 1 row(s)
hive>

Hiveserver2

开启 hiveserver2,修改 hive-site.xml 配置文件,增加如下配置:

1
2
3
4
5
6
7
8
9
<!-- 这是hiveserver2 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master1</value>
</property>

配置 hadoop 中的 core-site.xml 文件,并同步带其他主机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<property>     
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.bennie.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.bennie.groups</name>
<value>*</value>
</property>

启动 hiveserver2

1
2
3
4
5
hiveserver2
#或者
hive --service hiveserver2
# 后台运行
hiveserver2 &