碍于某Hadoop课程授课老师给的资料不完善,无法很愉快地完成centos7下的mysql和hive的安装,只能自己踩坑,谨发此文以记之,欢迎各位道友一同填坑。
mysql和hive的安装可以在Hadoop集群的任意一个机器下,不一定要在master主机上,这里我选择在第二个slave机上安装。并且有必要一提的是安装过程中要明确自己将安装包都安装解压到哪些路径下的,因为这个只有当事人知道,所以请做好记录。
PS:完成一系列繁琐的步骤时一定要记得给虚拟机打快照,本人写文章当天就翻车了,电脑死机重启集群全崩,好在有快照可以及时恢复。
使用命令yum install mysql mysql-server mysql-devel
时,由于centos7的历史问题,centos会把对mysql的安装变成对mariadb的安装,这样就不能使用yum安装mysql了,也有网友说要把mariadb卸载,可是我即使卸载干净,再次执行上述命令时还是安装成了mariadb。
详情请跳转至:Centos7 tar包安装mysql5.7
按照上述文章进行操作应该可以顺利进行,特别注意的是在8.配置mysql这一步时可能存在没有/etc/my.cnf这个文件的情况,不要慌,自己vi创建一个,然后接着跟文章内容填写就可以了,一直看到12.更改一些编码前就可以了。
这一步是让不同地方都可以访问到这台机上的mysql的设置,这样不仅可以虚拟机上登录,也可以本地机的mysql客户端远程登录。
mysql -u root -p
-u和root间,-p和密码间的空格可有可无。
然后输入以下命令:
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
这里只是以用户root密码为123456为例,读者请根据自身情况更改。
本地上传安装包,然后tar -xvf apache-hive-3.1.2-bin.tar.gz -C 指定目录
解压到指定目录
hive版本和hadoop版本有个匹配关系,我装的hadoop是3.1.3的所以选择3.1.2的hive,写博客时用的是hive2.3.7,可是发现这样的话HQL语句会报错,原因就是版本不匹配,所以换成了hive3.1.2,最终可以配置成功。
进入安装hive的目录,然后进入cd conf
你会看到如上图的一堆template文件,这些就是hive的配置文件模板,里面的内容很全可是我们并不需要那么多配置,所以我们自己创建属于自己的配置文件。
cp hive-env.sh.template hive-env.sh
这样就复制了一份hive-env.sh文件,然后vi hive-env.sh进行如下更改
HADOOP_HOME=/install/hadoop-3.1.3
export HIVE_CONF_DIR=/install/apache-hive-2.3.7-bin/conf
将文件中这两处注释去除,然后填写自己的hadoop所在路径和hive的conf所在路径,读者按自己情况更改,注意等号左右两边尽量不要有空格。全路径的获取方面,读者可以cd到该目录,然后pwd获取完整路径并复制到hive-env.sh中。
hive-site.xml是原本不存在的文件,它是从hive-default.xml.template衍生而来,可以说是子集,由于我们并不需要hive-default.xml.template中的大部分配置,故vi hive-site.xml自己生成。
hive-site.xml内容如下,读者可以直接复制粘贴:
<configuration>
<property>
<name>javax.jdo.option.ConnectionUserNamename>
<value>请填写mysql用户名,例rootvalue>
property>
<property>
<name>javax.jdo.option.ConnectionPasswordname>
<value>请填写mysql密码,例123456value>
property>
<property>
<name>javax.jdo.option.ConnectionURLname>
<value>请填写连接URL,例jdbc:mysql://slave002:3306/hive?createDatabaseIfNotExist=true&useSSL=falsevalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>javax.jdo.option.ConnectionDriverNamename>
<value>com.mysql.jdbc.Drivervalue>
property>
<property>
<name>hive.metastore.schema.verificationname>
<value>falsevalue>
property>
<property>
<name>datanucleus.schema.autoCreateAllname>
<value>truevalue>
property>
<property>
<name>datanucleus.autoStartMechanismname>
<value>SchemaTablevalue>
property>
<property>
<name>hive.server2.thrift.bind.hostname>
<value>请填写主机名,例:slave002value>
<description>Bind host on which to run the HiveServer2 Thrift service.description>
property>
configuration>
其中有四处需要读者自行更改,mysql用户名、密码,连接URL,主机名。以本人为例:
用户名为root
密码为123456
URL为jdbc:mysql://slave002:3306/hive?createDatabaseIfNotExist=true&useSSL=false,其中slave002为主机名,hive为创建的数据库名,会在hive第一次执行时生成
主机名slave002
hive使用mysql作为元数据存储,必然需要连接mysql数据库,所以要添加一个mysql连接驱动包到hive,然后才可以启动hive。
进入lib目录,可以看到众多jar包
我们接下来就在这个目录下上传mysql驱动包,我使用的是mysql-connector-java-5.1.46.jar
本人之前从本地上传到虚拟机上都是通过SecureCRT的SecureFX功能,可是这次却因为不明原因行不通,故改用下面的方法:
使用rz -E指令上传,如果没有这个指令则yum -y install lrzsz
一键安装
vi /etc/profile
进入环境变量配置文件,将以下粘贴到其中
export HIVE_HOME=/install/apache-hive-2.3.7-bin
export PATH=:$HIVE_HOME/bin:$PATH
HIVE_HOME请读者自行更改!
更改完后保存并退出,使用source /etc/profile
让配置生效。
进入hive的目录,然后执行bin/hive即可开启hive
开启过程可能会有点慢,并且在此之前要先开启hadoop集群即hdfs和yarn
执行过程中可能报出以下错误:
Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1380)
…
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
报出NoSuchMethodError的原因是hadoop和hive的两个guava.jar版本不一致,两个位置分别位于下面两个目录:
[1] Centos7 tar包安装mysql5.7
[2] hive-site.xml配置
[3]黑马程序员Hive的安装视频
[4]hive启动报错
[5] hive和Hadoop的版本关系