分享

scala 代码编译出多个class 分别有什么作用?

菜菜鸟 发表于 2016-4-28 20:14:39 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 12398
各位大牛,我刚开始学 scala,写了一个小程序 App.scala,然后编译,产生了三个文件:
MyApp.class
MyApp$.class
MyApp$$anonfun$1.class
有没有大牛可以解释一下,分别是什么?(它们是在同一个目录下的)
然后让我崩溃的是,我把这个小程序构建出来的 jar 包用 spark-submit 命令提交到集群去执行,就报错了:
16/04/28 19:52:53 INFO storage.BlockManagerInfo: Added broadcast_1_piece0 in memory on redis03:37817 (size: 2.4 KB, free: 1247.6 MB)16/04/28 19:52:53 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, redis03): java.lang.ClassNotFoundException: me.May.myapp.MyApp$$anonfun$1        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)        at java.security.AccessController.doPrivileged(Native Method)        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)        at java.lang.Class.forName0(Native Method)        at java.lang.Class.forName(Class.java:274)        at org.apache.spark.serializer.JavaDeserializationStream$$anon$1.resolveClass(JavaSerializer.scala:68)        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612)        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517)        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1990)        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1915)        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)        at org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:76)        at org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:115)        at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:61)        at org.apache.spark.scheduler.Task.run(Task.scala:89)        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)        at java.lang.Thread.run(Thread.java:745)
scala 版本是 2.10.6,spark 版本是 1.6.1。百度完全找不到相关的内容,救命啊~!

已有(4)人评论

跳转到指定楼层
when30 发表于 2016-4-28 20:45:44
.class是编译生成的文件,我们的所有的程序,最终都会被翻译成二进制来执行。所以Scala也是,编译的目的,去除语法错误,生成机器能阅读的代码。
对于class找不到,分为很多种
比如你的
包路径+类名(如cn.com.factory.GifReader)写错了。或则一些没有引用到等等。都需要注意。


回复

使用道具 举报

when30 发表于 2016-4-28 20:47:41
楼主需要一些底子,这里有Scala视频,先看看
链接:http://pan.baidu.com/s/154qDK 密码:wibo

scala入门视频【限时下载】
http://www.aboutyun.com/forum.php?mod=viewthread&tid=12434


回复

使用道具 举报

菜菜鸟 发表于 2016-4-28 20:55:21
谢谢!!
我会好好学习的~~
不过我刚刚灵机一动地改了一下 spark-submit 的参数,就成功了!
--master yarn-cluster 改成:--master yarn-client
不过还是不太明白内中原理,明白了之后,再来更新~~~
回复

使用道具 举报

wscl1213 发表于 2016-4-28 21:46:11
spark on yarn有两种部署方式。
楼主的应该是client的方式,使用cluster方式可能就不识别了


推荐参考
Spark on YARN两种模式作业运行全过程分析
http://www.aboutyun.com/forum.php?mod=viewthread&tid=18060


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条