大多数情况下Hive On Spark 是无法使用Spark官方版本给定的编译成功的包的,因为里面对应的hadoop版本与生产环境的版本是无法匹配的,这就需要对spark源码进行重新编译。
spark下载下来的源码包的目录结构如下:
下面进行编译的步骤
spark 的打包主要依赖dev/make-distribution.sh 这个文件,打开后首先更改其maven地址,当然这一步只是建议,不更改的话这个脚本会自动进行安装maven,最好将其设置为本地自己安装的maven,然后为本地安装的maven设置国内比较快的镜像源,比如阿里云。
打开过后将MVN指向本地的maven即可
因为牵涉到haoop版本,所以需要对其pom文件进行修改,当然如果存在则不需要修改,直接使用即可。
在这里的profile里面加上对应的hadoop版本,大概在2650行。
比如在spark官方包里面是没有hadoop-3.2版本的,在里面加入以下代码即可:
<profile>
<id>hadoop-3.2</id>
<properties>
<hadoop.version>3.2.0</hadoop.version>
<curator.version>2.13.0</curator.version>
</properties>
</profile>
同理,scala等也一样。
编译时,因为是Hive On Spark ,所以不要启用hive的profile。(maven编译时通过-P指定用哪个profile,即-Phadoop-3.2即将全局的hadoop.version更改为3.2.0,-Pyarn将当前模块打包)
打包命令为:
dev/make-distribution.sh --name spark3.0withouthive -Pyarn -Pscala-2.11 -Phadoop-3.2
然后就进入漫长的打包过程了
打包完成后根目录下的dist即为编译过后的成果了,然后将其分发到对应的saprk根目录下。
scp -r ./dist/* spark@node1:/app/spark-2.3.0/
修改hive-site.xml配置
<property>
<name>hive.execution.engine</name>
<value>spark</value>
</property>
<property>
<name>spark.yarn.jars</name>
<value>hdfs://hadoop-cluster:8020/spark_jars/*</value>
</property>
<property>
<name>spark.home</name>
<value>/app/spark</value>
</property>
<property>
<name>spark.master</name>
<value>yarn</value>
</property>
然后将hive-site.xml复制到 SPARK_HOME/conf/下,再将hadoop的core-site.xml,hdfs-site.xml的配置文件也复制到$SPARK_HOME/conf下即可。
spark的配置文件主要有两个 spark-defaults.conf,spark-env.sh
spark.master=yarn
spark.driver.memory=2g
spark.executor-memory=5g
spark.yarn.jars=hdfs://hadoop-cluster:8020/spark_jars/*
spark.master指定saprk的master地址,这里主要是spark on yarn,所以只要指定是yarn即可,如果是spark集群,则指定saprk master的地址即可
spark.yarn.jars指定的是spark在yarn运行时的jar的地址
export JAVA_HOME=/app/java
export SPARK_CLASSPATH=/app/spark/jars/mysql-connector-java-8.0.16.jar
export HADOOP_HOME=/app/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
这里主要设置一些环境变量
将spark on yarn 所需要的jar上传到hdfs
hdfs dfs -put $SPARK_HOME/jars/* /spark_jars/
这里需要将spark 的包复制到$HIVE_HOME/lib 中
主要是 scala-compiler-2.11.8.jar,scala-library-2.11.8.jar,spark-core_2.11-2.3.5-SNAPSHOT.jar,spark-network-common_2.11-2.3.5-SNAPSHOT.jar
此时已经配置完毕,即可运行hive了