搭建Spark源码研读和代码调试的开发环境
转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md
搭建Spark源码研读和代码调试的开发环境
工欲善其事,必先利其器,第一篇笔记介绍如何搭建源码研读和代码调试的开发环境。 一些必要的开发工具,请自行提前安装:
- scala 2.11.8
- sbt 0.13.12
- maven 3.3.9
- git 2.10.2
- IntelliJ IDEA 2016.3 (scala plugin)
本人使用macOS 10.12,所有笔记都基于这个系统,但是其他系统也可以很容易找到对应的解决方案,比如IDE的快捷键。
源码获取与编译
从Github上获取Spark源码
可以直接从Spark官方Github仓库拉取。本系列笔记基于Spark 2.1.0这个版本,所以先checkout这个tag,再进行之后的步骤:
$ git clone git@github.com:apache/spark.git
$ cd spark
$ git tag
$ git checkout v2.1.0
$ git checkout -b pin-tag-210
如果想要push自己的commits,也可以fork到自己的Github账号下,再拉取到本地,可以参考我之前的文章:Reading Spark Souce Code in IntelliJ IDEA
编译Spark项目
参考官方文档,编译很简单,这里使用4个线程,跳过tests,以此加速编译。这个编译会产生一些必要的源代码,如Catalyst项目下的,所以是必要的一步:
$ build/mvn -T 4 -DskipTests clean package
# 编译完成后,测试一下
$ ./bin/spark-shell
源码导入与代码运行
导入源码到Intellij IDEA 16
现在IDEA对scala支持已经比较完善,导入Spark工程非常简单:
Menu -> File -> Open -> {spark dir}/pom.xml -> Open as Project
运行实例代码
导入工程后,介绍一下如何运行Spark项目自带的实例代码,在{spark dir}/examples/
目录下,这里以LogQuery
为例:
command + o -> 输入LogQuery打开
1. 配置运行参数:
Menu -> Run -> Edit Configurations -> 选择 + -> Application
参数配置如下:
VM options: -Dspark.master=local
代表使用本地模式运行Spark代码,也可以选择其他模式。 保存配置后,可以看到LogQuery
在运行选项里了:
2. 添加缺失的flume sink源代码
首次运行LogQuery
会报错,因为IDE找不到flume依赖的部分源码: 解决方案如下:
Menu -> File -> Project Structure -> Modules -> spark-streaming-flume-sink_2.11 -> Sources
- 把 target目录加入Sources(点击蓝色Sources)
- 把子目录sink也加入Sources
参考下图,注意右边的Source Folders列表:
3. 添加运行依赖的jars
再次运行,这次会花费比较长的时间,因为已经可以成功编译LogQuery
啦,但是还是没能运行成功,报错如下: 不要慌,这说明你的代码编译已经成功啦,运行出错的原因是,运行Spark App一般都是通过
spark-submit
命令,把你的jar运行到已经安装的Spark环境里,也就是所有的Spark依赖都已经有啦,现在你用IDE的方式,就会缺少依赖。
解决方案如下:
Menu -> File -> Project Structure -> Modules -> spark-examples_2.11 -> Dependencies 添加依赖 jars -> {spark dir}/spark/assembly/target/scala-2.11/jars/
有两点需要注意:
- jars/*.jar: 这些依赖jars是在第一步编译打包Spark项目的时候产生的,如果这个目录是空的,或者修改了源代码想更新这些jars,可以用同样的命令再次编译Spark:
$ build/mvn -T 4 -DskipTests clean package
- 从上图中右侧的Scope一栏可以看到,基本上所有依赖jars都是Provided,也就是说默认都是提供的,因为默认都是用
spark-submit
方式运行Spark App的。
4. 成功运行实例代码
终于再次运行LogQuery
的时候,可以看到输出啦:
单步调试源代码
千辛万苦地终于让实例代码在IDE里跑起来了,是不是很有成就感。其实做了那么多的铺垫工作,在IDE里面运行代码的最大福利是可以单步调试! 很简单,选择断点,然后Run -> Debug
,可以看到中间变量值等等,其他的自行探索吧:
搭建Spark源码研读和代码调试的开发环境的更多相关文章
- jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)
不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上. 其实大家安装的jdk路径下,这 ...
- win7+idea+maven搭建spark源码阅读环境
1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...
- spark源码编译,本地调试
1.下载源码 2.进入源码根据README.md编译源码,注意使用的是源码目录下的maven编译 3.用idea导入顶层pom文件 4.修改顶层pom文件和example下的pom文件,将scope的 ...
- IDEA 搭建 Spark 源码 (Ubuntu)
版本:Spark 2.4.3/JDK 1.8/Scala 2.11.0 1.选择Spark版本.压缩包下载. 2.IDEA中左下角Terminal下输入: mvn -DskipTests clean ...
- Spark源码剖析 - SparkContext的初始化(十)_Spark环境更新
12. Spark环境更新 在SparkContext的初始化过程中,可能对其环境造成影响,所以需要更新环境,代码如下: SparkContext初始化过程中,如果设置了spark.jars属性,sp ...
- Windows上IDEA搭建最新Spark2.4.3源码调试的开发环境
相信很多同学都想通过阅读一些框架的源码,来提高自己的代码能力,但往往在第一步,搭建环境的时候就碰了壁. 本篇就来介绍下如何在Windows下,将最新版的Spark2.4.3编译,并导入到IDEA编译器 ...
- 了解Spark源码的概况
本文旨在帮助那些想要对Spark有更深入了解的工程师们,了解Spark源码的概况,搭建Spark源码阅读环境,编译.调试Spark源码,为将来更深入地学习打下基础. 一.项目结构 在大型项目中,往往涉 ...
- Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码
欢迎转载,转载请注明出处,徽沪一郎. 概要 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅.本篇讲述如何使用 ...
- Spark源码分析环境搭建
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...
随机推荐
- NodeJS学习笔记 (10)网络TCP-net(ok)
模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...
- linux指令快速复制粘贴[龟速更新中]
由于有经常碰到要输入linux指令,但是却忘记了的情况.在家里我把常用的命令放到Xshell的快速命令集,但是在很多情况下不在家,可能用的他人电脑,以及在非Win环境下使用ssh时没有xshell使用 ...
- 【J-meter】调试JDBC请求
参考资料: http://www.codesec.net/view/165234.html
- 第四讲 Yang-Mills方程与Maxwell方程
一.变分原理 变分原理始于17世纪的速降问题,也就是连接两点的曲线在有重力的情况下,让初速度为0的一小球最快地通过? 这个问题由伯努力给出解答,他的方法非常巧妙,而最后开创了一个学科——变分学.他假设 ...
- HTML学习----------DAY2第四节
HTML 文档是由 HTML 元素定义的. HTML 元素 HTML 元素指的是从开始标签(start tag)到结束标签(end tag)的所有代码. 注释:开始标签常被称为开放标签(opening ...
- Mongo集群之主从复制
上线的系统.数据存储是重要部位.若一个公司的数据库部署还是待用单点部署,那若是宕机或是机器被损坏则是多糟糕的事情呀. 主从复制的部署方式为下图 主从复制是一个简单的数据库同步备份集群技术.这样的方式简 ...
- quick 3.3载入Spine问题
近期项目要升级到Quick 3.3, 而且使用了Spine作为动画编辑器, 在此把升级过程中.有关quick 3.3 载入Spine遇到的坑在此记录一下. 1.Spine版本号问题 首先Quick 3 ...
- 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释
组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...
- 遇到 Form 性能问题怎么办 performance issue
性能问题是比較复杂的问题. 一般由performance team 负责, 可是常见的情况是, 我们 INV team 定义的 view 不好, 导致查询性能较差. 这个必须由产品组和 perform ...
- CentOS6 安装 aria2
CentOS6 安装 aria2 https://www.jianshu.com/p/31ea7aba5524 http://blog.51cto.com/skypegnu1/1637168 1.先安 ...