一 实验说明

本实验主要完成Hvie on Spark的配置,主要内容包含maven配置、编译spark源码 spark配置 hive配置,我使用的软件版本如下表所示。

软件

版本

hadoop

2.7.7

Hive

2.3.7

spark

2.0.0源码包

scala

2.11.12

  • 注意:本教程只讲解了maven、spark和hive的配置,在开始本教程之前需要自行配置hadoop和scala,我使用的版本已经在第一个表中贴了出来。
  • 注意:hive on spark配置有较强的的版本依赖hive与Spark版本兼容表如下。

Hive Version

Spark Version

3.0.X

2.3.0

2.3.X

2.0.0

2.2.X

1.6.0

2.1.X

1.6.0

2.0.X

1.5.0

1.2.X

1.3.1

1.1.X

1.2.0

  • 由于源码编译过程时间教程不愿自行编译的可在我的百度云连接自行下载,连接中还包含我配置好的hadoop、hive、spark的conf(配置文件中的“master”是我的主机名大家根据自己的情况进行修改)和maven的settings.xml文件,连接如下。本教程使用的所有jar包和安装包也在连接中。
链接:https://pan.baidu.com/s/1PWnSbuRnc-2lXskvH2RVKg 
提取码:xygc

二 配置步骤

一、maven配置

编译spark源码需要使用maven,我们先来配置一下maven环境。

第一步:下载maven安装包

编译spark建议使用maven3环境,下载连接为http://maven.apache.org/download.cgi,点击图中红框中的内容即可下载。

hive spark资源设置 hive on spark 配置_hive spark资源设置

第二步、安装

下载完成后将maven安装包上传到Linux系统,我这里上传到了/usr/local目录下,上传完成后解压并重命名为maven,命令如下所示

[root@master ~]# cd /usr/local
[root@master local]# tar -zxvf apache-maven-3.6.3-bin.tar.gz
[root@master local]# mv apache-maven-3.6.3 maven

第二步、配置maven仓库

修改maven目录下的settings.xml文件 找到对应标签进行修改,内容如下。

<!-- 配置本地仓库地址 -->
<localRepository> E:\software\maven_repository</localRepository>
<!-- 阿里云仓库 -->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
<!-- Java的JDK版本 -->
<profile>    
    <id>jdk-1.8</id>
    <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
    </activation>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
    </properties>
</profile>

第三步:配置Maven环境变量

[root@master local]# vim ~/.bashrc
MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1
export PATH=${MAVEN_HOME}/bin:${PATH}
[root@master local]# source ~/.bashrc
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /usr/local/maven
Java version: 1.8.0_144, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_144/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"

二、编译Spark

第一步:解压配置

在官网中下载spark-2.0.0的源码包,源码包大小为12MB,链接为:http://archive.apache.org/dist/spark/spark-2.0.0/spark-2.0.0.tgz ,下载完成后将源码包上传到linux,我这里上传到了/usr/local目录下,上传完成后解压,然后修改/spark-2.0.0/dev目录下的make-distribution.sh文件,方法如下。

[root@master local]# tar -zxvf spark-2.0.0.tgz
[root@master local]# vim ./spark-2.0.0/dev/make-distribution.sh
# 在该文件中找到以下内容删除
VERSION=$("$MVN" help:evaluate -Dexpression=project.version $@ 2>/dev/null | grep -v "INFO" | tail -n 1)
SCALA_VERSION=$("$MVN" help:evaluate -Dexpression=scala.binary.version $@ 2>/dev/null\
    | grep -v "INFO"\
    | tail -n 1)
SPARK_HADOOP_VERSION=$("$MVN" help:evaluate -Dexpression=hadoop.version $@ 2>/dev/null\
    | grep -v "INFO"\
    | tail -n 1)
SPARK_HIVE=$("$MVN" help:evaluate -Dexpression=project.activeProfiles -pl sql/hive $@ 2>/dev/null\
    | grep -v "INFO"\
    | fgrep --count "<id>hive</id>";\
    # Reset exit status to 0, otherwise the script stops here if the last grep finds nothing\
    # because we use "set -o pipefail"
echo -n)
#删除完成后修改为
VERSION=2.0.0  
SCALA_VERSION=2.11
SPARK_HADOOP_VERSION=2.7.7

第二步:编译spark

编译spark,进入/spark-2.0.0目录执行如下命令编译spark,编译过程大概2个小时左右,编译完成后在根目录会生成一个spark-2.0.0-bin-hadoop2-without-hive.tgz文件,这个文件就是我们要安装的spark。

./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"

结果如图所示。

hive spark资源设置 hive on spark 配置_spark_02

三、Spark配置

这里我们使用刚刚编译好的Spark安装包,步骤如下。

第一步:解压重命名

将刚刚编译好的安装包拷贝到/usr/local目录下进行解压并重命名为Spark,命令如下所示。

[root@master local]# tar -zxvf spark-2.0.0-bin-hadoop2-without-hive.tgz
[root@master local]# mv spark-2.0.0-bin-hadoop2-without-hive spark

第二步:配置spark-env.sh

[root@master local]# cd ./spark/conf/
[root@master conf]# cp spark-env.sh.template spark-env.sh
[root@master conf]# vim spark-env.sh
#将以下配置添加到spark-env.sh文件中
export JAVA_HOME=/usr/java/jdk1.8.0_144
export SCALA_HOME=/usr/local/scala
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HADOOP_YARN_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_HOME=/usr/local/spark
export SPARK_WORKER_MEMORY=512m
export SPARK_EXECUTOR_MEMORY=512m
export SPARK_DRIVER_MEMORY=512m
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

四、配置Hive

第一步、配置hive-site.xml

这里我们使用的hive版本为2.3.7,将hive解压到/usr/local目录下并重名为hive,命令如下。

[root@master local]# tar -zxvf apache-hive-2.3.7-bin.tar.gz
[root@master local]# mv apache-hive-2.3.7-bin hive
[root@master local]# vim /usr/local/hive/conf/hive-site.xml
#在文件中添加以下配置
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
     <!-- 查询数据时 显示出列的名字 -->
     <name>hive.cli.print.header</name>
     <value>true</value>
  </property>
  <property>
     <!-- 在命令行中显示当前所使用的数据库 -->
     <name>hive.cli.print.current.db</name>
     <value>true</value>
  </property>
  <property>
     <!-- 默认数据仓库存储的位置,该位置为HDFS上的路径 -->
     <name>hive.metastore.warehouse.dir</name>
     <value>/user/hive/warehouse</value>
  </property>
  <!-- 5.x -->
  <property>
     <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://localhost:3306/hive_metastore?createDatabaseIfNotExist=true</value>
  </property>
  <!-- 5.x -->
  <property>
     <name>javax.jdo.option.ConnectionDriverName</name>
     <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
   <!-- MySQL密码 -->
     <name>javax.jdo.option.ConnectionUserName</name>
     <value>root</value>
  </property>
  <property>
   <!-- 设置mysql密码 -->
     <name>javax.jdo.option.ConnectionPassword</name>
     <value>123456</value>
  </property>
 <property>
  <!-- 设置引擎为Spark-->
    <name>hive.execution.engine</name>
    <value>spark</value>
  </property>
  <property>
    <name>hive.enable.spark.execution.engine</name>
    <value>true</value>
  </property>
  <property>
    <name>spark.home</name>
    <value>/usr/local/spark</value>
  </property>
  <property>
    <name>spark.master</name>
    <value>yarn</value>
  </property>
  <property>
    <name>spark.eventLog.enabled</name>
    <value>true</value>
  </property>
  <property>
   <!-- Hive的日志存储目录,HDFS -->
    <name>spark.eventLog.dir</name>
    <value>hdfs://master:9000/spark-hive-jobhistory</value>
  </property>
  <property>
    <name>spark.executor.memory</name>
    <value>512m</value>
  </property>
  <property>
    <name>spark.driver.memory</name>
    <value>512m</value>
  </property>
  <property>
    <name>spark.serializer</name>
    <value>org.apache.spark.serializer.KryoSerializer</value>
  </property>
  <property>
   <!-- HDFS中jar包的存储路径 -->
    <name>spark.yarn.jars</name>
    <value>hdfs://master:9000/spark-jars/*</value>
  </property>
  <property>
    <name>hive.spark.client.server.connect.timeout</name>
    <value>300000</value>
</configuration>

第二步:配置hive-env.sh

[root@master local]# cd /usr/local/hive/conf
[root@master conf]# cp hive-env.sh.template hive-env.sh
[root@master conf]# vi hive-env.sh   
//对如下配置进行修改
#指定hadoop工作目录配置时前需要加一个空格
 HADOOP_HOME = /usr/local/hadoop   
#指定hive配置目录
export  HIVE_CONF_DIR = /usr/local/hive /conf

第三步:拷贝mysql驱动并配置环境变量

配置环境变量,并将mysql驱动包拷贝到hive/lib目录下,最后初始化数据库

[root@master conf]# vi ~/.bashrc 
#配置hive的执行目录
export HIVE_HOME=/usr/local/hive 
export PATH=$HIVE_HOME/bin:$PATH
[root@master conf]# source ~/.bashrc
#将mysql连接包拷贝到hive的lib目录下
[root@master conf]# cp /usr/local/mysql-connector-java-5.1.39.jar /usr/
local/hive/lib/
#首次启动需要初始化源数据库
[root@master conf]# /usr/local/hive/bin/schematool -initSchema -dbType

五、实现hive on Spark

第一步:整合jar包

将Spark中的jar包和hive中的jar包整合,

[root@master conf]# cp /usr/local/spark/jars/*.jar /usr/local/hive/lib/
[root@master conf]# rm -rf /usr/local/spark/jars/*.jar
[root@master conf]# cp /usr/local/hive/lib/*.jar /usr/local/spark/jars/

第二步:将配置文件拷贝到spark/conf

将hadoop中的core-site.xml、yarn-site.xml、hdfs-site.xml和hive中的hive-site.xml拷贝到spark的conf目录,命令如下。

[root@master conf]# cp /usr/local/hadoop/etc/hadoop/core-site.xml /usr/local/hadoop/etc/hadoop/yarn-site.xml /usr/local/hadoop/etc/hadoop/hdfs-site.xml /usr/local/hive/conf/hive-site.xml /usr/local/spark/conf/

第三步:上传jar包

在HDFS中创建存放jar包和日志的目录,并将整合后的jar包上传到HDFS

创建的目录需要与Hive-site.xml配置一致
[root@master conf]# hadoop fs -mkdir /spark-jars
[root@master conf]# hadoop fs -mkdir /spark-hive-jobhistory
[root@master conf]# hadoop fs -put /usr/local/spark/jars/*.jar /spark-jars

第四步:启动服务

启动hadoop和spark服务

[root@master conf]# start-all.sh
[root@master conf]# cd /usr/local/spark/sbin/
[root@master sbin]# ./start-all.sh

这样我们就完成了hive on spark的配置,大家可以自己创建一个表并添加一些数据进行测试。