背景:
新工作需要用到hive,因此在本机安装一个hive来进行学习。之前已成功安装配置好hadoop分布式了,其中创建了一个专门hadoop用户,本次hive的安装与配置也是在这个用户下进行。(因为ubuntu的~/.bashrc这个环境变量文件是基于某个用户的,用别的用户,之前配置的hadoop、java环境就不生效了。)
hive下载(官方下载地址,这里我下载了最新的hive-3.1.1): http://mirror.bit.edu.cn/apache/hive/
1、安装配置mysql
Hive元数据默认保存在内嵌的Derby数据库中,只能允许一个会话连接,只适合简单的测试。实际生产环境中不使用,为了支持多用户会话,所以配置mysql来存储hive元数据。
1.1、执行 sudo apt-get install mysql-server 进行安装mysql,安装过程中会让你设置mysql的用户名跟密码。
1.2、安装完之后输入 mysql -u 用户名 -p 进入mysql的shell界面(用户名如果安装的时候没有设置,默认是root)
1.3、创建hive数据库,用来保存hive元数据。
命令:create database hive;
查看是否创建:show databases;
1.4、进入hive数据库,创建hadoop用户,并授权所有表权限给hadoop用户。
切换用户:use hive;
新建用户:create user 'hadoop'@'%' identified by 'mysql';
授权:grant all privileges on *.* to 'hadoop'@'%' with grant option;
刷新权限表: flush privileges;
需要注意的是,在ubuntu系统里,默认情况下MySQL只允许本地登录,所以需要修改配置文件将地址绑定注释。
执行修改命令:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
找到 # bind-address = 127.0.0.1 注释掉这一行就可以啦,修改后保存不成功修改权限就可以了(sudo chmod 777 mysqld.cnf)。
2、hive 的安装与配置
mysql的配置还没结束,需要安装hive之后,修改hive文件才能完成设置mysql为hive的默认数据库。
2.1、新建一个安装hive的文件夹
命令:sudo mkdir /opt/hive
将hive安装包放在这个文件夹,然后解压
解压命令:tar -zxvf apache-hive-3.1.1-bin.tar.gz
2.2、设置环境变量:
命令:vi /etc/profile
在文末加入下面两句:
export HIVE_HOME=/opt/hive/apache-hive-3.1.1-bin
export PATH=$PATH:$HIVE_HOME/bin
然后执行:source /etc/profile
在执行:hive --version 就可以看到hive 的版本了
2.3、修改hive-site.xml文件
进入conf文件: cd /opt/hive/apache-hive-3.1.1-bin/conf
将 hive-default.xml.template复制成hive-site.xml:cp hive-default.xml.template hive-site.xml
然后修改hive-site.xml文件:vi hive-site.xml
然后打开hive-site,然后分别搜索javax.jdo.option.ConnectionURL,javax.jdo.option.ConnectionDriverName,javax.jdo.option.ConnectionUserName,javax.jdo.option.ConnectionPassword,hive.metastore.schema.verification这五个地方按照下面修改对应的<name> 的值:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?serverTimezone=UTC</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hadoop</value> <!-- 这里是mysqlhadoop的用户名 -->
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mysql</value> <!-- 这里是mysqlhadoop的密码 -->
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
2.3.1 然后这里需要配置下mysql的jdbc驱动,才能是hive链接上mysql数据库
到官网下载对应系统版本的jdbc: https://dev.mysql.com/downloads/connector/j/
2.3.2 这里下载的是.deb文件,需要对其压缩成jar 文件,下载后上传到任意目录,然后执行:
sudo dpkg -i mysql-connector-java_8.0.16-1ubuntu16.04_all.deb
2.3.4 压缩之后到/usr/share/java下可以找到相应的mysql-connector-java-8.0.16.jar,然后将其目录添加到CLASSPATH中(vi ~/.bashrc)。
2.3.5 将该jar包复制到$HIVE_HOME/lib目录下,cp mysql-connector-java-8.0.16.jar $HIVE_HOME/lib
2.4、修改hive-env.sh
还是在conf目录下执行:
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
将hadoop的路径放在hadoop_home上。
2.5 初始化hive与mysql
2.3和2.4中配置是将mysql与hive相连起来,让mysql存储hive的元数据。配置后之后需要对hive初始化。进入/opt/hive/apache-hive-3.1.1-bin/bin
执行schematool -dbType mysql -initSchema,出现下面第二张图内容则初始化成功,配置也就没问题了。
2.6、运行hive
启动 meta store服务: nohup hive --service metastore > metastore.log 2>&1 &
启动远程访问: nohup hive --service hiveserver2 > hiveserver2.log 2>&1 &
再执行:jps 就可以看到hive的进程了
2.7、检查hive跟mysql的同步性
这里是检查hive的元数据是否存在与自己创建mysql的hadoop用户里了。
直接执行 hive,成功后就出现hive的shell界面了
在hive创建一张空表
然后去mysql 的hive库下的hadoop用户查看这张表的创建。
可以看出,在mysql可以看到t1这表的创建情况,说明mysql跟hive已经联通。
3、遇到的问题
将 hive-default.xml.template复制成hive-site.xml后,hive-site.xml文件第3210行,存在特殊字符,红宽的字符去掉。
更多常见的问题可参考: https://blog.csdn.net/ge_gewu/article/details/85327468