1. Hive on Spark

本文介绍了如何将Hive的计算引擎从MapReduce替换为Spark,选择了Hive2.3.7和Spark2.0.0的兼容版本,并详细阐述了下载Spark源码、编译去除Hive依赖的过程,包括配置JDK、MAVEN、SCALA的环境变量,以及在编译后的Spark中添加Hive的jar包,最后配置Yarn和Hive以使用Spark执行引擎。
摘要由CSDN通过智能技术生成

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,必须是一个不包含hivejar包的版本。
  • 但是一般spark发行版都是有hive依赖的,所以要手动编译源码来获得不包含hive相关jarspark进制包。
  • 编译需要安装JDKMAVENSCALA
  • 我选择node02作为包编译的服务器

2.1 JDK

JDK 在安装 hadoop 时候已经安装过,所以此处不演示安装过程
java -version

2.2 MAVEN安装

  • 下载maven
当前使用最新 3.9.3 版本

 

  • maven解压并创建目录
node02 上操作
cd /opt/software
mkdir maven
cd maven
rz # 上传apache-maven-3.9.3-bin.tar.gz
tar -xvzf apache-maven-3.9.3-bin.tar.gz
mv apache-maven-3.9.3/ maven-3.9.3
mkdir repository

 

  • 修改配置settings.xml
添加 localRepository
添加 aliyunmaven public 仓库

  •  配置环境变量
vi /etc/profile
# 添加以下内容
export MAVEN_HOME = /opt/software/maven/maven-3.8.6
export PATH = ${PATH} : ${MAVEN_HOME} /bin
  • 刷新环境         
source /etc/profile
  •  确认配置成功

mvn -v

Scala安装

下载 scala
由于上面 spark 中依赖的 scala 的版本是 2.11, 此处我们下载 2.11 版本 scala

 

cd /opt/software/
mkdir scala
cd scala/
rz # 上传 scala-2.11.12.tgz
tar -xvzf scala-2.11.12.tgz
rm -rf scala-2.11.12.tgz
mv scala-2.11.12/ scala-2.11

 

  •  配置环境变量
vi /etc/profile
export SCALA_HOME = /opt/software/scala/scala-2.11
export PATH = ${PATH} : ${SCALA_HOME} /bin
source /etc/profile

3 编译源码包

3.1 参考文档

3.2 编译

编译过程
编译时间比较长
最终获得文件 spark-2.2.0-bin-hadoop2-without-hive.tgz

cd /opt/
mkdir compile
cd compile/
rz # 上传 spark-2.2.0.tgz
tar -xvzf spark-2.2.0.tgz
cd spark-2.2.0
./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop
provided,hadoop-2.7,parquet-provided"

3.3 解压安装

3.3.1 解压

  • 解压

cd /opt/software/
mkdir spark
cd /opt/compile/spark-2.2.0
cp spark-2.2.0-bin-hadoop2-without-hive.tgz /opt/software/spark
tar -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.sh
vi 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 slaves
vi slaves
# 原本配置的 localhost 修改成以下内容
node01
node02
node03

3.3.4 拷贝Hivejars

  • Hivelib目录下的指定jar包拷贝到Sparkjars目录下
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-hive
export PATH = ${PATH} : ${SPARK_HOME} /bin: ${SPARK_HOME} /sbin

source /etc/profile

 

4 配置

4.1 配置yarn

  • yarn必须使用公平调度机制(非容量调度)

这会公平地为 YARN 集群中的作业分配同等份额的资源。

yarn-site.xml添加以下配置

cd /opt/software/hadoop/hadoop-2.9.2/etc/hadoop
vi yarn-site.xml
<property>
<name> yarn.resourcemanager.scheduler.class </name>
<value> org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedu
ler </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: $PWD
scp 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-libraryspark-corespark-network-common。
    cd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/jars
    cp 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包同步给node01node02
cd /opt/software/hive-2.3.7
scp -r lib/ node01: $PWD
scp -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-jobhistoryspark-jars目录
hdfs dfs -mkdir /spark-jars
hdfs 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.xmlhdfs-site.xml以及Hivehive-site.xml放入sparkconf
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: $PWD
scp -r spark/ node02: $PWD

5 启动

  • 停掉所有服务
kill 有关 hive 的服务 ,beeline 客户端、 9083 10000 端口
stop-yarn.sh
stop-dfs.sh

 

 

  • 启动服务
# node00 上启动 hadoop
start-dfs.sh
start-yarn.sh
# node00 上启动 spark
cd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/sbin/
./start-all.sh
# node01 上启动 master
cd /opt/software/spark/spark-2.2.0-bin-hadoop2-without-hive/sbin/
./start-master.sh
# node01 上启动 9083
hive --service metastore&
# node00 启动 10000
hiveserver2&
# node02 上启动 beeline
beeline -u jdbc:hive2://node01:10000 -n root

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值