一 實驗說明
本實驗主要完成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,點擊圖中紅框中的內容即可下載。
第二步、安裝
下載完成後將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"
結果如圖所示。
三、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的配置,大家可以自己創建一個表並添加一些數據進行測試。