一:具体集成
1.将hive的配合文件hive-site.xml添加到spark应用的classpath中(相当于拷贝)
将hive-site.xml拷贝到${SPARK_HOME}/conf下。
2.第二步集成
根据hive的配置参数hive.metastore.uris的情况,采用不同的集成方式
分别:
1. hive.metastore.uris没有给定配置值,为空(默认情况)
SparkSQL通过hive配置的javax.jdo.option.XXX相关配置值直接连接metastore数据库直接获取hive表元数据
但是,需要将连接数据库的驱动添加到Spark应用的classpath中
2. hive.metastore.uris给定了具体的参数值
SparkSQL通过连接hive提供的metastore服务来获取hive表的元数据
直接启动hive的metastore服务即可完成SparkSQL和Hive的集成
$ hive --service metastore &
3.使用hive-site.xml配置的方式
配置hive.metastore.uris的方式。
4.启动hive service metastore服务
如果没有配置全局hive,就使用bin/hive --service metastore &
三:Spark依赖第三方包
1. 将第三方jar文件打包到最终形成的spark应用程序jar文件中
这种使用的场景是,第三方的jar包不是很大的情况。使用spark-submit提交命令的参数: --jars
$ bin/spark-shell --jars /opt/cdh-5.3.6/hive/lib/mysql-connector-java-5.1.27-bin.jar:
这样就不再需要配置hive.metastore.uris参数配置。使用“,”分隔多个jar。
2.更改Spark的配置信息:SPARK_CLASSPATH, 将第三方的jar文件添加到SPARK_CLASSPATH环境变量中
使用场景:要求Spark应用运行的所有机器上必须存在被添加的第三方jar文件
a. 创建一个保存第三方jar文件的文件夹:
$ mkdir external_jars
b.修改Spark配置信息
$ vim conf/spark-env.sh
SPARK_CLASSPATH=$SPARK_CLASSPATH:/opt/cdh-5.3.6/spark/external_jars/*
c. 将依赖的jar文件copy到新建的文件夹中
$ cp /opt/cdh-5.3.6/hive/lib/mysql-connector-java-5.1.27-bin.jar ./external_jars/
备注:
如果spark on yarn(cluster),如果应用依赖第三方jar文件,最终解决方案:将第三方的jar文件copy到${HADOOP_HOME}/share/hadoop/common/lib文件夹中(Hadoop集群中所有机器均要求copy)