hive是hadoop的一个数据储存、管理工具,在这里,先记录配置过程,后面再讲述原理;
配置hive,hive是一个数据储存管理、管理工具,如果不配置相关的数据库的话,就会使用hive自带的数据库Derby,但是目前常用的数据库是mysql,方便容易使用;所以本次就是配置hive-2.3.4+mysql-5.5+ubuntu14-lts版本;
1.安装mysql:直接ubuntu的三条命令就可以了;
1.sudo apt-get install mysql-server
2.apt-get isntall mysql-client
3.sudo apt-get install libmysqlclient-dev
安装过程中会提示设置用户名和密码,依次设置即可,过程不表;
1.解压hive-2.3.4
tar -zxvf apache-hive-2.3.4-bin.tar.gz
解压后,配置hive-site.xml,配置内容如下:
javax.jdo.option.ConnectionURL
jdbc:mysql://hadoop1:3306/hive?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
root
javax.jdo.option.ConnectionPassword
你的密码
启动hive时,它会根据这个配置文件去读取你的url,驱动,连接用户名和密码;
2.问题注意,①启动hive之前,必须先启动mysql服务,因为hive会根据你的配置文件去读取你使用的数据库和连接;
②一切安装配置完成后,初始化失败,并报错误:org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version.异常;
分析:根据配置文件,所以个分析错误只能有一个问题-连接问题,分为物理连接和jar包以及用户名和密码配置;
a、先说物理连接:首先,是不是配置了虚拟机和宿主机之间的可访问性?ping一下试一下就知道,在安装虚拟机的时候,我是直接设置的nat访问,vmnet设置的静态ip和网关以及静态dns,过程不表,ping不通时请自己检查;
b、能ping通,说明宿主主机和虚拟机没有问题,下面进行下一步判断,虚拟机是不是防火墙开启状态,3306端口是不是可用?具体命令就是:
mysql -h192.168.1.160 -uroot -p
判断宿主机能不能访问虚拟机,我的是报了错误,说明mysql不允许远程访问,需要修改设置,第一步,判断是不是防火墙把端口关了?我的ubuntu使用iptables报错,所以我安装了ufw(uncomplicated firewall),安装过程不表;
我先设置了ufw allow 3306,以防外界不能访问,然后还需要修改mysql的配置文件msyql.cnf:把bind-address = 127.0.0.1
注释去掉,这样还不行,还得在mysql的用户表里面设置用户权限,
GRANT ALL PRIVILEGES ON *.* TO 'hadoop1'@'%' WITH GRANT OPTION;
flush privileges;
设置完成后,mysql应该没有问题。
然后这样我的依然包connection refused,经过上面的设置,已经mysql自己已经没有问题,还是连接失败,后来一想,mysql连接的jar包是不是没有导入到lib中,遂去官网下载了jar包直接导入lib,但是依然连接拒绝,很尴尬。只能去分析日志了,大量的博客,只给了不同的解决方案,我也不知道他们的问题是什么,所以没法用,于是乎看日志,先看mysql:
cat /var/log/mysql/error.log
没有发现我的连接记录,说明连接请求根本就没有到达mysql,于是输出hive的错误日志:
./hive -hiveconf hive.root.logger=DEBUG,console
show tables
截图我就不放了,太长了,我记得在第一条异常的caused by里面,出现了jline....jar version 冲突,查资料得知,hadoop的lib自带的jline与hive的jline版本不同,起了,冲突,所以我就把hive的jline.....jar复制到了hadoop的lib目录下,删除掉hadoop的jline,都弄完后,我重启了myql服务,然后格式化了一下hive的schema,
schematool -dbType mysql -initSchema
然后在启动,错误完美解决,还是得会看日志啊,