Spark2.2.0源码构建阅读

源码下载

源码获取有两种渠道:一种是通过Spark官网直接下载,第二种是通过github直接将spark的代码clone下来。
官网地址:https://d3kbcqa49mib13.cloudfront.net/spark-2.2.0.tgz
github地址:https://github.com/apache/spark/tree/branch-2.2
解压后目录:

解压目录

源码编译

工具 版本
maven 3.3.9+
jdk 8+

设置maven内存

<pre>
export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"
</pre>

如果不调大maven内存,有可能会报:
<pre>

[INFO] Compiling 203 Scala sources and 9 Java sources to /Users/me/Development/spark/core/target/scala-2.11/classes...
[ERROR] Java heap space -> [Help 1]
</pre>

Maven源码编译

自动化构建

在源码build目录下面有一个maven的独立安装脚本,这样能够帮助你轻松构建源码,这个脚本会自动下载和安装所有必须的构建要求。
<pre>
./build/mvn -DskipTests clean package
</pre>

指定Hadoop版本

可以通过hadoop.version指定Hadoop版本,如果未设置则采用默认的2.6.x版本,如果yarn的版本与Hadoop不一致,可以使用yarn.version来指定版本。
<pre>
./build/mvn -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.3 -DskipTests clean package
</pre>

Hive和JDBC支持

Hive默认版本是1.2.1
<pre>

With Hive 1.2.1 support

./build/mvn -Pyarn -Phive -Phive-thriftserver -DskipTests clean package
</pre>

使用Mesos

如果使用Mesos作为资源管理容器,可以指定mesos:
<pre>
./build/mvn -Pmesos -DskipTests clean package
</pre>

单独构建子模块

如果想要单独构建子模块,可以是使用maven的-pl参数。spark-streaming_2.11是其maven坐标的artifactId,定义在streaming/pom.xml中。
<pre>
./build/mvn -pl :spark-streaming_2.11 clean install
</pre>

SBT源码编译

官方推荐打包使用maven来构建,但因为SBT支持日常的开发,所以它能够更快速的迭代编译。
<pre>
./build/sbt package
</pre>

编译完成

源码编译

IDEA导入源码

Rebuild Project

打开idea后,open之前刚才编译好的目录,需要做一些额外的操作,否则Rebuild Project会失败。

1、点击File→Project Structure->Model->spark-streaming-flume-sink_2.11,右键target目录取消Exclude。

target取消Exclude

2、当前target->scala-2.11->src_managed->main→compiled_avro右键标记为Source目录。
3、Build->Rebuild Project 项目即可

环境配置

Spark的配置都在conf目录下面,可以将spark-env.sh.template复制一份spark-env.sh,进行相应的配置(直接运行可skip)。

Spark运行

sbin/start-master.sh
sbin/start-slave.sh spark://{localhost}:7077{localhost}为你主机,如果不知道可以查看master的打印日志,会将其打印出来。
检查WebUI:http://localhost:8080/

webUI

运行作业:bin/run-example SparkPi
Pi is roughly 3.1471357356786784
ok搭建完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容