转载自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

  1. 把 target目录加入Sources(点击蓝色Sources)
  2. 把子目录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源码研读和代码调试的开发环境的更多相关文章

  1. jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)

    不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上.     其实大家安装的jdk路径下,这 ...

  2. win7+idea+maven搭建spark源码阅读环境

    1.参考. 利用IDEA工具编译Spark源码(1.60~2.20) https://blog.csdn.net/He11o_Liu/article/details/78739699 Maven编译打 ...

  3. spark源码编译,本地调试

    1.下载源码 2.进入源码根据README.md编译源码,注意使用的是源码目录下的maven编译 3.用idea导入顶层pom文件 4.修改顶层pom文件和example下的pom文件,将scope的 ...

  4. IDEA 搭建 Spark 源码 (Ubuntu)

    版本:Spark 2.4.3/JDK 1.8/Scala 2.11.0 1.选择Spark版本.压缩包下载. 2.IDEA中左下角Terminal下输入: mvn -DskipTests clean ...

  5. Spark源码剖析 - SparkContext的初始化(十)_Spark环境更新

    12. Spark环境更新 在SparkContext的初始化过程中,可能对其环境造成影响,所以需要更新环境,代码如下: SparkContext初始化过程中,如果设置了spark.jars属性,sp ...

  6. Windows上IDEA搭建最新Spark2.4.3源码调试的开发环境

    相信很多同学都想通过阅读一些框架的源码,来提高自己的代码能力,但往往在第一步,搭建环境的时候就碰了壁. 本篇就来介绍下如何在Windows下,将最新版的Spark2.4.3编译,并导入到IDEA编译器 ...

  7. 了解Spark源码的概况

    本文旨在帮助那些想要对Spark有更深入了解的工程师们,了解Spark源码的概况,搭建Spark源码阅读环境,编译.调试Spark源码,为将来更深入地学习打下基础. 一.项目结构 在大型项目中,往往涉 ...

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

    欢迎转载,转载请注明出处,徽沪一郎. 概要 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅.本篇讲述如何使用 ...

  9. Spark源码分析环境搭建

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...

随机推荐

  1. hadoop ha

    https://blog.csdn.net/daydayup_668819/article/details/70815335 https://www.jianshu.com/p/8a6cc2d7206 ...

  2. JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat(复制)

    jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程 ...

  3. ES6学习笔记(十九)Module 的语法-export和import

    1.概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的require.Pyt ...

  4. BZOJ——T 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛

    http://www.lydsy.com/JudgeOnline/problem.php?id=1612 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1 ...

  5. Strom 简介,ppt

          数据的生成可以看做一连串发生的离散事件, 这些事件流会伴随着不同的数据流.操作和分析,都会由一个通用的软件框架和基础设施来处理.     Storm 是 实时流计算框架之一.它提供了可容错 ...

  6. DICOM:Transfer Syntax传输语义之奇葩GE Private TS

    背景: 专栏之前对Transfer Syntax(暂定中文翻译为传输语义,8月初博客中提到的DICOM3.0标准中文版开源书籍计划顺利启动.兴许会面临诸多专有名词的翻译工作,欢迎广大博友提意见)进行过 ...

  7. android-Animation进阶(创造用户舒服的动画)

    android中经常使用的动画有Animation ,Animator两种; ---第1种经常使用的是使用在Activity切换中.比方打开一个Activity.关闭一个Activity 个人比較喜欢 ...

  8. android ViewPager实现 跑马灯切换图片+多种切换动画

    近期在弄个项目.要求有跑马灯效果的图片展示. 网上搜了一堆,都没有完美实现的算了还是自己写吧! 实现原理利用 ViewPager 控件,这个控件本身就支持滑动翻页非常好非常强大好多功能都能用上它.利用 ...

  9. 算法导论————EXKMP

    [例题传送门:caioj1461] [EXKMP]最长共同前缀长度 [题意]给出模板串A和子串B,长度分别为lenA和lenB,要求在线性时间内,对于每个A[i](1<=i<=lenA), ...

  10. thinkphp使后台的字体图标显示异常

    thinkphp使后台的字体图标显示异常 相似问题 1.thinkPHP的这些图标都不显示了-CSDN论坛https://bbs.csdn.net/topics/391823415 解答: 发现在别的 ...