1. 程式人生 > >解決sparn yarn-cluster第三方依賴包的載入

解決sparn yarn-cluster第三方依賴包的載入

1、最簡單粗暴的方式, 打一個fatjar.

2、禁止應用程式將依賴的Jar包傳到HDFS,將spark-assembly.jar放在該目錄中。

是Spark自己將執行時候需要依賴的Java包上傳到HDFS上,而且每次執行Spark Application的時候都會上傳,這時候你會發現你的hdfs://mycluster/user/iteblog/.sparkStaging目錄下面存在了大量的Jar檔案,這最少存在兩個不好的地方:
  1、每次上傳Jar檔案,多少也會影響到程式的執行速度;
  2、當在HDFS中上傳了大量的Jar檔案,這會產生大量的小檔案,會對HDFS有影響。
  所以我們想是否可以在HDFS上面建立一個公共的lib庫存放目錄,每次執行Spark的時候,只要我們程式依賴的Jar包存在HDFS中的lib庫中,那麼這時候我們就不上傳該Jar
在spark-defaults.conf中配置。

   spark.yarn.jar 
   spark.yarn.jars hdfs://chb0-179004/spark_libs/*.jar
   spark.yarn.archive

設定後,將不會在上傳了

	Source and destination file systems are the same. 
	Not copying hdfs://chb0-179004:8020/hdp/apps/2.6.1.0-129/spark/spark-hdp-assembly.jar

但是,將應用依賴的第三方依賴包上傳到該目錄中, 無法載入第三方依賴

3、通過--jars指定第三方依賴,由於這個方式, 每個jar都需要列出,使用","
分割, 如果jar太多手動去寫,肯定麻煩, 我們可以通過shell指令碼

jarlib="lib"
CLASS_PATH="smsRun.sh"
for i in `ls $jarlib/*.jar`; do
CLASS_PATH="$CLASS_PATH","$i";   //格式化jar包路徑
done
//執行命令   --jars  $CLASS_PATH
spark-submit  --master yarn-cluster --num-executors 1 --driver-memory 2g --executor-memory 512M --class com.nokia.uba.analysis.spark.mcSms.SmsAnalysisJob --jars  $CLASS_PATH walrusAnlysis.jar 20181102 02

可以從日誌中看出第三方jar的上傳。任務執行成功
在這裡插入圖片描述

4、突然執行程式, 顯示依賴缺少, 但是執行日誌開始顯示,明明已經上傳到了叢集, 跑一會就包file not find.
一開始以為是記憶體不足,但是調節了driver-memory, executor-memory,都無效。
在這裡插入圖片描述

最後在程式中,發現初始化conf的時候, 還設定sc.setMaster("local[4]");, 但是我是提交yarn-cluster模式, 將改行註釋,問題解決。

5、程式退出, 但是UI上顯示正常
參考: https://blog.csdn.net/u011291159/article/details/51161977

ApplicationMaster: Final app status: SUCCEEDED, exitCode: 0