欢迎转载,转载请注明出处,徽沪一郎。html
上篇博文讲述了如何经过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都须要编译,花费的时间很多,效率不高,并且属于侵入性的修改,不优雅。本篇讲述如何使用intellij idea来跟踪调试spark源码。linux
本文假设开发环境是在Linux平台,而且已经安装下列软件,我我的使用的是arch linux。git
为idea安装scala插件,具体步骤以下github
2 步骤2: 选择右侧的Install Jetbrains Plugin,在弹出窗口的左侧输入scala,而后点击安装,以下图所示sql
3. scala插件安装结束,须要重启idea生效apache
因为idea 13已经原生支持sbt,因此无须为idea安装sbt插件。bash
下载源码,假设使用git同步最新的源码intellij-idea
git clone https://github.com/apache/spark.git
导入Spark源码ide
1. 选择File->Import Project, 在弹出的窗口中指定spark源码目录idea
2. 选择项目类型为sbt project,而后点击next
3. 在新弹出的窗口中先选中"Use auto-import",而后点击Finish
导入设置完成,进入漫长的等待,idea会对导入的源码进行编译,同时会生成文件索引。
若是在提示栏出现以下的提示内容"is waiting for .sbt.ivy.lock",说明该lock文件没法建立,须要手工删除,具体操做以下
cd $HOME/.ivy2 rm *.lock
手工删除掉lock以后,重启idea,重启后会继续上次没有完成的sbt过程。
使用idea来编译spark源码,中间会有屡次出错,问题的根源是sbt/sbt gen-idea的时候并无很好的解决依赖关系。
解决办法以下,
1. 选择File->Project Structures
2. 在右侧dependencies中添加新的module,
选择spark-core
其它模块如streaming-twitter, streaming-kafka, streaming-flume, streaming-mqtt出错的状况解决方案与此相似。
注意Example编译报错时的处理稍有不一样,在指定Dependencies的时候,不是选择Library而是选择Module dependency,在弹出的窗口中选择sql.
有关编译出错问题的解决能够看一下这个连接,http://apache-spark-user-list.1001560.n3.nabble.com/Errors-occurred-while-compiling-module-spark-streaming-zeromq-IntelliJ-IDEA-13-0-2-td1282.html
1. 选择Run->Edit configurations
2. 添加Application,注意右侧窗口中配置项内容的填写,分别为Main class, vm options, working directory, use classpath of module
-Dspark.master=local 指定Spark的运行模式,可根据须要做适当修改。
3. 至此,在Run菜单中能够发现有"Run LogQuery"一项存在,尝试运行,保证编译成功。
4. 断点设置,在源文件的左侧双击便可打上断点标记,而后点击Run->"Debug LogQuery", 大功告成,以下图所示,能够查看变量和调用堆栈了。
参考