在Hadoop分布式集群中安装hive
依赖环境
hadoop分布式集群环境为上一篇中搭建好的集群环境:
一台master主机名:ubuntu-01,两台slave节点,分别是 ubuntu-01-node1、ubuntu-01-node2
与hadoop一样,先在ubuntu-01上安装,然后将文件复制到其他节点中。
安装hive之前先启动集群,三台都要启动
提前下载好文件:apache-hive-2.3.2-bin.tar.gz
由于是基于上一篇的hadoop环境,很多路径问题,这里不重复述说。
所遇到的坑(必看、必看、必看)
在上一篇Hadoop完全分布式集群环境搭建及测试中,因为用的jdk 9.0.1而出现了版本不兼容的问题,该问题同样存在hive中,会导致 ./hive
命令启动失败。因此,本人在遇到这个坑之后,才想到将jdk版本替换成老的版本 8.0,所有的问题就解决了,但文章因为是记录,因此文章中的截图文字不会再更改,旨在提醒各位:
别用jdk 8.0以后的版本、 别用jdk 8.0以后的版本、 别用jdk 8.0以后的版本
配置 hive
- 解压hive,执行下面的命令:
cp /mnt/hgfs/linux/apache-hive-2.3.2-bin.tar.gz /local/apache-hive.tar.gz // 复制已下载的文件至hadoop的安装同级目录下
tar zxvf apache-hive.tar.gz // 解压到当前目录下
rm apache-hive.tar.gz // 删除压缩包
ls // 查看当前目录结构
结果如下:
- 修改配置文件
~/.bashrc
vim ~/.bashrc
添加下面两行
export HIVE_HOME=/home/had_user/local/apache-hive-2.3.2-bin // 注意路径,根据自己的安装路径来
export PATH=$PATH:$HIVE_HOME/bin
保存并退出,执行 source ~/.bashrc
安装 Mysql
- 下载安装包: mysql-server_5.7.20-1ubuntu16.04_amd64.deb-bundle.tar
- 解压到
/local/mysql-5.7.20
查看解压后的文件,总共有11个文件,我们用到其中7个,剩下的不知道有什么用,可能是依赖。
- 先安装依赖包
sudo apt-get install libnuma1
sudo apt-get install libmecab2
sudo apt-get install libaio1 // 会提示设置mysql的root帐户密码,本次设置为:admin
-
接下来依次安装下列文件
- mysql-common_5.7.20-1ubuntu16.04_amd64.deb
- libmysqlclient20_5.7.20-1ubuntu16.04_amd64.deb
- libmysqlclient-dev_5.7.20-1ubuntu16.04_amd64.deb
- libmysqld-dev_5.7.20-1ubuntu16.04_amd64.deb
- mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb
- mysql-client_5.7.20-1ubuntu16.04_amd64.deb
- mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb
(ps:上面是我从搜到的资料复制过来的,版本可能和大家要安装的版本不一样,但是包的顺序是这样的)
执行安装命令:
sudo dpkg -i mysql-common_5.7.20-1ubuntu16.04_amd64.deb libmysqlclient20_5.7.20-1ubuntu16.04_amd64.deb libmysqlclient-dev_5.7.20-1ubuntu16.04_amd64.deb libmysqld-dev_5.7.20-1ubuntu16.04_amd64.deb mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb mysql-client_5.7.20-1ubuntu16.04_amd64.deb mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb
每个包名用空格 分开。
查看是否安装成功
执行命令mysql -uroot -hlocalhost -padmin
,成功之后,不要执行quit
-
创建可以登录mysql下的hive用户,设置密码为:hive
依次执行下面的mysql语句:create user hive identified by 'hive'; // 创建hive用户。 这是mysql语句,别忘了分号
GRANT ALL PRIVILEGES ON *.* TO 'hive'@'localhost' IDENTIFIED BY 'hive'; // 为hive用户分配所有权限
flush privileges;
-
使用 hive 用户登录 mysql
mysql -uhive -hlocalhost -phive // -hlocalhost 可以省略 // 也可以使用 mysql -uhive -p 然后再输入密码,都行
可以看到,已成功登录。 -
创建 hive 专用数据库
create database hive;
修改 hive 配置文件
进入到hive的配置文件目录下,找到hive-default.xml.template,另存为hive-site.xml并修改参数.
出了头文件,只保留下面的部分。
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value> // 我的这个不能用ubuntu-01代替localhost
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
</property>
</configuration>
上面如果将localhost改成主机名会导致,hive数据库初始化失败,最终虽然能登录hive,但不能用。
拷贝 JDBC 驱动包,不能少了这一步
下载: mysql-connector-java-5.1.45.tar.gz
,将里面的 mysql-connector-java-5.1.45-bin.jar
文件复制到这个目录:
/local/apache-hive-2.3.2-bin/lib/mysql-connector-java-5.1.45-bin.jar
初始化 hive 数据库
不做这一步的话,你上面创建的hive数据库,里面是没有tables的。进入目录 /local/apache-hive-2.3.2-bin/bin
,执行命令;
schematool -dbType mysql -initSchema
留意字眼: “schematool completed” ,接下来去看看是否初始化成功。
登录mysql查看hive数据库是否有表结构
执行命令:
mysql uroot -padmin
mysql> use hive;
mysql> show tables;
可以看到,初始化成功,hive数据库里有表。这里再提醒一下,由于我的hive-site.xml配置中之前用的是ubuntu-01,初始化失败,这里会提示 Empty,将其改成 localhost 之后,再初始化,就成功了。
测试 hive
进入目录 /local/apache-hive-2.3.2-bin/bin
,执行下面的命令:
./hive
看到没,jdk 版本降下来之后,连警告信息都没有了。
依次执行下面的命令,来测试是否可以正常使用 hive,使用的是 HQL 语句。
show databases; // 结果中只能看到一个 default 数据库
create database hive_test_db; // 创建一个名为 hive_test_db 的数据库
show databases; // 查看数据库是否建立成功,由图中可以看到,成功了。
use hive_test_db; // 切换数据库
show tables; // 查看当前数据库下面的表
create table test(ip int, name string) row format delimited fields terminated by '\t'; // 创建一个表,参数不懂,另自学。
show tables; // 查看表是否创建成功,由图中可以看到,成功了。
quit // 退出hive操作,与 mysql 一致。
两个节点slave的配置
我们上面是将 hive 配置好,然后分发至各个节点的,然而当我在节点测试的时候,失败了。经过一番搜索得到一下结论:
master(ubuntu-01)主机中,也就是服务器端,hive-site.xml 的配置,应当使用 localhost:3306
slave(ubuntu-01-node1、ubuntu-01-node2)节点中,也就是客户端,hive-site.xml 的配置,则应使用 ubuntu-01:3306
-
slave节点的 hive-site.xml 除上述配置有差异之外,还应该添加下面的这个配置:
<property> <name>hive.metastore.uris</name> <value>thrift://ubuntu-01:9083</value> </property>
在使用客户端访问 hive 之前,在主机中执行
hive --service metastore &
来启动metastore服务
可以看到比之前多了一个进程。-
下面通过截图对照各个配置文件之间的差异
ubuntu-01 的配置
ubuntu-01-node1 中的配置,与 ubuntu-01-node2 一致,因此 ubuntu-01-node2 不再截图
还应补充下面这段
-
在slave节点(客户端)中访问hive
可以看到之前在 ubuntu-01 主机中所创建的hive_test_db数据库。
至此,hadoop集群下的hive配置完成。
上一篇: Kafka分布式集群部署
下一篇: Spark集群完全分布式安装部署
推荐阅读
-
基于ubuntu16.04伪分布式安装hadoop2.9.1以及hive2.3.1
-
Hadoop单机版和全分布式(集群)安装
-
【DevOps】在CentOS中安装Rancher2,并配置kubernetes集群
-
Linux中SparkSQL分布式SQL引擎部署RDB|安装MySQL+Hive(教程)
-
Linux中安装配置hadoop集群详细步骤
-
Spring回顾之八 —— Quartz在集群、分布式系统中的应用
-
Spring回顾之八 —— Quartz在集群、分布式系统中的应用
-
在IDEA中安装scala、maven、hadoop遇到的问题小结
-
在VMWare中配置SQLServer2005集群 Step by Step(五) SQLServer集群安装
-
在VMWare中配置SQLServer2005集群 Step by Step(四) 集群安装