Hive 是基于 Hadoop 的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制,在安装配置 Hive 前需要先安装好 hadoop 集群,如果还没安装好 hadoop 集群的要先将集群安装好!
1、下载安装 hive
Hive下载地址http://hive.apache.org/downloads.html
要找到适用于自己 hadoop 版本的 Hive 版本,比如我的是 hadoop3.2.1,那么我需要下载 Hive3.1.2,如下图,然后点击 Download a release now!
再点击下图链接
选择刚刚查到的适用自己 hadoop 版本的 hive
下载 bin.tar.gz 这个,src 这个需要自己编译才能使用
下载完成后用 rz 命令(需要先下载 lrzsz)从本地上传到 Linux 中,当然也可以直接在虚拟机中用 wget 命令下载,如下,版本换成你自己的
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
解压 Hive
解压到 /usr/local 目录下
sudo tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local/
将文件夹的名字改为 hive
cd /usr/local
sudo mv apache-hive-3.1.2-bin hive
修改文件权限
sudo chown -R hadoop:hadoop hive
我使用的用户名字叫 hadoop,执行命令时改成你自己的用户名
配置环境变量
将 hive 命令加入到环境变量中可以方便我们使用
vi ~/.bashrc
添加下面两行内容
export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
如下图是我的配置
使配置生效
source ~/.bashrc
配置 hive-site.xml 文件
这个文件原本是不存在的,我们使用 vim 新建这个配置文件
cd hive/conf
vim hive-site.xml
添加如下的配置信息
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hadoop</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
<description>password to use against metastore database</description>
</property>
</configuration>
上面 javax.jdo.option.ConnectionUserName 是你的用户名,javax.jdo.option.ConnectionPassword 是配置你的连接密码,自己设置
接下来将 /usr/local/hive/conf 下的 hive-default.xml.template 重命名为 hive-default.xml
mv hive-default.xml.template hive-default.xml
2、安装配置MySQL
Hive 其实是有自带的轻量级数据库 derby 来存储元数据,在这里我们使用 MySQL 来存储 hive 的元数据
下载并安装 MySQL
如果还没安装好 MySQL 可以参考这篇文章先把 MySQL 装好,再进行下一步
Linux下安装MySQL教程
下载 MySQL jdbc 包
在本地下载好 MySQL jdbc 包:https://dev.mysql.com/downloads/connector/j/
选择 .tar.gz下载
直接开始下载
下载完成后上传到虚拟机中
开始解压
tar -zxvf mysql-connector-java-5.1.48.tar.gz
将 mysql-connector-java-5.1.48 目录下的 mysql-connector-java-5.1.48-bin.jar 拷贝到 /usr/local/hive/lib 目录下
cp mysql-connector-java-5.1.48/mysql-connector-java-5.1.48-bin.jar /usr/local/hive/lib/
启动 MySQL 服务
service mysqld start
登陆 MySQL
mysql -u root -p
新建 hive 数据库
配置 MySQL 允许 Hive 接入
不同版本的 MySQL 语法可能不一样,我的版本是8
先创建用户,名字和密码跟你前面 hive-site.xml 文件里配置的一样
比如我的就是
@ 后面引号里写你需要哪个 IP 连接你的用户,% 表示所有
将所有数据库的所有表的所有权限赋给 hadoop 用户(改成你自己的用户)
这里可能会报错
用户不能授权的原因是 MySQL 数据库中 user 表中的特定用户(root)的 host 属性值为 localhost
执行下面语句
use mysql;
update user set host='%' where user='root';
再重新授权
然后刷新权限关系
如果遇到下面的错误,说明你的语法不正确,不同版本的 MySQL 语法可能少部分地方会有不同,查找自己版本的 MySQL 授权的正确语法,然后再执行
3、启动hive
先启动 hadoop 集群
start-all.sh
再启动 hive
hive
可能会遇到下面的异常
原因是系统找不到相关 jar 包或者同一类型的 jar 包有不同版本存在,系统无法决定使用哪一个,我这里的原因应该是后者
解决方法:
报错的类是 com.google.common.base.Preconditions.checkArgument,这个类所在的 jar 包为 guava.jar
查看 hive 中的版本,进入到你自己的 hive 目录
cd /usr/local/hive
ll lib | grep guava
可以看到 hive 中 guava的版本为19.0
查看 hadoop 中的版本,进入你的 hadoop 目录
cd /usr/local/hadoop/share/hadoop/common/
ll lib | grep guava
可以看到 hadoop 中的 guava 版本为27.0
两个 guava 的版本不一致,我们将 hive 中低版本的删掉,然后将 hadoop 中高版本的复制到 hive 的 lib 目录下
删掉 hive 中的低版本
rm /usr/local/hive/lib/guava-19.0.jar
将 hadoop 中的高版本复制过去
cp /usr/local/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/hive/lib/
再次启动 hive
hive
启动成功则可以看到如下命令提示符
4、测试
测试一下能否正常操作
查看数据库
可能会报出如下错误
错误原因:没有初始化数据库导致,执行名称初始化数据库即可,schematool 工具可用于初始化当前 Hive 版本的 Metastore 架构,此外,还可处理从较旧版本到新版本的架构升级
退出 hive
quit
执行命令
schematool -dbType mysql -initSchema
重新启动 hive
hive
用几条简单的语句测试一下
先查看数据库
我们创建一个名为 test 的数据库
再查看数据库
可以看到我们创建成功了
接着我们删掉刚刚创建的 test 数据库
可以看到 test 已经不见了,成功被我们删除
基于 Hadoop 的数据仓库 Hive 安装就完成了!HiveQL 语法跟 MySQL 语法十分类似,只需要会 SQL 语句就能操作,学习成本较低,可以通过类似SQL语句实现快速 MapReduce 统计,使 MapReduce 变得更加简单,而不必开发专门的 MapReduce 应用程序!