昨晚和同事一起看一個scala寫的程序,程序都寫完了,且在idea上debug運(yùn)行是ok的。但我們不能調(diào)試的方式部署在客戶機(jī)器上,于是打包吧。打包時,我們是采用把外部引入的五個包(spark-assembly-1.5.1-hadoop2.6.0.jar、commons-logging.jar、fastjson-1.2.10.jar、sqljdbc4.jar、log4j.jar)打包到我們的jar包中。好了,一切都好了。。。在java -jar demo.jar方式運(yùn)行,以及把它拷貝到spark集群中,使用spark-submit方式調(diào)教都不好用。爆出error都是一致的:找不到main函數(shù)。

      好吧,找原因吧。

  1. 是不是發(fā)布的jar包有問題?

  2. 是不是在artifcates中設(shè)置有問題?

  3. 難道是打包環(huán)境設(shè)置錯誤了?

  4. 。。。

  一頓神找呀。

  不行我們寫個原始的scala程序,只寫一個main函數(shù),通過jar測試下,看是否可行。。。結(jié)果:不錯奧,這個test.jar不負(fù)眾望的運(yùn)行起來了;

  那引入外部包,并打包到j(luò)ar下運(yùn)行看看。。。結(jié)果:把jar包打包進(jìn)來運(yùn)行就不好用了。

  那我們在cmd下運(yùn)行附帶有外部包的jar文件。。。結(jié)果:可以的;那我們就走了打包時不附帶外部包的方式運(yùn)行。

當(dāng)然,按道理說把外部引入的jar文件打包的我們的jar包中,這種處理方案應(yīng)該是可行的,我們這里就繞過了這個條路。通過spark提交時制定外部引入包,發(fā)現(xiàn)也是可行的。下邊就介紹下