spark2.x编译步骤及异常处理

本文详细介绍了手动编译Spark源码的原因、步骤及注意事项,包括环境准备、源码下载、配置更新、编译过程及异常处理,适用于希望定制Spark以适应特定业务场景的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/

root@master Dissertation]# spark-submit --master spark://192.168.3.101:7077 --executor-memory 4g --num-executors 4 spark_clean.py 2025-03-18 18:30:50 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Exception in thread "main" java.io.IOException: Cannot run program "/usr/bin/python3.12": error=2, 没有那个文件或目录 at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at org.apache.spark.deploy.PythonRunner$.main(PythonRunner.scala:100) at org.apache.spark.deploy.PythonRunner.main(PythonRunner.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:894) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:198) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:228) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:137) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.io.IOException: error=2, 没有那个文件或目录 at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:247) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 12 more 2025-03-18 18:30:50 INFO ShutdownHookManager:54 - Shutdown hook called 2025-03-18 18:30:50 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-7de23e3f-5377-4094-a23b-c87ca34bd32a
最新发布
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值