利用IDEA工具编译Spark源码(1.60~2.20)

来源:互联网 发布:方正字体识别软件 编辑:程序博客网 时间:2024/06/07 02:51

为了利用IDE工具调试Spark源码,分别在macOS上搭建了Spark1.60源码调试环境,在windows下搭建了Spark2.20调试环境。利用IDE编译Spark会出现一些通识性问题,下面将针对这些问题的解决方法做详细描述(macOS与windows通用)

准备

  • IDEA 工具 https://www.jetbrains.com/idea/
  • Spark 源码 https://spark.apache.org/

编译源码

导入项目

直接利用IDEA导入Spark工程,Import Project中选择Import project from external model中的Maven

一路next到选择sdk时配置好JDK即可

配置对应版本的scala SDK

先安装scala plugin,在设置中的插件管理器中安装scala插件:

安装完成后,就需要配置对应版本的Scala SDK了。这一步非常关键,如果配置出现了偏差,会导致一堆的错误。比如对于Spark1.6.0版本,其项目名称为spark-parent_2.10则需要配置scala 2.10版本的编译器。(Spark2.20对应着Scala2.11) 具体的版本可以去参考官方文档。

配置方法如下:选择File -> Project Structure中的Global Libraries,点击+号,选择正确的scala版本,如果没有的话点击Download下载。

点击ok后选择添加到全部的modules

编译过程

在设置里面记得点上Rebuildclear project

第一次编译

第一次编译直接选择build project即可。这时候会出现第一个问题:

Spark官方文档中这么说:

“Rebuild Project” can fail the first time the project is compiled, because generate source files are not automatically generated. Try clicking the “Generate Sources and Update Folders For All Projects” button in the “Maven Projects” tool window to manually generate these sources.”

在IDEA中进行如下操作:View->Tool Windows-> Maven Projects

右边会有Maven Projects的目录栏,选择出问题的Flume Sink,右键菜单选择Generate Sources and Update Folders

第二次编译

开始Rebuild,1.60版本将直接编译成功:

而对于2.20版本可能会出现以下问题:

spark\sql\hive-thriftserver\src\main\java\org\apache\hive\service\cli\thrift\ThriftCLIService.javaError:(52, 75) not found: value TCLIServicepublic abstract class ThriftCLIService extends AbstractService implements TCLIService.Iface, Runnable {………..

针对这种情况,只用在spark\sql\hive-thriftserver\src\gen\java右键中点Mark Directory as->Sources Root即可

跑案例

先配置好要跑的WordCount,如下图设置,其中设置了本地运行,设置了WordCount的输入。

这时候会出现如下错误:

这是没找到其依赖库导致的,打开./examples/spark-examples_2.10.iml ,将中间的scope="PROVIDED"全部删除(观察了一下,默认为compile,比手动去设置里面调效率高多了)重新Build即可正确运行。

运行如下:

直接编译

如果不想用IDE配置各种编译环境,编译Spark就简单多了,编译如下:

经过一段时间的编译:

测试编译是否成功:

参考文献

https://siliconhalli.org/2017/02/09/spark-build-spark-from-source-on-windo/

https://github.com/linbojin/spark-notes/blob/master/ide-setup.md

http://chant00.com/2017/03/06/sparkSourceCompile/