解決sparn yarn-cluster第三方依賴包的載入
阿新 • • 發佈:2018-12-08
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