Spark大數據平臺有使用一段時間了,但大部分都是用於實驗而搭建起來用的,搭建過Spark徹底分佈式,也搭建過用於測試的僞分佈式。如今是寫一遍隨筆,記錄一下曾經搭建過的環境,省得之後本身忘記了。也給和初學者以及曾經挖過坑的人用做參考。html
Hive on Spark是Hive跑在Spark上,用的是Spark執行引擎,而不是默認的MapReduce。java
能夠查閱官網的資源Hive on Spark: Getting Started。
linux
1) 下載jdk1.8並解壓:git
# tar -zxvf jdk-8u201-linux-i586.tar.gz -C /usr/local
2) 添加Java環境變量,在/etc/profile中添加:github
export JAVA_HOME=/usr/local/jdk1.8.0_201 export PATH=$PATH:$JAVA_HOME/bin export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
3) 保存後刷新環境變量:web
# source /etc/profile
4) 檢查Java是否配置成功,成功配置會有以下圖所示。sql
# java -version
1)下載Scala安裝包並解壓shell
# tar -zxf scala-2.11.12.tgz -C /usr/local
2) 添加Scala環境變量,在/etc/profile中添加:apache
export SCALA_HOME=/usr/local/scala-2.11.12 export PATH=${SCALA_HOME}/bin:$PATH
3) 保存後刷新環境變量vim
# source /etc/profile
4) 檢查Scala是否配置成功,成功配置會有以下圖所示。
# scala -version
1)下載安裝Maven
# tar -zxf apache-maven-3.6.1-bin.tar.gz -C /usr/local
2)添加到環境變量中
export MAVEN_HOME=/usr/local/maven-3.6.1 export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
3) 保存後刷新環境變量
# source /etc/profile
4)檢查Maven是否配置成功,成功配置會有以下圖所示
# mvn -version
5)更換中央倉庫鏡像爲阿里雲中央倉庫鏡像
# vim /usr/local/maven-3.6.1/conf/settings.xml
找到mirrors元素, 在它裏面添加子元素mirror:
<!-- 阿里雲中央倉庫 --> <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror>
添加結果以下:
由官方文檔可知Hive on Spark只使用特定版本的Spark進行測試,因此給定版本的Hive只能保證使用特定版本的Spark。其餘版本的Spark可能適用於給定版本的Hive,但這並不能保證。下面是Hive版本及其相應的兼容Spark版本的列表。
在本文中,小編搭建的版本爲:Hive 3.1.1,Spark 2.3.3,在這裏默認Hive已經成功安裝好。
1)下載並解壓Spark源碼
# wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.3.3/spark-2.3.3.tgz # tar -zxf spark-2.3.3.tgz
2)編譯Spark源碼
下面是參考Spark官方文檔給出的教程而定製的命令,由於Spark要結合Hadoop(僞分佈式Hadoop部署能夠參考我以前的文檔)與Hive一塊兒使用,下面命令是Spark自帶的Maven編譯的腳本:
# ./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7"
也能夠直接經過Maven命令進行編譯:
# ./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package
出現下圖所示也就表明着編譯成功:
將編譯後的Spark壓縮包解壓到/usr/local路徑並更名:
# tar -zxf spark-2.3.3-bin-hadoop2-without-hive.tgz -C /usr/local
# mv spark-2.3.3-bin-hadoop2-without-hive spark-2.3.3
3)配置僞分佈式Spark
配置SPARK_HOME環境變量後並刷新:
export SPARK_HOME=/usr/local/spark-2.3.3 export PATH=$PATH:$SPARK_HOME/bin
進入Spark根目錄下conf目錄並生成slaves文件:
# cd $SPARK_HOME/conf # cp slaves.template slaves //複製模板生成slaves文件,僞分佈式不用修改該文件
接下來修改spark-env.sh文件,修改前先複製後重命名:
# cp spark-env.sh.template spark-env.sh # vim spark-env.sh
添加以下內容:
export JAVA_HOME=/usr/local/jdk1.8.0_201 export SCALA_HOME=/usr/local/scala-2.11.12 export HADOOP_HOME=/usr/local/hadoop export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop export SPARK_WORKER_MEMORY=2048m export SPARK_MASTER_IP=hadoop export SPARK_WORKER_CORES=2 export SPARK_HOME=/usr/local/spark-2.3.3 export SPARK_LIBRARY_PATH=/usr/local/spark-2.3.3/lib
export SPARK_DIST_CLASSPATH=${hadoop classpath} //hadoop classpath在終端上輸入便可查看
4)啓動Spark
第一步,啓動以前要保證Hadoop啓動成功,先使用jps看下進程信息:
五個進程都啓動並無自動斷開,說明Hadoop啓動成功。
第二步,啓動Spark:
進入Spark的sbin目錄下執行start-all.sh啓動Spark,啓動後,經過jps查看最新的進程信息:
訪問http://ip:8080
從頁面能夠看到一個Worker節點信息。
經過訪問http://ip:4040進入spark-shell web控制檯頁面(需先使用命令./bin/spark-shell啓動SparkContext),出現下面的Web界面信息:
若是某臺機器上運行多個SparkContext,它的Web端口會自動連續加一,例如4041,4042,4043等。爲了瀏覽持久的事件日誌,設置spark.eventLog.enabled就能夠了。
5)驗證Spark是否配置成功
注意:在啓動Spark以前,要確保Hadoop集羣和YARN均已啓動
# $SPARK_HOME/sbin/start-all.sh
# ./bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client ./examples/jars/spark-examples_2.11-2.3.3.jar 10
若無報錯,而且算出Pi的值,說明Spark集羣能正常工做。
6)關閉Spark
進入Spark目錄,執行:
# cd $SPARK_HOME
# ./sbin/stop-all.sh
7)關閉Hadoop
進入Hadoop目錄,執行:
# cd $HADOOP_HOME # ./sbin/stop-yarn.sh # ./sbin/stop-dfs.sh
(./sbin/stop-all.sh也能夠執行上述的操做,但有警告該命令已被丟棄,應使用上面的兩個命令代替)
1)將編譯好的Spark依賴添加到$HIVE_HOME/lib目錄下
# cp $SPARK_HOME/jars/* $HIVE_HOME/lib
2)配置hive-site.xml
配置的內容與spark-defaults.conf相同,只是形式不同,如下內容是追加到hive-site.xml文件中的,而且注意前兩個配置,若是不設置hive的spark引擎用不了,在後面會有詳細的錯誤說明。
<property> <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-2.3.3</value> </property> <property> <name>spark.master</name> <value>yarn-client</value> </property> <property> <name>spark.eventLog.enabled</name> <value>true</value> </property> <property> <name>spark.eventLog.dir</name> <value>hdfs://hadoop:8020/spark-log</value> </property> <property> <name>spark.serializer</name> <value>org.apache.spark.serializer.KryoSerializer</value> </property> <property> <name>spark.executor.memeory</name> <value>1g</value> </property> <property> <name>spark.driver.memeory</name> <value>1g</value> </property> <property> <name>spark.executor.extraJavaOptions</name> <value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"</value> </property>
3)驗證Hive on Spark是否可用
命令行輸入hive,進入hive CLI:
set hive.execution.engine=spark; (將執行引擎設爲Spark,默認是mr,退出hive CLI後,會回滾到默認設置。若想讓執行引擎默認爲Spark,須要在hive-site.xml裏設置)
接下來執行一條建立測試表語句:
hive> create table test(ts BIGINT,line STRING);
而後執行一條查詢語句:
hive> select count(*) from test;
若上述整個過程都沒有報錯,並出現正確結果,則Hive on Spark搭建成功。
stackoverflow印度阿三們的解決方案已成功解決上述的問題:參考網址:https://stackoverflow.com/questions/7905501/get-rid-of-pom-not-found-warning-for-org-eclipse-m2elifecycle-mapping/
這報錯主要出如今Spark-SQL編譯出錯,緣由在maven本地倉庫中scala依賴衝突,第一次編譯的時候沒有配置scala版本,默認用了2.10版本,此次是編譯成功的,但後面再編譯的時候,我選擇了2.11版本,而後在spark-sql模塊編譯失敗,而後去google找解決方案,連接以下所示: https://github.com/davidB/scala-maven-plugin/issues/215
經過如下命令刪除maven本地倉庫(默認路徑)的scala依賴:
# rm -r ~/.m2/repository/org/scala-lang/scala-reflect/2.1*
若是編譯還沒法成功,則在源碼根目錄pom.xml文件添加依賴:
<dependency> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.2</version> </dependency>
緣由:啓動編譯好的Spark,出現如上的錯誤,是由於沒有在spark-env.sh導入hadoop classpath
解決方案:在shell終端上輸入hadoop classpath:
而後再spark-env.sh添加上去:
其主要的緣由是:在hive.sh的文件中,發現了這樣的命令,原來初始當spark存在的時候,進行spark中相關的JAR包的加載。而自從spark升級到2.0.0以後,原有的lib的整個大JAR包已經被分散的小JAR包的替代,因此確定沒有辦法找到這個spark-assembly的JAR包。這就是問題所在。
解決方案:將這個spark-assembly-*.jar`替換成jars/*.jar,就不會出現這樣的問題。
參考資料:http://spark.apache.org/docs/2.3.3/building-spark.html
http://www.javashuo.com/article/p-zgrrudmk-cm.html
https://blog.csdn.net/m0_37065162/article/details/81015096
https://cwiki.apache.org/confluence/display/Hive/Hive+on+Spark%3A+Getting+Started