部署jar到spark上运行

初次接触spark,还没有入门,能够成功将jar部署到spark平台上并且运行,必须感谢博主Fang20160214
1.环境及工具 系统:ubuntu14.04
spark:2.1.0 (单机环境)
scala: 2.12.1
开发工具:IntelliJ IDEA Community
构建工具:sbt
添加SDK
File——Project Structure——SDKs,然后”+“选择”JDK”
构建jar包
File——Project Structure——Artifacts,然后有个“+”,设置好了之后点击“OK”;
菜单栏上面Build——Build Artifacts…,然后可以选择Build,ReBuild,Clean,Edit
如果intellij下载的是没带jdk的版本,同样的类似步骤在SDKs中添加,可以配置jdk。
然后就可以将生成的jar部署到spark环境中运行啦,命令:
首先进入到spark安装目录下,然后执行

./bin/spark-submit --name "nlp run on spark" --master spark://localhost:8080 --executor-memory 2G --class com.sjtu.spark.testNLP /home/username/Documents/spark-nlp.jar /home/username/Documents/spark-nlp/out/ /home/username/Documents/spark-nlp/out/output

2.遇到的问题及解决办法 (1)必须添加SDK,否则intellij将不会对scala文件进行编译,产生的jar部署到spark环境中,运行时候将会报错:找不到将要运行的类(的确这样,都没有编译产生,就肯定找不到)
(2)scala版本问题
报错:
Exception in thread “main” java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader; )Lscala/reflect/api/JavaMirrors$JavaMirror;
[这一步骤是错误的,不用这样做,只需要在build.sbt中对scalaVersion进行设置]尝试在libraries中添加了一个scala-reflect.jar,于是从scala2.12.1的lib目录下找到了,添加到工程的libraries中,依然报错。
后来发现应该是spark2.1.0所需要的scala版本与系统安装的scala版本2.12.1可能不对应,于是将scala2.12.1安装目录下的jar全部添加到工程的libraries中,还是不对,报错:
java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/SymbolLiteral
最终参照网页http://www.scala-sbt.org/0.12.4/docs/Howto/scala.html
设置scala的版本,在sbt.build文件中添加scalaVersion := "2.11.8"
这时候,intellij会自动下载2.11.8的scala的相关文件。最后,将jar部署到spark中,运行正常。
部署jar到spark上运行
文章图片

sbt或者maven,都是类似的,注意scala的版本即可。涉及到的jar也就是这几个:
部署jar到spark上运行
文章图片

备注:另外的设置
sparkVersion := "2.1.0"

(3)添加依赖的jar包
命令中还需要添加–jars **.jar
./bin/spark-submit --name "nlp run on spark" --master spark://localhost:8080 --jars /home/username/Documents/stanford-english-corenlp-models-current.jar --executor-memory 2G --class com.sjtu.spark.testNLP /home/username/Documents/spark-nlp.jar /home/username/Documents/spark-nlp/out/ /home/username/Documents/spark-nlp/out/output

如果有多个jar,jar之间用逗号分隔。或者使用其他办法:对spark.executor.extraClassPath进行设值;或者sbt-assembly的方式。[参考网页3]
【部署jar到spark上运行】参考网页
1.http://stackoverflow.com/questions/16407042/scala-is-2-10-1-but-sbt-console-is-not
2.http://blog.csdn.net/weipanp/article/details/45098669
3.Spark任务提交jar包依赖解决方案http://blog.csdn.net/wzq294328238/article/details/48054525

    推荐阅读