背景:
已经安装hadoop集群,在hadoop基础上安装hive,继而安装mysql,通过jdbc使hive连接mysql库。后续实验可以尝试hive连接到postgres或者oracle等常用数据库。
Hive的使用依赖于Hadoop,本质上是将hql发送给hadoop,hadoop中将hql转换为MapReduce进行任务的执行。故而Hive的安装需要Hadoop处于运行状态。
本次实验为三台集群,Hadoop106 Hadoop107 Hadoop108,在Hadoop106 上安装Hive及Mysql。
Hive安装包+Mysql安装包+mysql-connector链接如下
https://pan.baidu.com/s/1vpoLdfXgWWwaJ968kJQVyA?pwd=zml1 提取码:zml1
放到服务器上 路径可以自己设定,只是暂时存放
首先安装Hive
本实验将hive安装在/opt/module下,路径可自己选择,记好就行
解压安装包到执行安装目录 /opt/module
[atguigu@hadoop106 sofrware]$tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module
[atguigu@hadoop106 sofrware]$cd ../module/
将hive安装目录改名为/hive
[atguigu@hadoop106 sofrware]$mv apache-hive-3.1.2-bin/ hive/
[atguigu@hadoop106 sofrware]$cd hive
配置环境变量
[atguigu@hadoop106 sofrware]$sudo vim /etc/profile.d/my_env.sh
添加如下内容
#HIVE_HOME export HIVE_HOME=/opt/module/hive export PATH=$PATH:$HIVE_HOME/bin 保存退出,使环境变量生效
[atguigu@hadoop106 sofrware]$source /etc/profile.d/my_env.sh
查看是否生效
[atguigu@hadoop106 sofrware]$echo $HIVE_HOME
配置生效!
初始化Hive
[atguigu@hadoop106 hive]$ bin/schematool -dbType derby -initSchema
执行初始化报错,如下所示
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)
...
报错原因:hadoop和hive的两个guava.jar版本不一致,两个位置分别位于下面两个目录:
- /opt/module/hive/lib/
- /opt/module/hadoop-3.1.3/share/hadoop/common/lib
删除低版本的那个,将高版本的复制到低版本目录下
[atguigu@hadoop106 sofrware]$ ls -l /opt/module/hadoop-3.1.3/share/hadoop/common/lib | grep guava*
[atguigu@hadoop106 sofrware]$ ls -l /opt/module/hive/lib/ | grep guava*
[atguigu@hadoop106 sofrware]$ mv /opt/module/hive/lib/guava-19.0.jar /opt/module/hive/lib/guava-19.0.bak
[atguigu@hadoop106 sofrware]$ cp /opt/module/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar /opt/module/hive/lib/guava-27.0-jre.jar
再次执行初始化执行成功显示
Initialization script completed
schemaTool completed
执行成功后在hive根目录会生成metastore_db。这是derby数据库数据
执行hive,进行操作验证
[atguigu@hadoop106 hive]$ hive
hive安装成功。
但是到这里,hive使用的库为自带的默认derby库。
接下来安装mysql并让hive连接到mysql进行操作
安装mysql
卸载已经存在的mysql
安装前注意事项,由于机器之前安装过mysql或者存在系统自带的mysql版本,进行安装前我们需要先清理之前的mysql再进行安装!一定注意。
执行rpm -qa | grep mariadb
如果存在,则通过命令删除
sudo rpm -e –nodeps mariadb-libs
继续执行
rpm -qa|grep -i mysql
执行结果为
如果发现存在上述东西,则需要删除已经安装的MySQL
删除相关应用
yum remove MySQL-client-5.5.40-1.linux2.6.x86_64
yum remove MySQL-server-5.5.40-1.linux2.6.x86_64
查看文件名中含有MySQL的文件
find / -name mysql
依次执行 rm -rf 路径删除文件
删除其他有关MySQL服务
//mysql的配置文件
rm -rf /etc/my.cnf
//如果不删除这个文件,则重新安装的Mysql将无法设置password
rm -rf /var/log/mysqld.log
安装mysql
继续在hadoop106服务器上安装。
解压下载的mysql安装包
tar -xvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar
执行过程如下
安装mysql需要的服务
当前目录依次执行以下命令
sudo rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-libs-compat-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm sudo rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm
安装完成,接下来进行操作
[atguigu@hadoop106 sofrware]$ cat /etc/my.cnf
进入到如下目录
[atguigu@hadoop106 sofrware]$ cd /var/lib/mysql
执行
[atguigu@hadoop106 sofrware]$ sudo rm -rf ./*
在mysql下执行初始化
1.[atguigu@hadoop106 mysql]$ sudo --initialize --user=root
2.查看生成的临时密码
[atguigu@hadoop106 mysql]$ sudo cat /var/log/mysqld.log
这是生成的临时密码,需要记住
3.启动mysql服务
[atguigu@hadoop106 mysql]$ sudo systemctl start mysqld
4.使用刚刚的临时密码登录mysql数据库
(这里需要注意的是,若临时密码存在特殊符号,需要加上单引号)
[atguigu@hadoop106 mysql]$ mysql -uroot -p'M6weK(vwpX&7'
5.登陆成功,修改密码
mysql>set password = password("root");
执行成功
6.修改权限,可以允许其他ip或者服务登录mysql
mysql> update mysql.user set host='%' where user = 'root';
mysql> flush privileges;
7.测试使用Navicat连接刚刚创建的mysql数据库
连接成功
Hive连接Mysql
驱动拷贝
hive连接mysql是通过jdbc驱动进行连接的,所以需要我们将mysql-connector放到hive的lib中去
执行cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive/lib
接下来修改Hive的配置文件即可
配置Metastore
将如下内容复制到hive-site.xml文件中
登录mysql数据库
[atguigu@hadoop106 conf]$ mysql -uroot -proot
创建新的元数据库
mysql> create database metastore;
初始化Hive元数据
[atguigu@hadoop106 conf]$ schematool -initSchema -dbType mysql -verbose
初始化成功,启动Hive验证
[atguigu@hadoop106 conf]$ hive
配置完成。
Hive安装后成功连接到Mysql数据库。
精彩文章
发表评论