通常我們將spark任務編寫後打包成jar包,使用spark-submit進行提交,因為spark是分布式任務,如果執行機器上沒有對應的依賴jar檔案就會報classnotfound的錯誤。
下面有三個解決方法:
根據spark官網,在提交任務的時候指定–jars,用逗號分開。這樣做的缺點是每次都要指定jar包,如果jar包少的話可以這麼做,但是如果多的話會很麻煩。
spark-submit --master yarn-client --jars ***.jar,***.jar(你的jar包,用逗號分隔) mysparksubmit.jar
spark.executor.extraclasspath=/home/hadoop/wzq_workspace/lib/*
spark.driver.extraclasspath=/home/hadoop/wzq_workspace/lib/*
需要注意的是,你要在所有可能執行spark任務的機器上保證該目錄存在,並且將jar包考到所有機器上。這樣做的好處是提交**的時候不用再寫一長串jar了,缺點是要把所有的jar包都拷一遍。
如果你還是覺得第二種麻煩,這種方法是將所有依賴的jar包包括你寫的**全部打包在一起(fat-jar)。在專案根目錄輸入sbt,鍵入plugins,發現assembly並沒有預設安裝,因此我們要為sbt安裝sbt-assembly外掛程式。
在你的專案目錄中project/plugins.sbt中新增
addsbtplugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
resolvers += resolver.url("bintray-sbt-plugins", url(""))(resolver.ivystylepatterns)
然後我們再根目錄鍵入sbt,然後使用plugins檢視plugins,如果看到有sbtassembly.assembleplugin,說明你的外掛程式就安成功了:
還要設定下衝突解決,然後再在sbt互動命令列下使用assembly就可以了。這種方法打包後會使得jar包很大。
spark 提交jar包優化
在測試中,使用livy去執行spark程式,採用 片段的方式。但是應用在啟動的時候,會把本地的jar檔案上傳到hdfs,然後再從hdfs分發到其它的運算節點,這個很影響效能。可以在spark的配置檔案spark defaults.conf配置如下內容 第二個引數,主要是刪除應用jar的快取,防止應用...
spark任務執行及jar包
spark的jar包沒必要把所有相關的依賴都打進乙個jar包中,因為這樣會把spark hadoop本身相關的jar包也打進去,但是這些依賴在用spark submit命令執行時,會自動載入部署環境中已有的。opt cloudera parcels cdh bin spark submit clas...
sbt打包的jar包提交到spark
使用idea建立sbt專案,建立過程詳見url 在專案根目錄下,開啟終端,輸入sbt命令,會出現 符號,繼續輸入package命令打包完成 使用spark submit命令提交到spark中 本地提交命令 spark submit master 兩條橫線 local class 兩條橫線 hello...