Spark源码编译教程

一、背景

从Spark官网https://spark.apache.org/ 下载的预编译版本的Spark,受到诸多限制:

1. 比如我们生产环境使用的Hadoop是CDH版本,那么从官网下载的预编译版本就不能使用;

2. 为了兼容Spark新特性,生产环境只升级了HDFS组件,那么预编译版本也不能使用;

因此,为了更好的兼容生产环境中大数据生态组件,我们必须学会如何编译Spark源码。

二、前置条件

1. 官网下载Spark源码

2. 查看官方文档,确定前置条件

Spark2.2.0版本文档地址:https://spark.apache.org/docs/2.2.0/ 

根据需要编译的Spark版本,查看对应到官网文档,里面有必备的条件,比如本文的:

条件1:Maven 3.3.9 版本及以上

条件2:Java 8 版本及以上

3. Maven配置文件增加阿里镜像

进到Maven的安装路径,有个conf文件夹,找到settings.xml 文件,在<mirrors>标签下增加如下内容:

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>

4. 解压源码并修改pom.xml文件

tar -zxvf spark-2.2.0.tgz -C ./

解压后,得到 spark-2.2.0 文件夹。

由于本文需要编译的Hadoop版本是2.6.0-CDH5.7.0版本,编译过程中需要下载CDH相关的包,因此在pom文件需要添加cloudera仓库。

<repository>
    <id>cloudera</id>
    <name>cloudera Repository</name>
    <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>

 

三、编译步骤

官网里介绍了两种编译方式,一是mvn,另外是 make-distribution.sh;下面分别介绍具体实现。

3.1 Apache Maven

1. 设置Maven的工作使用内存

export MAVEN_OPTS="-Xmx2g -XX:ReservedCodeCacheSize=512m"

不设置会报以下错误:

[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]

2. build/mvn

进到解压后源码文件夹下,执行如下命令:

./build/mvn -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.7.0 -DskipTests clean package

 

3.2 Building a Runnable Distribution

编译成可部署在分布式系统上的可执行版本,方便后续安装,这种方法是本文推荐使用的。

./dev/make-distribution.sh --name 2.6.0-cdh5.7.0  --tgz  -Pyarn -Phadoop-2.6  -Dhadoop.version=2.6.0-cdh5.7.0 -Phive -Phive-thriftserver 

注:

--name   应用于编译生成的tgz文件的文件名
-Dhadoop.version   写需要安装到机器的Hadoop版本
-Phive -Phive-thriftserver 是为了支持hive和thriftserver

编译时间取决于网速,本文在服务器上编译时间大概是半个小时,成功界面如下:

生成的文件是:spark-2.2.0-bin-2.6.0-cdh5.7.0.tgz 

接着就可以把这个文件分发到节点,进行安装。

Just enjoy it !

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值