使用intellij创建一个非常简单的scala代码,为啥都会提示找不到主类?
错误: 找不到或无法加载主类 test2原因: java.lang.ClassNotFoundException: test2
原因有2种。
-
第一种,的确是没有编译成功,导致class文件没有产生,当然找不到主类。这类问题,可以通过检查target目录,以及观察build过程中的提示,来确认。例如,我用jdk9+scala 2.12来编译spark程序,结果总是提示上述错误。查了文档才发现,scala只和jdk8能正常配合工作,用 jdk9,会导致编译失败。
-
第二种,是因为classpath设置不对造成的。需要手动将工作目录设置为target目录,这样才能正确执行。 但是,这明明是低级错误,为什么还会发生?实在很难理解。
如何基于Windows 10创建Intellij + Spark开发环境 ?
-
windows 10自带Ubuntu,所以先安装Ubuntu for windows 10
-
在Ubuntu中安装spark,版本我选2.2.1,当然也可以选更高的。过程很简单,网上教程很多。需要注意2点。
-
Ubuntu的 open-ssh要重新安装,而且要把免密登录给设置好。后面脚本里都会涉及ssh登录本机的情况。
-
spark要装成standalone模式
-
-
在Ubuntu中安装hadoop,版本我选2.9.0。过程也不复杂,但是还是要注意1点。
- JAVA_HOME要手工在hadoop-daemon.sh和yarn-daemon.sh中设置。如果不设置,就会提示java_home找不到的错误。
-
上述软件包安装好之后,就可以用Intellij来开发了。也很简单,但是要注意2点。
- 向集群发布任务的时候,代码一定要写成这样.不这么写,就会报各种错。
val conf =new SparkConf().setAppName("Spark Pi").setMaster("spark://127.0.1.1:7077") .set("spark.driver.host","127.0.1.1") .setJars(List("C:\\Users\\mac\\IdeaProjects\\2018\\scalalearn\\out\\artifacts\\scalalearn_jar\\scalalearn.jar"))
- 涉及读写文件的操作,都写到hdfs上吧。写本地文件的操作,好像和standalone模式冲突,无论怎么搞都提示找不到文件。这也是为什么Ubuntu上要安装hadoop的原因。