一、運行環境
CentOS 7.2
Hadoop 2.7
Hive 2.2.0
Spark 2.0.0
JDK 1.7
Scala 2.11.8
Maven 3.3.9
說明:Scala 2.11.8以後的版本只支持JDK1.8,如果環境原本是使用JDK1.7的就不需要安裝最新版本。
二、開始配置前的排坑
很多人都會參考Hive on spark的官方手冊https://cwiki.apache.org//confluence/display/Hive/Hive+on+Spark:+Getting+Started來配置,但其中還是有很多坑的,下面就說一下官方手冊上的坑及沒有提到一些細節。
1)版本兼容問題
HIVE官方指引說Spark一定要安裝沒有HIVE jar包的版本。原文“Note that you must have a version of Spark which does not include the Hive jars.”除此之外就沒有其他的說明了。但實際情況是HIVE最新發布版2.1.1(截止我寫這篇博客的時間點官網上的下載頁面最新版本)是沒辦法運行在Spark2.0.0之上的,強行運行的話會出現java.lang.ClassNotFoundException: org.apache.spark.JavaSparkListener的錯誤。原因是由於從Spark2.0.0開始JavaSparkListener已移除,改爲了SparkListener。
如果想使用Hive2.X版本搭配Spark2.X版本的話可以使用Hive-14029的修復版本:
https://github.com/apache/hive/pull/103/commits/f14f5a6d0d255d52e99ecbf5a232706cb1f63142
Hive對應的Spark版本可根據源碼目錄中的pom.xml的<spark.version>確認。
2)spark編譯時scala版本需要更改
官方指引的編譯命令
根據spark官方指引實際操作的編譯命令
3)啓動Hive時java.lang.NoClassDefFoundError: org/slf4j/Logger錯誤
原因是沒有導入hadoop的jar包,在spark-env.sh加入下面的變量即可:
4)Spark on Yarn不需要啓動spark集羣
官方手冊原文是在編譯後就要求啓動spark集羣——“Start Spark cluster”,但這種用是要配置master和worker的,有點像配置resourcemanager和nodemanager。而實際上如果是Spark on Yarn則不需要配置也不需要啓動spark集羣。Spark會自動讀取Yarn配置文件,如果不是用了Spark on Yarn,那在Yarn的webUI上是看不到Spark任務的。
Spark on Yarn需要在spark-env.sh加入下面的變量
5)Hive的spark.master參數
官方手冊上說spark.master參數是<Spark Master URL>,沒有詳細地說明,像我這樣的新手很容易犯暈,spark官方文檔上有詳細解釋http://spark.apache.org/docs/latest/submitting-applications.html#master-urls
三、配置過程
1)編譯spark和hive
3)在hive-site.xml中加入
並把SPARK_HOME/jars下所有jar包複製到此目錄下
4)在spark-env.sh中加入
5)啓動HIVE,配置參數
這些參數可以配置在hive-site.xml或spark-defaults.conf中。
6)執行SQL,完成
四、說在最後
本文只是爲了記錄自己搭建Hive 2.2 on Spark 2.0.0時遇到的一些問題和解決步驟,因爲當時網上沒有什麼現成資料所以走了不少彎路,希望此文能幫助和我遇到同樣問題的人。關於性能調優還請參考spark官方手冊或者網上其他資料,如有錯誤歡迎指正。