spark-2.4.2 源码编译

前言

因为实际业务需求的复杂性,不可避免地需要修改spark源码,重新编译并测试完成后应用于线上生产环境。本文主要介绍在 centos 7.4 上重新编译 spark-2.4.2 源码的过程及遇到的问题。

一. 下载源码

进入spark官网:http://spark.apache.org/ 点击进入下载页面
在这里插入图片描述
找到下面的Archived Releases,点击 release archives.
在这里插入图片描述
进入后,选择spark2.4.2,右键复制下载地址
在这里插入图片描述
在linux中运行:wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.2/spark-2.4.2.tgz
解压:tar -zxvf spark-2.4.2.tgz -C /bigdata/apps

二. 编译前准备

进入spark2.4.2关于编译的说明页面:http://spark.apache.org/docs/2.4.2/building-spark.html
在这里插入图片描述
可以看出编译spark源码的环境需要Maven3.5.4 和 Java 8

  1. 首先安装java 8

tar -zxvf jdk-8u171-linux-x64.tar.gz -C /bigdata/apps/
vim ~/.bash_profile
export JAVA_HOME=/usr/java/jdk1.8.0_171
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bash_profile
验证:java -version

  1. 安装maven-3.5.4

tar -zxvf apache-maven-3.5.4-bin.tar.gz -C /bigdata/apps/
vim ~/.bash_profile
export MAVEN_HOME=/bigdata/apps/apache-maven-3.5.4
export PATH=$ MAVEN_HOME/bin:$PATH
source ~/.bash_profile
验证:mvn -v

建议:修改修改maven本地仓库存放位置和下载地址,即apache-maven-3.5.4/conf目录下的settings.xml文件:
<localRepository>/bigdata/maven_repo</localRepository
<mirror>  
   <id>alimaven</id>  
   <name>aliyun maven</name>  
   <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
   <mirrorOf>central</mirrorOf>          
</mirror> 
  1. 安装scala-2.11.12

tar -zxvf scala-2.11.12.tgz -C /bigdata/apps
vim ~/.bash_profile
export SCALA_HOME=/bigdata/apps/scala-2.11.12
export PATH=$SCALA_HOME/bin:$PATH
source ~/.bash_profile
验证:scala

  1. 安装git

yum install git -y

三. 编译源码

  1. 根据官网
    在这里插入图片描述

为了防止内存不够,执行如下语句:

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

  1. (可选)修改/bigdata/apps/spark-2.4.2/dev/make-distribution.sh 文件,屏蔽其中的相应变量,添加如下代码,目的是为了加快编译速度,实测中发现也没快多少,所以也可以不做修改。

VERSION=2.4.2 # spark 版本
SCALA_VERSION=2.11 # scala 版本
SPARK_HADOOP_VERSION=2.6.0-cdh5.16.1 #对应的 hadoop 版本
SPARK_HIVE=1 # 支持的 hive

  1. 修改 pom.xml 仓库,添加阿里云(maven中已配置过,这里不重复配置)和 cloudera 仓库地址。

屏蔽代码:

<!--  <repository>
   <id>central</id>
   This should be at top, it makes maven try the central repo first and then others and hence faster dep resolution
   <name>Maven Repository</name>
   <url>https://repo.maven.apache.org/maven2</url>
   <releases>
     <enabled>true</enabled>
   </releases>
   <snapshots>
     <enabled>false</enabled>
   </snapshots>
</repository>  -->

添加代码:

<repository>
  <id>cloudera</id>
  <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
  1. 运行编译命令

    cd /bigdata/apps/spark-2.4.2/
    ./dev/make-distribution.sh
    --name 2.6.0-cdh5.16.1
    --tgz
    -Dhadoop.version=2.6.0-cdh5.16.1
    -Phadoop-2.6
    -Phive
    -Phive-thriftserver
    -Pyarn

参数介绍:
--name:指定编译后部分名字
--tgz:编译后打包成 tgz 文件
-Dhadoop.version: 同-Phadoop,一般和 name 相同;
-Phadoop:Hadoop版本号,默认版本2.6.5;
-Phive:是否在Spark SQL 中支持 hive,hive 默认版本1.2.1;
-Phive-thriftserver:同-Phive;
-Pyarn :是否支持Hadoop YARN;

  1. 编译成功后,会显示 BUILD SUCCESS,并在 spark-2.4.2 文件夹下生成一个 tgz 包:
    spark-2.4.2-bin-2.6.0-cdh5.16.1.tgz

四. 编译过程中遇到的问题及处理

  1. 开始编译源码后,观察控制台编译日志发现会在 spark-2.4.2/build 目录下下载 scala 和 zinc 的 tgz 包,过程会很慢。此时,可进入 build 目录,把手动下载好的 tgz 包粘贴到这里,重新执行编译。
  2. 出现如下错误:在这里插入图片描述
    修改 spark-2.4.2 文件夹中的 pom.xml 文件,找到 net.alchim31.maven 的配置处,将版本号由 3.2.2 改为 3.2.0 即可。
    在这里插入图片描述
  3. 编译过程中,可能出现某个jar包缺失或损坏,手动下载对应版本拷贝到指定位置即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值