目录
一、实验介绍
1.1 实验内容
在Hadoop集群上部署Hive数据仓库,使用MySQL作为元数据存储。
在Hive集群平台创建测试表,验证HiveQL在Hadoop Mapreduce中的执行情况。
1.2 实验知识点
Hive集群工作原理
Hive客户端访问方式
Hive与MySQL的关系
1.3 实验环境
Hive2.3.9
VMware Workstation 16 Pro for Windows
虚拟机镜像
1.4 实验资源
资源名称 | 存储目录 |
---|---|
Hive安装包 | /opt/software/package |
![]() |
1.5 实验步骤清单
hive部署(安装hive、创建元数据库、修改配置文件、创建测试目录、初始化hive)
hive测试(启动hibe、创建测试数据库并验证、使用beeline连接hive)
二、实训架构
序号 IP地址 机器名 类型 核数/内存 目录
序号 | IP地址 | 机器名 | 类型 |
---|---|---|---|
1 | 172.25.10.140 | master | NN/DN/Hive |
2 | 172.25.10.141 | slave1 | DN/NM |
3 | 172.25.10.142 | slave2 | DN/NM |
4 | 172.25.10.143 | slave3 | DN/NM |
三、实验环境准备
本次实验需要提前准备好相关服务,需要Hadoop集群、HDFS文件系统、Zookeeper集群控制软件、MySQL数据库的支持。本次实验采用hive-2.3.9版本。
启动虚拟机master、slave1和slave2,slave3输入用户名root密码root登录系统。
四、实验步骤
4.1 Hive部署
4.1.1 安装Hive
1、解压和重命名Hive
tar zxvf /opt/software/package/apache-hive-2.3.9-bin.tar.gz -C /usr/local/
mv /usr/local/apache-hive-2.3.9-bin/ /usr/local/hive
2、检查环境变量
vim /etc/profile
export HIVE_HOME=/usr/local/hive
export PATH=${HIVE_HOME}/bin:${PATH}
mysql -uroot -p
#创建数据库
create database metastore;
#关闭只读
set global read_only=0;
#设置密码安全策略
set global validate_password_policy=0;
#设置密码长度
set global validate_password_length=4;
#更改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
#数据库授权
grant all on metastore.* to hive@'%' identified by 'hive';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
#刷新权限
flush privileges;
#退出mysql
exit
#上传mysql-connector到Hive库目录
cp /opt/software/package/mysql-connector-java-5.1.46-bin.jar /usr/local/hive/lib/
4.1.3 修改hive配置文件
#复制hive-env.sh
cp /usr/local/hive/conf/hive-env.sh.template /usr/local/hive/conf/hive-env.sh
#修改hive-env.sh文件,参考如下内容:
vim /usr/local/hive/conf/hive-env.sh
export JAVA_HOME=//usr/local/jdk/jre
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export HIVE_CONF_DIR=/usr/local/hive/conf
#复制hive-site.xml
cp /usr/local/hive/conf/hive-default.xml.template /usr/local/hive/conf/hive-site.xml
#修改hive-site.xml
替换所有
s
y
s
t
e
m
:
j
a
v
a
.
i
o
.
t
m
p
d
i
r
为
/
u
s
r
/
l
o
c
a
l
/
h
i
v
e
/
t
m
p
替
换
所
有
{system:java.io.tmpdir} 为/usr/local/hive/tmp 替换所有
system:java.io.tmpdir为/usr/local/hive/tmp替换所有{system:user.name} 为 root
vim /usr/local/hive/conf/hive-site.xml
替换所有${system:java.io.tmpdir} 为/usr/local/hive/tmp
:1,$s#${system:java.io.tmpdir}#/usr/local/hive/tmp#g
#替换当前行的${system:user.name}为root
:s/${system:user.name}/root/g
#替换所有${system:user.name} 为 root
:1,$s/${system:user.name}/root/g
注意:逐个替换以下参数内容,其他参数保留原始配置即可。完整配置内容参见“六、参考文档”。
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/metastore?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</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>root</value>
</property>
#创建/usr/local/hive/tmp目录
mkdir /usr/local/hive/tmp
chmod -R 777 /usr/local/hive/tmp
#复制log配置文件
cp /usr/local/hive/conf/hive-log4j2.properties.template /usr/local/hive/conf/hive-log4j2.properties
cp /usr/local/hive/conf/hive-exec-log4j2.properties.template /usr/local/hive/conf/hive-exec-log4j2.properties
4.1.4 创建Hadoop测试目录
#启动hadoop
start-all.sh
#在hdfs中创建以下目录并授权,用于存储文件
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -mkdir -p /user/hive/tmp
hdfs dfs -mkdir -p /user/hive/log
````hdfs dfs -chmod -R 777 /user/hive/warehouse
hdfs dfs -chmod -R 777 /user/hive/tmp
hdfs dfs -chmod -R 777 /user/hive/log```
#查看目录
hdfs dfs -ls /user/hive/
4.1.5 初始化hive元数据库
schematool -dbType mysql -initSchema root root
4.2 Hive测试
4.2.1 启动Hive
启动mysql
systemctl start mysqld.service
hive
4.2.2 创建测试数据库并验证
#创建数据库
create database testdb;
#查看数据库
show databases;
#使用数据库
use testdb;
exit;
五、实验总结
本次实验中,Hive采用MySQL数据库保存Hive的元数据,而不是采用Hive自带的derby来存储元数据。
Hive常用的HiveQL操作命令主要包括:数据定义、数据操作。
Hive实现最大的优势是,对于非程序员,不用学习编写Java MapReduce代码,也可以完成MapReduce任务。