昨晚和同事一起看一個scala寫的程序,程序都寫完了,且在idea上debug運行是ok的。但我們不能調(diào)試的方式部署在客戶機器上,于是打包吧。打包時,我們是采用把外部引入的五個包(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方式運行,以及把它拷貝到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ù)眾望的運行起來了;

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

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

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

  • cmd下運行jar包方式,執(zhí)行spark任務(wù):

1、打包時,需要注意不要引入其他包:

2、我把生成的文件拷貝到