最近开始学spark,配置好spark集群后使用另一台局域网内的非集群内部linux机器进行开发。
创建的maven项目。直接使用run as-->java Application 报classNotFound错误。原因好像是程序没有生成对应的jar包给master,worker无法获取到jar。那首先想到的当然是使用maven生成jar包。
然后可以使用两种方法来运行程序:
1、将jar包移动到配置了spark的集群机器上(不一定非要是master),使用spark bin自带的spark-submit运行,但是对我来说不是特别习惯。而且对于小程序来说每次附加好长的命令特麻烦。对于希望被外部调用的spark程序来说也很不方便。
2、使用ide直接来运行,我是用eclipse来运行的,首先生成程序jar包,然后在初始化javaSparkContext对象时通过javaSparkContext.addJar(已经打好的jar包路径);
然后再次使用run as-->java Application就可以了,确实变得很方便了。必须注意jar包路径不要写错了。
还有一个我自己学习spark遇到的问题:在使用java开发spark程序时需要导入spart-hadoop相关jar包,当然可以使用maven等一个个加进去,但一般都是用手动编译的jar包,官方已经编译好的spark里面会有spark-assembly-***-hadoop***.jar这样的jar包,直接导入项目即可,当然了最好是自己使用官方源码使用maven或者sbt编译自己的spark集群框架最合适的spark,然后导入spark-assembly-***-hadoop***.jar来在集群外进行开发.如果jar包不完整会报ClassNotFound异常。