Spark 源码和应用开发环境的构建
引言
Spark 现在无疑是大数据领域最热门的技术之一,读者很容易搜索到介绍如何应用 Spark 技术的文章,但是作为开发人员,在了解了应用的概念之后,更习惯的是打开开发环境,开发一些应用来更深入的学习 spark 知识,在遇到问题的时候,也希望能够深入调试 Spark 源代码来解决问题。但是由于 Spark 技术本身较新,对于初学者,在构建开发调试环境的过程中,总会遇到这样那样的问题。而其使用的 Scala 语言,SBT 构建工具相对于 Java 语言,Maven 构建工具而言,也比较小众,因些在 Web 上能够参考的信息相对也比较少。本文结合作者的实践,从 Spark 的源码开始编译整个项目,同时给出了一些在编译过程中可能出现的问题,供使用参考。文中各步骤展示的编译方法主要用于方便学习 Spark 源码,若仅需要编写 Spark 应用则不需要如此繁复的流程,具体引用方法可参考最后一章。
环境要求
- 系统:Windows/Linux/Mac OS
- IDE:Eclipse/IntelliJ
- 其他依赖:Scala,Sbt,Maven
Eclipse 下开发调试环境的配置
该小节中使用的各项工具分别为:Windows 7+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven3.3.3,测试的 Spark 版本为 1.4.0。
1.配置 IDE:
如图 1 所示,选择菜单项 Help->Install new software,添加站点 http://download.scala-ide.org/sdk/lithium/e44/scala211/stable/site,选择安装 Scala IDE for Eclipse 以及 Scala IDE Plugins。
图 1. 配置 IDE
对于标准版 Eclipse,还需要安装单独的 Maven 插件。
出于配置简便考虑,也可以使用 Scala 官方提供的已将所有依赖打包好的 Scala IDE。
特别的,由于项目本身存在一些错误,请先暂时关闭 Project->Build Automatically 的功能以节省时间。
2.下载 Spark 源代码:
创建空目录,执行如下语句:git clone https://github.com/apache/spark.git
除了使用 git 指令之外,也可以从 Spark 的 Github 页面下载打包好的源代码。
3.将源码转化为 Eclipse 项目:
进入源代码根目录,执行如下语句:sbt eclipse。Sbt 执行期间会下载 Spark 所需要的所有 jar 包,因此该步骤会花费很长的时间。其中有一些 jar 包需要使用网络代理等方法才能下载。执行成功之后会有如图 2 的输出。
图 2. 转化为 Eclipse 项目
4.导入项目至 Eclipse:
选择菜单项 File->Import,并选择 General->Existing Projects into Workspace,项目的根路径选择源代码的根路径,导入所有项目(共有 25 个)。
5.修改 Scala 版本:
进入 Preference->Scala->Installations,添加机器上安装的 Scala 2.10.4(选择 lib 目录)。由于该版本 Spark(1.4.0)是在 Scala 2.10.4 的环境下编写的,需要在 Eclipse 中修改项目使用的 Scala 版本。方法为:全选项目,右键选择 Scala->Set the Scala Installation 并选择相应的 Scala 版本。如图 3 所示。
图 3. 修改 Scala 版本
6.为 old-deps 项目添加 Scala Library:
右键选择 old-deps 项目,选择 Scala->Add Scala Library to Build Path。
7.Maven install 以生成 spark-streaming-flume-sink 所需要的类:
首先将源代码根目录中的 scalastyle-config.xml 文件复制到 spark-streaming-flume-sink 项目根目录中,而后在 Eclipse 中打开该项目,右键选择 pom.xml 文件,选择 Run as->Maven install。如图 4 所示。
图 4.Maven install
运行成功之后 console 会输出如图 5 内容。
图 5.Maven install 成功
8.修改 spark-sql 与 spark-hive 的包错误:
由于源代码的包设置有错误,为此需要将类文件移至正确的包中。如图 6 所示。
图 6. 修改包错误
对于 spark-sql 项目,分别选择 src/test/java 中的 test.org.apache.spark.sql 以及 test.org.apache.spark.sql.sources 包中的所有类,右键选择 Refactor->Move,移动至 org.apache.spark.sql 以及 org.apache.spark.sql.sources 包。
对于 spark-hive 项目,分别选择 src/test/java 中的 test.org.apache.spark.sql.hive 以及 test.org.apache.spark.sql.hive.execution 包中的所有类,移动至 org.apache.spark.sql.hive 以及 org.apache.spark.sql.hive.execution 包。
9.编译所有项目:
打开 Project->Build Automatically 功能,等待所有项目编译成功。
10.检查是否安装成功:
将 core 项目中的 src->main->resources->org 文件夹拷贝到 examples 项目中的 target->scala-2.10->classes 中。而后执行 examples 项目中的 org.apache.spark.examples.SparkPi 程序,并设置其 jvm 参数为-Dspark.master=local,若最后输出如图 7 结果则说明安装成功。
图 7.SparkPi 运行结果
可能遇到的问题(Eclipse)
1.Scala version 错误:
若已将 scala version 设置为 2.10.4 仍发生版本错误,可以尝试 Project->Clean 以重新编译该项目。
2.spark-catalyst 错误:
该错误为编码原因导致,将 Workspace 的编码设置为 UTF-8 即可。如图 8 所示。
图 8. 设置 Workspace 编码
3.spark-sql 及 spark-hive source not found 错误:
可以尝试 Project->Clean 以重新编译。
IntelliJ 下开发调试环境的配置
该小节中使用的各项工具分别为:Windows 7+IntelliJ IDEA Ultimate 14.1.3+Scala 2.10.4+Sbt 0.13.8+Maven3.3.3,测试的 Spark 版本为 1.4.0。
1.导入项目:
开启 IntelliJ 之后选择 Import Project,如图 9 所示。
图 9. 选择 Import Project
而后选择 Spark 源代码根目录,并将其导入为 SBT 项目,如图 10 所示。
图 10. 作为 SBT 项目导入
在之后的过程中 SBT 过程将会自动进行,下载作为依赖的 jar 包,期间需要使用 vpn 等方式以完成下载。
2.执行 Maven install:
如图 11,在 IntelliJ 的 Maven view 中导入源代码根目录中的 pom.xml 文件,而后在 Maven view 中选择 spark-streaming-flume-sink 项目中的 install 并执行。
图 11. 导入 pom.xml
3.修改 spark-sql 与 spark-hive 的包错误:
与 Eclipse 的步骤同理,对于 spark-sql 项目,分别选择 src/test/java 中的 test.org.apache.spark.sql 以及 test.org.apache.spark.sql.sources 包中的所有类,右键选择 Refactor->Move,移动至 org.apache.spark.sql 以及 org.apache.spark.sql.sources 包。
对于 spark-hive 项目,分别选择 src/test/java 中的 test.org.apache.spark.sql.hive 以及 test.org.apache.spark.sql.hive.execution 包中的所有类,移动至 org.apache.spark.sql.hive 以及 org.apache.spark.sql.hive.execution 包。
4.测试 SparkPi:
执行 examples 项目中的 org.apache.spark.examples.SparkPi 程序,并设置其 jvm 参数为-Dspark.master=local,若最后输出如图 12 结果则说明安装成功。
图 12.SparkPi 运行结果
可能遇到的问题(IntelliJ)
1.运行 SparkPi 时出现 TestSQLContext 的 Assertion 错误:
有可能是由于 Build 不完全导致的,选择 Build->Rebuild Project 即可。
2.运行 SparkPi 时出现 NoClassDefFoundError:
右键点击 examples 项目,选择 Open Module Settings,打开 dependencies 标签页,添加下述目录:network/shuffle/target/scala-2.10/classes, network/common/target/scala-2.10/classes, unsafe/target/scala-2.10/classes。
其他引用方法
如引言所述,在编写 Spark 应用时一般不会从源码编译开始,实际过程中我们可以采用如下两种方法来引用 Spark 类库:
- 在项目的 classpath 中添加 spark-assembly.jar,而后则按照正常的开发流程使用 Spark。
- 项目转换为 Maven 项目,并向其 pom.xml 文件中加入如下依赖即可使用 spark 核心包:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.4.0</version>
</dependency>
如果要使用其余的 Spark 包(如 MLlib),可以通过查询 Spark 的 Maven repository 获取依赖名并加入 pom.xml。
结束语
本文介绍了常用开发工具环境中如何快速构建 Spark 源代码和搭建应用的开发调试环境,使读者能够避免构建开发调试环境中的各种问题从而专注深入的研究 Spark 的核心技术。在此基础下,笔者还会在后续的文章中结合 Spark 的应用示例分析来帮助读者快速的理解和应用 Spark Stream,Spark Graphx,Spark MLlib 等组件。
本文来自:https://www.ibm.com/developerworks/cn/opensource/os-cn-spark-build/#ibm-pcon
参考资料
学习
- Useful Developer Tools: Spark 工具配置。
- 查看Scala 官网,了解更多关于 Scala 语言的内容。
- 查看SBT官网,了解更多关于 SBT 工具的内容。
- 查看Maven官网,了解更多关于 Maven 的内容。
- 查看Scala-IDE官网,了解更多关于 Scala-IDE 的内容。
- Spark Maven repository: Spark Maven 资源库。
- developerWorks 开源技术主题:查找丰富的操作信息、工具和项目更新,帮助您掌握开源技术并将其用于 IBM 产品。
讨论
- 加入 developerWorks 中文社区,查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
Spark 源码和应用开发环境的构建的更多相关文章
- Windows上IDEA搭建最新Spark2.4.3源码调试的开发环境
相信很多同学都想通过阅读一些框架的源码,来提高自己的代码能力,但往往在第一步,搭建环境的时候就碰了壁. 本篇就来介绍下如何在Windows下,将最新版的Spark2.4.3编译,并导入到IDEA编译器 ...
- odoo10源码win系统开发环境安装图文教程
前言 odoo10的源码安装教程不太完整或对新手不够友好,本新手再次整合出一份友好的新手教程(老鸟慎入) 准备工作 一个干净的window系统(事先没有其他python环境的系统)如果怕系统污染可以先 ...
- 搭建Spark源码研读和代码调试的开发环境
转载自https://github.com/linbojin/spark-notes/blob/master/ide-setup.md 搭建Spark源码研读和代码调试的开发环境 工欲善其事,必先利其 ...
- emacs+ensime+sbt打造spark源码阅读环境
欢迎转载,转载请注明出处,徽沪一郎. 概述 Scala越来越流行, Spark也愈来愈红火, 对spark的代码进行走读也成了一个很普遍的行为.不巧的是,当前java社区中很流行的ide如eclips ...
- Spark源码分析环境搭建
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3868718.html 本文主要分享一下如何构建Spark源码分析环境.以前主要使用eclipse来阅读源 ...
- Spark源码剖析 - SparkContext的初始化(二)_创建执行环境SparkEnv
2. 创建执行环境SparkEnv SparkEnv是Spark的执行环境对象,其中包括众多与Executor执行相关的对象.由于在local模式下Driver会创建Executor,local-cl ...
- window环境下使用sbt编译spark源码
前些天用maven编译打包spark,搞得焦头烂额的,各种错误,层出不穷,想想也是醉了,于是乎,换种方式,使用sbt编译,看看人品如何! 首先,从官网spark官网下载spark源码包,解压出来.我这 ...
- 编译spark源码及塔建源码阅读环境
编译spark源码及塔建源码阅读环境 (一),编译spark源码 1,更换maven的下载镜像: <mirrors> <!-- 阿里云仓库 --> <mirror> ...
- idea下关联spark源码环境(转)
0.环境: java 1.8 scala 2.11.8 maven 3.5.0 idea 2017 spark 2.2.0 1完成以下配置 java环境变量 scala环境变量 maven setti ...
随机推荐
- Android通讯-webSocket
概述 上一篇简单的认识了Socket以及他的使用,在学习过程中看到了WebSocket的身影,于是乎百度了一把,这货也可以做全双工的网络通讯,而且是html5提出来的新东西!程序员嘛!就是要对新的东西 ...
- WebLogic服务器
WebLogic是美国Oracle公司出品的一个application server确切的说是一个基于JAVAEE架构的中间件,BEA WebLogic是用于开发.集成.部署和管理大型分布式Web应用 ...
- Flask+uwsgi+Nginx+Ubuntu部署教程
学习 Flask,写完一个 Flask 应用需要部署的时候,就想着折腾自己的服务器.根据搜索的教程照做,对于原理一知半解,磕磕碰碰,只要运行起来了,谢天谢地然后不再折腾了,到下一次还需要部署时,这样的 ...
- [转]Java Jacob操作Excel
Jacob项目:https://sourceforge.net/projects/jacob-project/ 转自:https://blog.csdn.net/ZY_extreme/article/ ...
- R语言与概率统计(一) 描述性统计分析
#查看已安装的包,查看已载入的包,查看包的介绍 ########例题3.1 #向量的输入方法 w<-c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 6 ...
- 树莓派-Ubuntu Mate开启ssh服务
1. 运行 apt search openssh-server 查看是否安装ssh服务. 2. 如已安装,运行 sudo dpkg-reconfigure openssh-server 重新配置shh ...
- HBuilder X 中使用模拟器进行App开发
第一步:下载HBuilder X(建议下载开发版) 第二步:下载个模拟器,我这里使用的是(MuMu模拟器) 第三步:在HBuilder X 中新建一个项目 然后,打开模拟器 如果 HBuilder x ...
- Spark在Windows上调试
1. 背景 (1) spark的一般开发与运行流程是在本地Idea或Eclipse中写好对应的spark代码,然后打包部署至驱动节点,然后运行spark-submit.然而,当运行时异常,如空指针或数 ...
- ASP.NET Core 入门笔记7,ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- GitHub项目精选(持续更新)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190815110442972.jpg?x-oss-process=image/watermark,type_Zm ...