Spark之本地部署,編譯打包以及遠(yuǎn)程提交

Spark之本地部署,編譯打包以及遠(yuǎn)程提交的條件和可行性:

1.條件:個人電腦主機(jī)(設(shè)為A)與集群服務(wù)器是處于同一個局域網(wǎng)內(nèi)(比如校園網(wǎng))。集群中各個主機(jī)形成一個分布式計(jì)算環(huán)境,也就是相當(dāng)于集群是一個配置好的可用的Hadoop或者Spark集群。

2.原因:在個人電腦上需要用到集群來工作時大多數(shù)情況下是使用JupyterHub或者M(jìn)obaXterm類似遠(yuǎn)程軟件來遠(yuǎn)程進(jìn)入集群的主節(jié)點(diǎn)(Linux系統(tǒng))來提交任務(wù)和編寫代碼。但是其實(shí)這樣步驟會不連貫和繁瑣,因?yàn)橐话銇碚f代碼都是在自己的個人電腦上寫比較方便,遠(yuǎn)程的集群命令行界面和NoteBook等相關(guān)代碼編輯器也是有一定的不方便的時候,且一些文件和數(shù)據(jù)每次編譯好都要先往集群上傳遞一份才行。因此猜測能否使用A進(jìn)行Spark程序的本地編譯打包,然后再使用Spark-Submit或者Spark-Shell遠(yuǎn)程提交給集群跑。

3.可行性:A已經(jīng)安裝和配置好JDK,Spark,Scala等環(huán)境,已經(jīng)可以實(shí)現(xiàn)本地部署,編譯打包(用的本機(jī)的jdk,MVN,Spark等等 )。Win10系統(tǒng)可以在本機(jī)啟動WSL這樣一個Linux子系統(tǒng),在WSL中使用?vim編輯.bashrc文件來寫入在A上安裝好的?JDK,Spark,Scala 等各種包的路徑(比如配置SPARK_HOME、YARN_CONF_DIR、HADOOP_CONF_DIR 要使用hive可能還需要 HIVE_CONF_DIR)。然后再將集群中的Hadoop的各個配置文件(我們從集群中拷貝出hadoop的各個配置文件,我是直接將143節(jié)點(diǎn)的 /etc/Hadoop/conf目錄拷貝過來的,這是一個軟鏈接),拷貝過來A的?HADOOP_CONF_DIR 中(這時候其實(shí)復(fù)制了一份集群的配置文件,因此,集群個主機(jī)的ip端口都擁有了)。 另外,需要將win10 的hosts文件中添加集群各個節(jié)點(diǎn)的主機(jī)名。以上配置完成,即可直接在wsl ubuntu中使用 spark-submit、spark-shell等命令,此時A的角色已經(jīng)作為集群的一個Client了,可以直接提交任務(wù)給集群跑和啟動交互式。

Spark:2.4.0、maven:3.6.3、scala:2.11.12、scalatest:3.0.4(版本要自己去查查對應(yīng)的)

編譯命令:

mvn -T 1C clean package -Dmaven.test.skip=true?

-Dmaven.test.skip=true 表示“不編譯測試模塊”,-pl 表示項(xiàng)目的相應(yīng)模塊(編譯單個包時使用,比如只改了core包),-am 表示同時編譯它的依賴包

打包成Spark可運(yùn)行版:

./dev/make-distribution.sh --name hadoop-3.2-hive-2.3 --tgz -Phadoop-3.2 -Phive-2.3 -Phive-thriftserver -pl core -Pyarn -DskipTests

上述打包過程會編譯整個項(xiàng)目生成各個模塊的jar包,同時在spark項(xiàng)目根目錄下生成dist目錄,并生成tgz壓縮包,實(shí)際上生成的dist包就是我們解壓tgz后的東西。

將集群中的Hadoop的各個配置文件拷貝過來A的?HADOOP_CONF_DIR 中,core-site.xml 需要將net.topology.script.file.name對應(yīng)的注釋掉,否則會報(bào)錯。

補(bǔ)充:更換集群時只需要新集群主節(jié)點(diǎn)102節(jié)點(diǎn)的 /etc/Hadoop/conf目錄拷貝過來的(yarn那個)替換了A的?HADOOP_CONF_DIR中的之前的那份集群的配置文件的即可。其他不用動。

注意本地的host文件的ip可能不是最新的,需要留意一下。也不是防火墻的問題。

WSL Ubuntu 的.bashrc文件追加內(nèi)容:

export JAVA_HOME=/home/***/java/jdk1.8.0_151

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH


export SCALA_HOME=/home/***/scala/scala-2.11.8

export PATH=${SCALA_HOME}/bin:$PATH


export MVN_HOME=/mnt/d/ideaMaven/apache-maven-3.6.3

export PATH=${MVN_HOME}/bin:$PATH


export HADOOP_CONF_DIR=/mnt/d/hadoop-2.6.5/conf

export YARN_CONF_DIR=/mnt/d/hadoop-2.6.5/conf

export SPARK_HOME=/mnt/d/spark_smile/spark-2.4.0/dist

任務(wù)提交:

spark-shell --master yarn …………

spark-submit --master yarn …………


結(jié)果,看app_ID:




猜測:

既然jar包是在本地進(jìn)行編譯打包的,提交給集群的是打包好的jar包(可運(yùn)行的spark程序)。那是否可以猜測其實(shí)集群中根本不需要安裝Spark,只要有Hadoop和jdk,jvm就行?

(補(bǔ)充)關(guān)于Maven的配置問題:




09-20更新:由于目前有兩個可用集群,大的和小的。因此idea的terminal還是使用小集群,而大集群的使用則通過102的shell界面的命令行命令來上傳hdfs文件和打包好的程序jar包,然后spark-submit或者spark-shell來提交程序,先傳進(jìn)102本地目錄里。

//spark-submit --jars spark-nlp.jar --class Main app.jar

//spark-submit --class org.apache.spark.Bspml.BspBinaryClassificationSVM --master yarn --deploy-mode cluster --name BspBinaryClassificationSVM --jars spark-bsp_2.11-2.4.0.jar spark-bsp_2.11-2.4.0.jar

//spark-submit --class org.apache.spark.Bspml.BspBinaryClassificationSVM --master yarn --deploy-mode cluster --jars spark-rsp_2.11-2.4.0.jar spark-rsp_2.11-2.4.0.jar

//spark-submit --class org.apache.spark.Bspml.BspBinaryClassificationSVM --master yarn --deploy-mode client --jars spark-rsp_2.11-2.4.0.jar spark-rsp_2.11-2.4.0.jar

//使用client部署模式的話 driver在提交任務(wù)的節(jié)點(diǎn)(本機(jī))上啟動,返回值也會返回到本機(jī),所以能顯示出最后的返回值,如果使用cluster就不會,因?yàn)閏luster模式是在集群中任意選擇一個worker來啟動driver。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容