Windows下从源代码构建Spark

综述

其实Spark的构建已经做得很好了,但是由于大家已知的原因,很多东西不能很顺利的拿到。估计你要给老外说花了很多时间在build Spark上面,他只有一个反应“unbelievable”。

在这里特别要感谢一下OSChina,它的Maven库的存在,使得在国内从源代码构建Spark成为可能。

没想到OS China 关闭了了,但是Ali又站了出来。为阿里点个赞!

如果碰到什么问题的话,是这篇文章没有覆盖到的话,请大家给我简信或者留言。我会尽自己所能给大家解决。

下面开始言归正传。

1,所需软件

下面的软件安装完成之后,都确保路径添加到系统环境变量PATH里面去了。

检查方法:设置好之后,启动windows cmd, 敲入命令,看看能不能找到。
Scala: scala -version
SBT: sbt -version
Maven: mvn -version
Git: git --version

  • Scala
    最新的版本是2.11.7,我下载的是2.10.6. Spark 最新的稳定版1.5.2使用的是Scala 2.10

  • Java
    本文中使用的是Java SE 7u 79,也就是大家“1.7”。

  • SBT
    Spark 用Maven和SBT都可以编译。个人建议:在IDE里面,还是使用SBT比较好。

  • Maven
    SBT可以重用Maven的依赖库。我们使用Maven,可以方便地从OSChina下载Spark需要的相关依赖。
    在Maven的安装目录之下,conf文件下面有个settings.xml文件,备份一下这个文件,然后对着下面进行修改。修改的主要目的是添加OSChina的镜像进来。
    <mirrors>
    <mirror>
    <id>nexus-osc</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus osc</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
    </mirrors>

  • Git
    Git可以用来下载Spark源代码,在用SBT或者Maven编译的过程中,也需要Git去从Github下载一些依赖的东西。

  • Intellij IDEA
    一般简称为IDEA,本文中使用的是最新的15.0.1。作为一个商业软件,它很有良心的推出了完全免费的Community Edition版本,完全可以满足我们的需求。

关于IDE的选择,一开始我使用的Scala-IDE,占用内存太多。设置了两个断点就慢的不行,基本没有办法单步调试。
尝试IDEA之后,毫不犹豫地抛弃了Scala-IDE.
IDEA优点如下:

  • 界面更精简
  • 运行期间占用内存小
  • 切换到SBT之后,编译速度快。
  • 支持更好。毕竟是商业软件,一般问题都可以从官方的网站,论坛里面找到解决方案。

本文中使用的具体版本:

  C:\Users\spark>scala -version
   Scala code runner version 2.10.6 -- Copyright 2002-2013, LAMP/EPFL

  C:\Users\spark>java -version
  java version "1.7.0_79"
  Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
  Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

  C:\Users\spark>sbt -version
  [info] Set current project to km (in build file:/C:/Work/Code/ACE/3.0/km/)
  [warn] The `-` command is deprecated in favor of `onFailure` and will be removed in 0.14.0

  C:\Users\spark>mvn -version
  Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
  Maven home: C:\Program Files\apache-maven-3.3.3\bin\..
  Java version: 1.7.0_79, vendor: Oracle Corporation
  Java home: C:\Program Files\Java\jdk1.7.0_79\jre
  Default locale: en_US, platform encoding: GBK
  OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

  C:\Users\spark>git --version
  git version 2.6.3.windows.1

2,配置步骤

2.1 使用git下载源代码

# Master development branch
git clone git://github.com/apache/spark.git

# 1.5 maintenance branch with stability fixes on top of Spark 1.5.2(本文中使用的)
git clone git://github.com/apache/spark.git -b branch-1.5

2.2 利用Maven 编译Spark 源代码

步骤如下:

C:\Users\spark>set MAVEN_OPTS=-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
C:\Users\spark>mvn -DskipTests clean package

编译中需要下载很多东西,耐心等候。成功之后:

 [INFO] Spark Project Parent POM ........................... SUCCESS [ 29.999 s]
 [INFO] Spark Project Test Tags ............................ SUCCESS [ 19.688 s]
 [INFO] Spark Project Launcher ............................. SUCCESS [ 29.203 s]
 [INFO] Spark Project Networking ........................... SUCCESS [ 22.105 s]
 [INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 13.525 s]
 [INFO] Spark Project Unsafe ............................... SUCCESS [ 37.206 s]
 [INFO] Spark Project Core ................................. SUCCESS [07:42 min]
 [INFO] Spark Project Bagel ................................ SUCCESS [ 18.502 s]
 [INFO] Spark Project GraphX ............................... SUCCESS [01:20 min]
 [INFO] Spark Project Streaming ............................ SUCCESS [02:38 min]
 [INFO] Spark Project Catalyst ............................. SUCCESS [04:11 min]
 [INFO] Spark Project SQL .................................. SUCCESS [04:59 min]
 [INFO] Spark Project ML Library ........................... SUCCESS [04:58 min]
 [INFO] Spark Project Tools ................................ SUCCESS [ 16.661 s]
 [INFO] Spark Project Hive ................................. SUCCESS [05:56 min]
 [INFO] Spark Project REPL ................................. SUCCESS [ 56.534 s]
 [INFO] Spark Project Assembly ............................. SUCCESS [02:35 min]
 [INFO] Spark Project External Twitter ..................... SUCCESS [ 34.803 s]
 [INFO] Spark Project External Flume Sink .................. SUCCESS [ 27.097 s]
 [INFO] Spark Project External Flume ....................... SUCCESS [ 40.341 s]
 [INFO] Spark Project External Flume Assembly .............. SUCCESS [  5.210 s]
 [INFO] Spark Project External MQTT ........................ SUCCESS [01:00 min]
 [INFO] Spark Project External MQTT Assembly ............... SUCCESS [ 29.437 s]
 [INFO] Spark Project External ZeroMQ ...................... SUCCESS [01:06 min]
 [INFO] Spark Project External Kafka ....................... SUCCESS [01:03 min]
 [INFO] Spark Project Examples ............................. SUCCESS [04:33 min]
 [INFO] Spark Project External Kafka Assembly .............. SUCCESS [ 11.513 s]
 [INFO] ------------------------------------------------------------------------
 [INFO] BUILD SUCCESS
 [INFO] ------------------------------------------------------------------------
 [INFO] Total time: 48:43 min
 [INFO] Finished at: 2015-11-18T14:04:25+08:00
 [INFO] Final Memory: 395M/1591M
 [INFO] ------------------------------------------------------------------------

2.3 安装和配置IDEA

安装好IDEA之后,还需要下面这些步骤。

a 安装Scala插件。

File-->Settings-->Plugins-->Install JetBrains plugin

  • 搜索scala,选择Download and Install.
  • 安装完成之后,重启IDEA。

b 配置SBT

File-->Build,Execution,Deployment-->Build Tools-->SBT

  • JVM-->Custom
    选择你自己的Java 安装目录
  • Launcher(sbt-launch.jar)-->Custom
    选择你自己的sbt-launch.jar

c 配置Maven

File-->Build,Execution,Deployment-->Build Tools-->Maven

  • 修改Maven home directory, 设置成你的安装目录
  • 修改User settings file,设置成你的安装目录下面conf中settings.xml

File-->Build,Execution,Deployment-->Build Tools-->Maven-->Runner

  • VM Options 加入如下参数

    -Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m
    
  • JRE
    设置成自己想要的Java版本

d 配置Scala

File-->Settings-->Build,Execution,Deployment-->Compiler-->Scala Compiler

  • Incrementality type
    设置成SBT.

File-->Settings-->Languages & Frameworks-->Scala Compile Server

  • 选中 Use external compile server for scala
  • JVM SDK 设置成自己需要的。

2.4 在IDEA编译源代码

a 导入代码

File-->New-->Project From Existing Source-->选择你自己的Spark目录-->Import project from external model-->Maven ,然后一路Next,耐心等待一切完成。

b 编译源代码

Build-->Make Project 或者* Ctrl + F9*

c Compilation completed successfully

开始你的Spark之旅吧!

2.5 可能遇到的问题

  • not found: type SparkFlumeProtocol

View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->Spark Project External Flume Sink-->LifeCycle-->Install-->右键Maven build
或者
View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->Spark Project External Flume Sink-->右键 Generate Sources and Update Folders

原因:EventBatch.java,SparkFlumeProtocol.java 和 SparkSinkEvent.java是由maven的avro 插件在build过程中间生成的。

  • 如果那个Module出现java.lang.NoClassDefFoundError

Project Structure-->Modules-->对应的Module-->Dependencies-->Scope, 从provided 改为compile

  • Error:scalac:

View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->选中出问题的模块-->Lifecycle-->clean-->右键Run Maven Build
然后Ctrl + F9

  • error java invalid source release 1.8 in intellij

问题出在Java8 Tests 这个模块,主要用来测试Java8的。如果你用的是java 1.8,应该不会碰到这个问题。
1.7的话,很简单,直接忽略掉这个Project就可以了。
View-->Tool Windows-->Maven Projects-->Reimport All Maven Projects-->Spark Project Java8 Tests POM-->右键Ignore projects

3,参考

感谢下面的这些作者的创作和分享,他们的文章给了我很多的帮助。自己写过一篇之后,才知道写文章是一件多么不容易的事情。正因为如此,他们的无私奉献才更显珍贵。
Build Spark-1.4.1 on Linux with Scala 2.10.5
spark-1.4.1源码Intellij IDEA编译错误TestSQLContext.scala assertion failed
Windows 下搭建 Spark 源代码阅读环境
【Spark十五】Intellj Idea搭建Spark源代码开发环境
Spark 源码和应用开发环境的构建
Spark Build Spark
IntelliJ IDEA 15.0 Help
import Spark source code into intellj, build Error: not found: type SparkFlumeProtocol and EventBatch
IntelliJ Runtime error

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容