WHY
Q:为什么要手动编译spark源码?
A:1.可以自己定制开发相关代码,重新编译使用,配合业务场景效率更高;
2.spark官网支持hadoop,yarn,k8s等组件的配合编译,有具体的操作步骤;
3.尝鲜最新版的spark性能,了解其性能;
HOW
1.环境准备
The Maven-based build is the build of reference for Apache Spark. Building Spark using Maven requires Maven 3.3.9 or newer and Java 8+. Note that support for Java 7 was removed as of Spark 2.2.0.
官网对手动编译spark所需的组件本版要求,参考http://spark.apache.org/docs/2.3.1/building-spark.html
系统版本:centos7.4
jdk版本:jdk 1.8.0_131
编译工具:maven 3.5.4
(安装指令:wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz)
2.spark源码下载
下载地址:http://spark.apache.org/downloads.html(下载最新版本)
https://archive.apache.org/dist/spark/spark-2.3.1/
(下载以前版本)
下载完之后解压到指定目录下即可;
3.配置更新
cd spark-2.3.1 --进入spark解压后的根目录
vim pom.xml --编辑pom文件,添加以下内容:
<repository>
<id>cloudera-repo</id>
<name>Cloudera Repository</name>
<url>https://repository.cloudera.com/artifactory/cloudera-repos</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
为什么要设置这个仓库地址?
原因:1.我是基于cdh去编译spark,就是说spark组件以后是在cdh环境中使用;
2.因为有些cdh的jar包在国内的镜像仓库里面没有,所以要从官网下载;
4.开始编译
./dev/make-distribution.sh --name 2.6.0-cdh5.13.1 --tgz -Pyarn -Phadoop-2.6 -Phive -Phive-thriftserver -Dhadoop.version=2.6.0-cdh5.13.1
参数解释:
--name:指定编译完成后Spark安装包的名字
--tgz:以tgz的方式进行压缩
-Phadoop-2.6 以hadoop-2.6的profile进行编译
-Phive和-Phive-thriftserver:编译出来的Spark支持对Hive的操作
-Pyarn:编译出来的Spark支持运行在YARN上
如果需要支持k8s,加上-Pkubernetes,但是注意:k8s是在spark2.3.0版本之后才开始支持k8s组件的;
执行完以上指令之后,spark根目录下回出现一个压缩包,解压之后进入bin目录即可执行使用;
5.异常处理
因为maven的镜像仓库默认的ip是国外的地址,所以拉取jar包的时候会很慢,所以我想使用国内阿里的镜像仓库,但是出现一个问题;
[ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile (scala-compile-first) on project spark-network-yarn_2.11: Execution scala-compile-first of goal net.alchim31.maven:scala-maven-plugin:3.2.2:compile failed. CompileFailed -> [Help 1]
网上关于这个异常的处理方法并不多,而且试了几个重新编译都没有效果,最后折腾了很久,把阿里的镜像去掉,使用国外的镜像,重新编译就没问题了;
以下是我在maven的setting里面设置的镜像地址:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
参考链接:1.http://flume.cn/2018/01/08/spark2-2%E6%96%B0%E7%89%88%E6%9C%AC%E7%BC%96%E8%AF%91%E6%89%93%E5%8C%85/
2.http://blog.itpub.net/30089851/viewspace-2140779/