分享

Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码

本帖最后由 pig2 于 2015-1-6 14:16 编辑

问题导读
1.如果出现提示内容"is waiting for .sbt.ivy.lock",该怎么办?
2.怎么解决sbt/sbt gen-idea的时候没有很好的解决依赖关系?















概要
上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅。本篇讲述如何使用intellij idea来跟踪调试spark源码。

前提
本文假设开发环境是在Linux平台,并且已经安装下列软件,我个人使用的是arch linux。
  • jdk
  • scala
  • sbt
  • intellij-idea-community-edition

安装scala插件
为idea安装scala插件,具体步骤如下
  • 选择File->Setting

171253222404168.png
     2 步骤2: 选择右侧的Install Jetbrains Plugin,在弹出窗口的左侧输入scala,然后点击安装,如下图所示

171254509431402.png
      3. scala插件安装结束,需要重启idea生效
由于idea 13已经原生支持sbt,所以无须为idea安装sbt插件。

源码下载和导入
下载源码,假设使用git同步最新的源码

  1. git clone https://github.com/apache/spark.git
复制代码


导入Spark源码
   1. 选择File->Import Project, 在弹出的窗口中指定spark源码目录

171304284748729.png
   2. 选择项目类型为sbt project,然后点击next

171304392403608.png
   3. 在新弹出的窗口中先选中"Use auto-import",然后点击Finish

171304505372157.png
导入设置完成,进入漫长的等待,idea会对导入的源码进行编译,同时会生成文件索引。

如果在提示栏出现如下的提示内容"is waiting for .sbt.ivy.lock",说明该lock文件无法创建,需要手工删除,具体操作如下

  1. cd $HOME/.ivy2
  2. rm *.lock
复制代码

手工删除掉lock之后,重启idea,重启后会继续上次没有完成的sbt过程。

源码编译
使用idea来编译spark源码,中间会有多次出错,问题的根源是sbt/sbt gen-idea的时候并没有很好的解决依赖关系。
解决办法如下,
   1. 选择File->Project Structures
   2. 在右侧dependencies中添加新的module,

171310210847537.png
选择spark-core

171310529744529.png
其它模块如streaming-twitter, streaming-kafka, streaming-flume, streaming-mqtt出错的情况解决方案与此类似。
注意Example编译报错时的处理稍有不同,在指定Dependencies的时候,不是选择Library而是选择Module dependency,在弹出的窗口中选择sql.

调试LogQuery
1. 选择Run->Edit configurations
2. 添加Application,注意右侧窗口中配置项内容的填写,分别为Main class, vm options, working directory, use classpath of module

171319444433263.png
-Dspark.master=local 指定Spark的运行模式,可根据需要作适当修改。

3. 至此,在Run菜单中可以发现有"Run LogQuery"一项存在,尝试运行,保证编译成功。

4. 断点设置,在源文件的左侧双击即可打上断点标记,然后点击Run->"Debug LogQuery", 大功告成,如下图所示,可以查看变量和调用堆栈了。

171331524127164.png

参考

相关内容


Apache Spark源码走读之1 -- Spark论文阅读笔记

Apache Spark源码走读之2 -- Job的提交与运行

Apache Spark源码走读之3-- Task运行期之函数调用关系分析

Apache Spark源码走读之4 -- DStream实时流数据处理

Apache Spark源码走读之5-- DStream处理的容错性分析

Apache Spark源码走读之6-- 存储子系统分析

Apache Spark源码走读之7 -- Standalone部署方式分析

Apache Spark源码走读之8 -- Spark on Yarn

Apache Spark源码走读之9 -- Spark源码编译

Apache Spark源码走读之10 -- 在YARN上运行SparkPi

Apache Spark源码走读之11 -- sql的解析与执行

Apache Spark源码走读之12 -- Hive on Spark运行环境搭建

Apache Spark源码走读之13 -- hiveql on spark实现详解

Apache Spark源码走读之14 -- Graphx实现剖析

Apache Spark源码走读之15 -- Standalone部署模式下的容错性分析

Apache Spark源码走读之16 -- spark repl实现详解

Apache Spark源码走读之17 -- 如何进行代码跟读


Apache Spark源码走读之19 -- standalone cluster模式下资源的申请与释放

Apache Spark源码走读之20 -- ShuffleMapTask计算结果的保存与读取

Apache Spark源码走读之21 -- WEB UI和Metrics初始化及数据更新过程分析

Apache Spark源码走读之22 -- 浅谈mllib中线性回归的算法实现

Apache Spark源码走读之23 -- Spark MLLib中拟牛顿法L-BFGS的源码实现

Apache Spark源码走读之24 -- Sort-based Shuffle的设计与实现







欢迎加入about云群90371779322273151432264021 ,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(11)人评论

跳转到指定楼层
落魂草 发表于 2015-1-3 20:08:55
回复

使用道具 举报

落魂草 发表于 2015-1-3 20:12:41
回复

使用道具 举报

Tyfunwang 发表于 2015-1-4 08:49:15
之前就是搞到要编译时出了问题,学习了。
回复

使用道具 举报

fzleejm 发表于 2015-1-4 09:29:53
之前就是搞到要编译时出了问题,学习了。
回复

使用道具 举报

355815741 发表于 2015-1-4 10:02:16
学习了,谢谢分享~
回复

使用道具 举报

june_fu 发表于 2015-3-7 19:30:36
这个系列不错
回复

使用道具 举报

邓立辉 发表于 2016-3-7 19:30:48
好贴好贴好贴好贴好贴好贴好贴好贴好贴好贴好贴好贴好贴
回复

使用道具 举报

quanxiaofei 发表于 2016-6-21 22:23:15
干货。可惜不会scala///..
回复

使用道具 举报

chyeers 发表于 2016-8-2 18:15:21
我怎么编译成java的了。。。
回复

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条