Spark与Hive的分别安装与配置
可以参考Spark On Hive 部署和配置和Hive安装配置指南(含Hive Metastore三种方式详解)这两篇文章,个人认为写的比较简练、清晰。尤其是第二篇,把三种Metastore都讲了。
首先,我们需要确保Spark和Hive已经安装并单独配置好。
Hive+MySQL的坑
安装完Hive和MySQL(现在已经被开源的MariaDB代替)后,如果MySQL中有历史数据,则无法完成Hive的初始化,因此我们在配置好数据库用户名密码后,需要清理其中的历史数据,将hive数据库清理掉(若数据库名为hive):
drop databases hive;
同时,若Hadoop中没有相应的目录/权限,也需要进行预处理:
hadoop fs -mkdir /user/hive
hadoop fs -mkdir /tmp
hadoop fs -chmod -R 777 /user/hive
hadoop fs -chmod -R 777 /tmp
随后再进行hive的初始化
schematool --dbType mysql --initSchema
Hive的测试验证
可以先使用Hive CLI进行表的创建和新增、查找数据,若均无问题,则说明Hive已经安装好。
连接Spark与Hive的坑
1. Hive配置与Spark配置
完成Hive配置后(包括metastore、connection方式等),要将hive-site.xml复制到Spark的conf下,包括服务器部署的程序和在客户端使用的程序,否则Spark将无法知道Hive配置,因此无法连接,如果之前有过数据则会使用缓存,给人一种能访问hive但是却又无法获得数据的假象。
2. mysql driver配置
因为Hive使用了MySQL作为metastore,但是Spark没有相应的driver访问SQL,需要将Hive下的connector driver复制到Spark的jar目录下,具体而言:
cp $HIVE_HOME/lib/mysql-connector-java-8.0.18.jar $SPARK_HOME/jar
同时将hive-site.xml中的connectionPoolingType从HikariCP更改为dbcp,否则会报错如下:
Caused by: org.datanucleus.exceptions.NucleusException: Attempt to invoke the "HikariCP" plugin to create a ConnectionPool gave an error : The connection pool plugin of type "HikariCP" was not found in the CLASSPATH!