spark 源码阅读及调试环境搭建

开发工具

  • scala 2.11.8

  • jdk8

  • intellij idea 2017(scala plugin)

  • maven(3.3.9)

导入源码(多种方式):

  • 安装git 后clone 下来:git clone [email protected]:apache/spark.git

  • 或者Github上直接 down下来

maven编译

maven build:

在spark项目的根目录下执行:

$ build/mvn -T 4 -DskipTests clean package

这个要把下载的=很多的依赖,比较耗时,去泡杯枸杞茶喝喝。

试一把编译成功了

$ ./bin/spark-shell
spark 源码阅读及调试环境搭建_第1张图片
image.png

idea 中导入源码

Menu -> File -> Open -> {spark dir}/pom.xml -> Open as Project

然后会自动识别为maven的
可以试一下example包中的例子能不能跑通:
run config:
-Dspark.master=local代表使用本地模式运行Spark代码
后面一行是读取文件的绝对路径


spark 源码阅读及调试环境搭建_第2张图片
image.png

重点来了:

修改pom 依赖的scope

在spark parent及example工程pom文件中将jetty ,guava,hadoop ,scala,spark等相关依赖的scope为provided的 直接注释掉,以便于example工程中能够访问到,否则运行时报错找不到类。

scope 的compile 和provided区别如下

compile
默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。
provided
跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Servlet AP和一些Java EE APIs。这个scope 只能作用在编译和测试时,同时没有传递性。
使用这个时,不会将包打入本项目中,只是依赖过来。
使用默认或其他时,会将依赖的项目打成jar包,放入本项目的Lib里

再试下是否成功:


spark 源码阅读及调试环境搭建_第3张图片
image.png

对于idea 还有很多优化的选项,网上很多教程
对于不用每次run的时候build:https://my.oschina.net/1987times/blog/330207

你可能感兴趣的:(spark 源码阅读及调试环境搭建)