在hadoop集群上安装hive+mysql
一、安装hive前提条件
hive运行在hadoop集群上,所以先要确保你的hadoop集群已经安装完毕并且可正常启动运行。如果没安装好hadoop集群的可以参考我的这篇文章:Hadoop学习(一)入门与集群搭建。接着还需要安装mysql,因为hive的元数据是存储在mysql的,不过mysql我们可以只在集群的主节点机器安装一个就好,需要安装mysql服务端和客户端。
二、CentOS7安装Mariadb数据库(其实就是mysql的分支版本)
在linux中可以借助yum库来进行下载mysql,执行命令yum install -y mysql
,之后就会自动下载了。
service mysqld start
命令启动mysql,但会发觉报如下错,未能启动mysqld.service:未找到单元。
报错信息.png
我很纳闷,经过一顿百度之后,发觉是这个原因:CentOS7安装mysql后无法启动服务,提示Unit not found,于是按着文章中提到的再去安装了mariadb数据库(就是mysql的分支版本,提供的功能与mysql完全兼容)。解决完上面的问题后,我们再来输入
systemctl start mariadb.service
命令开启服务,期间还报错过另一个问题,如下图:
image.png
根据提示的命令,我输入journalctl -xe
命令去查找报错原因,如下图:image.png 发觉是因为我改动过
/etc/my.cnf
文件,设置了默认编码为utf8,也不知道为什么就会影响到启动服务,所以就再改回去恢复默认配置了,去掉默认编码设置。之后再重新输入systemctl start mariadb.service
命令,服务就启动了。我们可以输入systemctl status mariadb.service
命令查看当前mariadb服务状态,如图所示,显示active(running)开启。
image.png
接着,我们设置下将mariadb服务添加至开机自启动,输入systemctl enable mariadb.service
命令即可。接着输入
mysqladmin -u root password 你想设置的mysql密码(例:123456)
命令,创建一个输入root用户的密码,之后就用这个密码连接mariadb数据库,输入mysql -u root -p 123456
命令测试是否能连通,如图所示就安装mariadb成功了。
image.png
三、在mariadb中创建hive用户和hive元数据库
#1、用root用户登录mysql
mysql -u root -p 回车后输入root用户密码登录
#2、创建hive用户
insert into mysql.user("Host","User","Password") values("localhost","hive",passwprd("hive"));
#3、创建hive数据库
create database hive;
#4、授权,使用户可以远程连接
grant all on hive.* to hive@'%' identified by 'hive';
#5、授权,使用户可以本地连接
grant all on hive.* to hive@'localhost' identified by 'hive';
#6、刷新授权表
flush privileges;
经过以上步骤就创建好了hive用户和hive元数据库,我们尝试登录一下,先exit退出root用户登录,之后重新输入mysql -u hive -p
回车后输入hive用户密码登录,如下图所示就成功。
/etc
目录下修改my.cnf
文件,在[mysqld]标签下添加如下配置
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
再去/etc/my.cnf.d
目录下修改client.cnf
文件,在[client]标签下添加如下配置
default-character-set=utf8
然后再去/etc/my.cnf.d
目录下修改mysql-clients.cnf
文件,在[mysql]标签下添加如下配置
default-character-set=utf8
全部配置完成后,输入systemctl restart mariadb
命令重启mariadb,之后进入mariadb数据库查看字符集,至此,mariadb就安装配置完了。
PS:在分布式集群上安装hive+mysql,mysql可以不用每台机器都安装,只在主机器节点上安装即可,hive可以每台机器安装,mysql作为hive的元数据库,hadoop集群能访问到就好,配置都访问主机器的mysql作为元数据信息存储的地方即可。
四、安装并配置hive
- 1、把下载好的hive安装包上传到linux集群上,之后解压到指定路径下,再复制下conf下的两个template配置文件,命令为
hive-env.sh
和hive-site.xml
- 2、配置
hive-env.sh
文件,加上java和hadoop安装路径
JAVA_HOME=/usr/java/jdk1.8.0_60
HADOOP_HOME=/usr/hadoop-2.6.4
export HIVE_CONF_DIR=/usr/hive-2.3.7/conf
image.png
- 3、配置
hive-site.xml
文件,修改主机器节点的mysql数据库用户名和密码,这个文件的参数实在是太多,只能在vim编辑器中使用/**
来查找匹配关键字,找到后把对应value改成适应自己的就好。
<!--所连接的mysql实例,分布式集群的话我这里是设置集群内的机器都用master上的mysql-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
<!--mysql数据库驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBCmetastore</description>
</property>
<!--mysql数据库用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>username to use against metastoredatabase</description>
</property>
<!--mysql数据库密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive用户的密码</value>
<description>password to use against metastoredatabase</description>
</property>
<!--元数据mysql远程模式配置-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
image.png
- 4、把hive安装路径也加入环境变量,这样带来的好处是每次启动hive客户端不用总是到hive的bin目录下启动,只需要在
/etc/profile
文件配置上hive的目录,并给Path解析即可,如下图,保存后执行source /etc/profile
命令刷新环境配置生效。
image.png - 5、上传JDBC驱动包到hive的lib目录下即可
image.png - 6、在HDFS创建目录,要先启动hadoop,然后创建目录并赋予权限
hadoop fs -mkdir -p /tmp/hive
hadoop fs -mkdir -p /hive/warehouse
hadoop fs -chmod -R g+w,o+w /tmp
hadoop fs -chmod -R g+w,o+w /hive
- 7、初始化数据库,输入
schematool -dbType mysql -initSchema
命令,然而报如下错,hive初始化SQL Error code:1045错误
image.png 于是在百度找到解决方案,登录进mysql数据库中把所有用户密码都设置为跟root用户的密码一样,具体命令是update user set Password = password('root用户密码')
- 8、解决完以上所有问题,完成了以上所有步骤,就输入
hive
命令进入hive客户端,再输入show tables
语句显示所有数据表,但是如果报错FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient的话,就是hivemetastore服务没启动。
先去hive-site.xml
文件中修改datanucleus.schema.autoCreateAll
参数值为true
,默认是false。
然后再输入hive --service metastore &
命令启动hivemetastore服务就好。 - 9、再次输入hive进入hive客户端,然后输入show tables 或者 show functions 测试hive是否正常安装配置使用,如下图所示: image.png
五、hive在多台机器下安装
hive可以在集群内的多台机器安装,当经过上面步骤安装完一台机器的hive后,我们可以使用scp命令远程拷贝到集群内的不同机器,master机器cd切换到/usr目录下,之后具体命令及操作步骤如下:
scp -r /usr/hive-2.3.7 slave1:/usr //基于ssh方式远程拷贝到slave1机器
scp -r /usr/hive-2.3.7 slave2:/usr //基于ssh方式远程拷贝到slave2机器
scp -r /usr/hive-2.3.7 slave3:/usr //基于ssh方式远程拷贝到slave3机器
#之后跟master机器一样配置环境变量vi /etc/profile,再source /etc/profile 使环境变量配置生效
参考文章链接
1、hadoop分布式集群安装配置hive+mysql
2、hive初始化SQL Error code :1045错误解决方法
3、centOS7环境下在hadoop集群安装hive
4、hive启动报错 java.net.URISyntaxException: Relative path in absolute URI: system:java.io.tmpdir7D/$%7B 解决方案