关于spark利用jar包跑job的一些总结(二)

来源:互联网 发布:js导出文本格式 编辑:程序博客网 时间:2024/06/05 19:38

利用scalac以及jar命令得到spark上可运行的jar包

需要提前准备的:
1. JDK环境。
2. Scala环境,在此不多赘述,自行查找配置。(个人建议用2.10.*版本。之前用2.11版本,发现与spark-assembly那个jar包中的Scala环境不匹配,出现奇葩的错误)。
3. spark api即spark-assembly*.jar包(找不到的可以在服务器上或者你的环境里输入 find -name spark-*.jar)。

进入正文:
(在windows与linux环境下命令一致,就不分开讨论)

  1. 首先编写你要在spark上运行的工程代码,存为scala文件(这里还以上一篇的WordCount工程代码为例)。
  2. 利用scalac,对scala文件进行编译生成.class文件(此时要把spark-assembly包加入依赖):
    scalac -classpath [spark-assembly*.jar全路径] [YOUR.scala]
    上例中,我把spark-assembly*.jar和WordCount.scala放在同一目录下,所以直接用命令:
    scalac -classpath spark-assembly-1.6.0-hadoop2.7.1-U4.jar WordCount.scala
    这个时候会得到不同个数的.class文件
  3. 利用jar命令,将得到的class文件封装成为jar包
    jar cf [你要得到的jar文件] [.class文件的路径]
    上例中,class文件在同一目录下,所以命令为:
    jar cf WordCount.jar *.class

最终得到的WordCount.jar即为所要jar包,可以在spark上运行。

(上述过程中,所有文件均可以自己设定路径,命令仅为参考,更多功能请自行搜索scalac与jar命令)


在开发过程中遇到一个奇葩的问题:
Exception in thread “main” java.lang.NoSuchMethodError: scala.runtime.ObjectRef.create(Ljava/lang/Object;)Lscala/runtime/ObjectRef;
这里写图片描述
最后经过查找问题,得知是scala版本与spark-assembly的jar包中scala版本不搭导致的。
更换scala版本即可。
具体情况可以参考http://blog.sina.com.cn/s/blog_4a97c77f0102whg3.html

0 0
原创粉丝点击