1.1 简介
基于Spark的Hive,实质上是将Hive默认的计算引擎MapReduce替换成Spark。
Hive on spark简介可查看:Hive on Spark - Apache Hive - Apache Software Foundation
1.2 版本兼容性
hive和spark版本兼容。这个版本兼容不是强制的,但是它给的这个是肯定可以跑的。
由于我hive安装版本为2.3.7,所以我们选择spark的版本为2.0.0
1.3 下载 spark
下载地址:Index of /dist/spark/spark-2.2.0
此处我下载的是源码用于后续的编译
源码包下载以后解压查看里面的 pom.xml其中 scala 版本是 2.11
2. 准备工作
- 安装的spark,必须是一个不包含hive的jar包的版本。
- 但是一般spark发行版都是有hive依赖的,所以要手动编译源码来获得不包含hive相关jar的spark二进制包。
- 编译需要安装JDK、MAVEN、SCALA
- 我选择node02作为包编译的服务器
2.1 JDK
JDK
在安装
hadoop
时候已经安装过,所以此处不演示安装过程
java -version
2.2 MAVEN安装
- 下载maven
当前使用最新 3.9.3 版本
- maven解压并创建目录
node02 上操作
cd /opt/softwaremkdir mavencd mavenrz # 上传apache-maven-3.9.3-bin.tar.gztar -xvzf apache-maven-3.9.3-bin.tar.gzmv apache-maven-3.9.3/ maven-3.9.3mkdir repository
- 修改配置settings.xml
添加 localRepository添加 aliyunmaven 的 public 仓库
- 配置环境变量
vi /etc/profile# 添加以下内容export MAVEN_HOME = /opt/software/maven/maven-3.8.6export PATH = ${PATH} : ${MAVEN_HOME} /bin
- 刷新环境
source /etc/profile
- 确认配置成功
mvn -v
Scala安装
下载
scala
由于上面
spark
中依赖的
scala
的版本是
2.11,
此处我们下载
2.11
版本
scala
cd /opt/software/mkdir scalacd scala/rz # 上传 scala-2.11.12.tgztar -xvzf scala-2.11.12.tgzrm -rf scala-2.11.12.tgzmv scala-2.11.12/ scala-2.11
- 配置环境变量
vi /etc/profileexport SCALA_HOME = /opt/software/scala/scala-2.11export PATH = ${PATH} : ${SCALA_HOME} /binsource /etc/profile
3 编译源码包
3.1 参考文档
3.2 编译
编译过程编译时间比较长最终获得文件 spark-2.2.0-bin-hadoop2-without-hive.tgz
cd /opt/mkdir compilecd compile/rz # 上传 spark-2.2.0.tgztar -xvzf spark-2.2.0.tgzcd spark-2.2.0./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoopprovided,hadoop-2.7,parquet-provided"
3.3 解压安装
3.3.1 解压
-
解压
cd /opt/software/mkdir sparkcd /opt/compile/spark-2.2.0cp spark-2.2.0-bin-hadoop2-without-hive.tgz /opt/software/sparktar -xvzf spark-2.2.0-bin-hadoop2-without-hive.tgz
3.3.2 spark-env.sh
- 配置
将 Hive 的 lib 目录下的指定 jar 包拷贝到 Spark 的 jars 目录下cd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/conf/mv spark-env.sh.template spark-env.shvi spark-env.sh
# 添加以下配置到spark-env.sh
export JAVA_HOME=/usr/local/java/jdk1.8
export SCALA_HOME=/opt/software/scala/scala-2.11
export HADOOP_HOME=/opt/software/hadoop/hadoop-2.9.2
export HADOOP_CONF_DIR=/opt/software/hadoop/hadoop-2.9.2/etc/hadoop
export HADOOP_YARN_CONF_DIR=/opt/software/hadoop/hadoop-2.9.2/etc/hadoop
export SPARK_HOME=/opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive
export SPARK_WORKER_MEMORY=512m
export SPARK_EXECUTOR_MEMORY=512m
export SPARK_DRIVER_MEMORY=512m
export SPARK_DIST_CLASSPATH=$(/opt/software/hadoop/hadoop-2.9.2/bin/hadoop classpath)
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node00:2181,node01:2181,node02:2181 -Dspark.deploy.zookeeper.dir=/ha-on-spark"
3.3.3 slaves
- 配置slaves
cd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/conf/cp slaves.template slavesvi slaves
# 原本配置的 localhost 修改成以下内容node01node02node03
3.3.4 拷贝Hive的jars
- 将Hive的lib目录下的指定jar包拷贝到Spark的jars目录下
cp hive-beeline-2.3.7.jar hive-cli-2.3.7.jar hive-exec-2.3.7.jar hive-jdbc-2.3.7.jar hive-metastore-2.3.7.jar /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/jars/
3.3.7 环境变量
- 3台机器配置环境变量
vi /etc/profile
export SPARK_HOME = /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hiveexport PATH = ${PATH} : ${SPARK_HOME} /bin: ${SPARK_HOME} /sbinsource /etc/profile
4 配置
4.1 配置yarn
- yarn必须使用公平调度机制(非容量调度)。
这会公平地为 YARN 集群中的作业分配同等份额的资源。
yarn-site.xml添加以下配置
cd /opt/software/hadoop/hadoop-2.9.2/etc/hadoopvi yarn-site.xml<property><name> yarn.resourcemanager.scheduler.class </name><value> org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler </value></property><!-- 是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true --><property><name> yarn.nodemanager.pmem-check-enabled </name><value> false </value></property><!-- 是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true --><property><name> yarn.nodemanager.vmem-check-enabled </name><value> false </value></property>
scp yarn-site.xml node00: $PWDscp yarn-site.xml node01: $PWD
4.2 配置hive
4.2.1 添加spark的依赖到hive
- Hive 2.2.0之后,没有了 spark-assembly jar 。在Yarn模式运行时,需要将以下三个包放在HIVE_HOME/lib 下 :scala-library、spark-core、spark-network-common。
cd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/jarscp spark-network-common_2.11-2.2.0.jar spark-core_2.11-2.2.0.jar scala-library-2.11.8.jar chill-java-0.8.0.jar chill_2.11-0.8.0.jar jackson-module-paranamer-2.6.5.jar jackson-module-scala_2.11-2.6.5.jar jersey-container-servlet-core-2.22.2.jar jersey-server-2.22.2.jar json4s-ast_2.11-3.2.11.jar kryo-shaded-3.0.3.jar minlog-1.3.0.jar scala-xml_2.11-1.0.2.jar spark-launcher_2.11-2.2.0.jar spark-network-shuffle_2.11-2.2.0.jar spark-unsafe_2.11-2.2.0.jar xbean-asm5-shaded-4.4.jar /opt/software/apache-hive-2.3.7/lib/
- 把jar包同步给node01、node02
cd /opt/software/hive-2.3.7scp -r lib/ node01: $PWDscp -r lib/ node02: $PWD
4.2.2 在hive中设置使用spark引擎
- 3台机器在 hive-site.xml 中配置执行引擎
cd /opt/software/hive-2.3.7/conf/vi hive-site.xml
<property><name>hive.execution.engine</name><value>spark</value></property><property><name>spark.home</name><value>/opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive</value></property><property><name>spark.master</name><value>yarn</value></property><property><name>spark.eventLog.enabled</name><value>true</value></property><property><name>spark.eventLog.dir</name><value>hdfs://mycluster:8020/spark-hive-jobhistory</value></property><property><name>spark.executor.memory</name><value>512m</value></property><property><name>spark.serializer</name><value>org.apache.spark.serializer.KryoSerializer</value></property><property><name>spark.yarn.jars</name><value>hdfs://mycluster:8020/spark-jars/*</value></property>
4.2.3 HDFS创建目录
- 在HDFS上创建spark-hive-jobhistory和spark-jars目录
hdfs dfs -mkdir /spark-jarshdfs dfs -mkdir /spark-hive-jobhistory
-
往spark-jars中上传jar包
hdfs dfs -put /opt/software/spark/spark-2.2.0-bin-hadoop2-without
hive/jars/*.jar /spark-jars
4.2.4 拷贝xml文件
- 将hadoop中的yarn-site.xml、hdfs-site.xml以及Hive的hive-site.xml放入spark的conf中
cp /opt/software/hadoop/hadoop-2.9.2/etc/hadoop/hdfs-site.xml /opt/software/hadoop/hadoop-2.9.2/etc/hadoop/yarn-site.xml /opt/software/hive-2.3.7/conf/hive-site.xml /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/conf/
4.2.5 分发
- 分发spark
cd /opt/software/scp -r spark/ node01: $PWDscp -r spark/ node02: $PWD
5 启动
- 停掉所有服务
kill 有关 hive 的服务 ,beeline 客户端、 9083 、 10000 端口stop-yarn.shstop-dfs.sh
- 启动服务
# node00 上启动 hadoopstart-dfs.shstart-yarn.sh# node00 上启动 sparkcd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/sbin/./start-all.sh# node01 上启动 mastercd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/sbin/./start-master.sh# node01 上启动 9083hive --service metastore&# node00 启动 10000hiveserver2&# node02 上启动 beelinebeeline -u jdbc:hive2://node01:10000 -n root