11.spark源码编译

article/2025/8/23 16:04:14

1.构建环境

构建环境:
ubuntu 22.04
jdk 11
scala 2.12
maven 3.9
spark 3.5

2.构建

获取代码

pull代码后,切换到对应分支。

git checkout branch-3.5

编译

构建spark

mvn -DskipTests clean package \-Dhadoop.version=3.3.6 \-Phive -Phive-thriftserver -Pyarn -Pscala-2.12

参数说明

-DskipTests:跳过测试(提高速度)
-Phive:启用 Hive 支持
-Phive-thriftserver:构建 Hive Thrift Server(JDBC Server)
-Pscala-2.12:Spark 3.5 默认使用 Scala 2.12
-Dhadoop.version:可选指定目标 Hadoop 版本

构建结果

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for Spark Project Parent POM 3.5.6-SNAPSHOT:
[INFO] 
[INFO] Spark Project Parent POM ........................... SUCCESS [  5.100 s]
[INFO] Spark Project Tags ................................. SUCCESS [  6.722 s]
[INFO] Spark Project Sketch ............................... SUCCESS [  7.578 s]
[INFO] Spark Project Local DB ............................. SUCCESS [  8.549 s]
[INFO] Spark Project Common Utils ......................... SUCCESS [  9.026 s]
[INFO] Spark Project Networking ........................... SUCCESS [ 11.460 s]
[INFO] Spark Project Shuffle Streaming Service ............ SUCCESS [ 11.545 s]
[INFO] Spark Project Unsafe ............................... SUCCESS [ 10.493 s]
[INFO] Spark Project Launcher ............................. SUCCESS [ 12.353 s]
[INFO] Spark Project Core ................................. SUCCESS [02:11 min]
[INFO] Spark Project ML Local Library ..................... SUCCESS [ 25.905 s]
[INFO] Spark Project GraphX ............................... SUCCESS [ 28.294 s]
[INFO] Spark Project Streaming ............................ SUCCESS [ 42.562 s]
[INFO] Spark Project SQL API .............................. SUCCESS [ 29.525 s]
[INFO] Spark Project Catalyst ............................. SUCCESS [02:35 min]
[INFO] Spark Project SQL .................................. SUCCESS [03:45 min]
[INFO] Spark Project ML Library ........................... SUCCESS [02:02 min]
[INFO] Spark Project Tools ................................ SUCCESS [  4.805 s]
[INFO] Spark Project Hive ................................. SUCCESS [ 57.008 s]
[INFO] Spark Project REPL ................................. SUCCESS [ 17.330 s]
[INFO] Spark Project Hive Thrift Server ................... SUCCESS [ 32.332 s]
[INFO] Spark Project Assembly ............................. SUCCESS [  8.576 s]
[INFO] Kafka 0.10+ Token Provider for Streaming ........... SUCCESS [ 15.543 s]
[INFO] Spark Integration for Kafka 0.10 ................... SUCCESS [ 36.375 s]
[INFO] Kafka 0.10+ Source for Structured Streaming ........ SUCCESS [ 32.824 s]
[INFO] Spark Project Examples ............................. SUCCESS [ 37.571 s]
[INFO] Spark Integration for Kafka 0.10 Assembly .......... SUCCESS [  5.331 s]
[INFO] Spark Avro ......................................... SUCCESS [ 35.194 s]
[INFO] Spark Project Connect Common ....................... SUCCESS [ 39.677 s]
[INFO] Spark Protobuf ..................................... SUCCESS [ 31.574 s]
[INFO] Spark Project Connect Server ....................... SUCCESS [ 41.291 s]
[INFO] Spark Project Connect Client ....................... SUCCESS [ 47.043 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  21:28 min
[INFO] Finished at: 2025-05-28T17:53:47+08:00
[INFO] ------------------------------------------------------------------------

构建 PySpark 部分的 Python 包

cd python
python3 setup.py sdist

这会在 dist/ 目录下生成 pyspark-.tar.gz,你可以用 pip install 安装。

构建结果
在这里插入图片描述

3.安装包

Spark 没有构建成一个 .tar.gz 包,而是构建出对应目录结构:

.
├── bin/                 # 启动脚本
├── sbin/                # 管理脚本
├── assembly/target/scala-2.12/jars/   # 所有 jar 包
├── python/              # PySpark 源码
├── python/dist/         # PySpark 安装包(如 pyspark-3.5.6.tar.gz)
└── ...

Spark 的可用构建输出主要分布在以下几个目录:

路径说明
assembly/target/scala-2.12/主 Spark 可执行包位置
assembly/target/scala-2.12/jars/所有 Spark 模块 jar 包合集(可作为 $SPARK_HOME/jars
python/dist/PySpark 安装包(.tar.gz.whl
bin/sbin/原样保留,作为启动脚本使用
examples/示例代码
conf/示例配置文件

整理安装包

mkdir -p ~/spark-dist
cp -r bin sbin conf examples assembly/target/scala-2.12/jars python ~/spark-dist/

说明
spark发行版的安装包里有spark-*-yarn-shuffle.jar,构建出来没有。
在这里插入图片描述
移除原因
Apache Spark 从 3.3.0 版本开始移除 yarn-shuffle 模块,主要出于以下几个原因:

  1. Shuffle 服务应该由资源管理器维护,不应绑定在 Spark 内部
    Spark 的 YarnShuffleService 实际是一个 NodeManager 的 Auxiliary Service。
    它与 Spark 的核心逻辑关系不大,属于 YARN 的职责范围。
    把它放在 Spark 里维护带来了 依赖管理复杂度 和 构建臃肿。
    开发者更推荐使用 YARN(或 Hadoop)自带的 Shuffle Service。

  2. 模块长期缺乏维护
    yarn-shuffle 代码多年未更新,依赖老旧(如 Guava 版本问题)。
    不少用户 构建 Spark 时会遇到兼容性或编译错误。
    核心开发者决定将这个模块移除,避免成为项目技术债。

  3. 简化 Spark 构建系统(Maven/SBT)
    每个多模块构建都增加 CI/CD 负担。
    移除 rarely-used 模块有助于让 Spark 构建系统更清晰、精简。

  4. 社区使用比例极低
    大多数 Spark on YARN 部署 直接使用 Hadoop 提供的 shuffle service。
    官方发布版本中也 不再默认包含 spark-*-yarn-shuffle.jar。

移除影响
移除 yarn-shuffle 模块之后,依然可以正常将 Spark 任务提交到 YARN 上运行,不会影响 Spark on YARN 的核心功能。

功能是否受影响说明
提交 Spark 作业到 YARN(如 --master yarn✅ 正常Spark Application 会以 ApplicationMaster 形式运行在 YARN 上
使用 YARN ResourceManager 进行资源调度✅ 正常Driver / Executor 会作为 YARN 容器启动
Spark on YARN 的集群模式和客户端模式✅ 正常均不依赖 yarn-shuffle
依赖 Hadoop 自带的 shuffle-service✅ 推荐做法Hadoop 通常默认启用了该服务
Executor 之间进行 shuffle 读取✅ 正常通过 Hadoop/YARN 提供的 Shuffle 服务支持

4.问题解决

1.报错禁止使用hive3.1.3

错误提示

[INFO] Finished at: 2025-05-28T17:03:46+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:3.3.0:enforce (enforce-versions) on project spark-hive-thriftserver_2.12: 
[ERROR] Rule 3: org.codehaus.mojo.extraenforcer.dependencies.EnforceBytecodeVersion failed with message:
[ERROR] Found Banned Dependency: org.apache.hive:hive-service-rpc:jar:3.1.3
[ERROR] Use 'mvn dependency:tree' to locate the source of the banned dependencies.
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.

原因
这个错误说明你在编译 Spark(特别是 spark-hive-thriftserver 模块)时,触发了 Maven Enforcer 插件的规则,禁止使用某个依赖:

Found Banned Dependency: org.apache.hive:hive-service-rpc:jar:3.1.3

Maven Enforcer 插件检测到 hive-service-rpc:3.1.3 是被禁止的字节码依赖(可能版本太新),因为它含有不兼容的 Java 字节码(比如编译时使用了 JDK 11+,但 Spark 要求是 JDK 8 字节码)。

解决方案

<enforceBytecodeVersion><maxJdkVersion>${java.version}</maxJdkVersion><ignoredScopes>test</ignoredScopes><ignoredScopes>provided</ignoredScopes><excludes><!--TODO(SPARK-44032): Remove the exclusion of threeten-extra when orc-core fixes the violation--><exclude>org.threeten:threeten-extra</exclude><!-- 排除 hive-service-rpc --><exclude>org.apache.hive:hive-service-rpc</exclude></excludes>
</enforceBytecodeVersion>

增加

<!-- 排除 hive-service-rpc -->
<exclude>org.apache.hive:hive-service-rpc</exclude>

5.补充

还有一个这个构建命令,等于上面所有操作。

./dev/make-distribution.sh \--name custom-spark \--tgz \--r \-Phive -Phive-thriftserver -Pyarn -Pscala-2.12 \-Dhadoop.version=3.3.6

如果不需要R目录,可以移除

--r

在这里插入图片描述


http://www.hkcw.cn/article/kQCGANNfXY.shtml

相关文章

前端必备——Grid布局详解

Grid布局&#xff0c;又称为CSS网格布局&#xff0c;是W3C提出的一个二维布局系统&#xff0c;它允许开发者以行和列的形式来布局网页内容。以下是Grid布局属性的详细解析&#xff1a; 一、容器属性 display grid&#xff1a;将元素设置为块级网格容器。inline-grid&#xff1…

基于Java Web和SSM框架的硕士研究生招生考试系统开发

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本项目旨在构建一个硕士研究生招生考试专业报考查询及学习系统&#xff0c;使用Java Web技术并集成了Spring、SpringMVC和MyBatis&#xff08;SSM&#xff09;框架。系统通过模块化架构和分离关注点&#xff08…

MCP Web Research Server 安装与配置指南

MCP Web Research Server 安装与配置指南 mcp-webresearch MCP web research server (give Claude real-time info from the web) 项目地址: https://gitcode.com/gh_mirrors/mcpw/mcp-webresearch 1. 项目基础介绍 MCP Web Research Server 是一个基于 Model Context …

0基础入门前端到精通(一)

目录 一丶前端开发介绍 1. 网页的组成部分 2. 网页的本质是什么&#xff1f; 3. 前端代码如何变成网页&#xff1f; 4. 统一网页显示标准&#xff1a;Web 标准 二丶HTML & CSS 1. 什么是 HTML&#xff1f; 2. 什么是 CSS&#xff1f; ​3. HTML 快速入门&#xff0…

一文了解Blob文件格式,前端必备技能之一

文章目录 前言一、什么是Blob&#xff1f;二、Blob的基本特性三、Blob的构造函数四、常见使用场景1. 文件下载2. 图片预览3. 大文件分片上传 四、Blob与其他API的关系1. File API2. FileReader3. URL.createObjectURL()4. Response 五、性能与内存管理六、实际案例&#xff1a;…

双剑破天门:攻防世界Web题解之独孤九剑心法(十)

免责声明&#xff1a;用户因使用公众号内容而产生的任何行为和后果&#xff0c;由用户自行承担责任。本公众号不承担因用户误解、不当使用等导致的法律责任 **本文以攻防世界部分题为例进行演示&#xff0c;后续会对攻防世界大部分的web题目进行演示&#xff0c;如果你感兴趣请…

解决 Android WebView 无法加载 H5 页面常见问题的实用指南

目录 1. WebView 简介 2. 常见问题 3. 网络权限设置 4. 启用 JavaScript 5. DOM Storage 的重要性 6. 处理 HTTPS 问题 7. 设置 WebViewClient 8. 调试工具 9. 其他调试技巧 10. 结论 相关推荐 1. WebView 简介 Android WebView 是一种视图组件&#xff0c;使得 And…

【若依框架】代码生成详细教程,15分钟搭建Springboot+Vue3前后端分离项目,基于Mysql8数据库和Redis5,管理后台前端基于Vue3和Element Plus,开发小程序数据后台

今天我们来借助若依来快速的搭建一个基于springboot的Java管理后台,后台网页使用vue3和 Element Plus来快速搭建。这里我们可以借助若依自动生成Java和vue3代码,这就是若依的强大之处,即便你不会Java和vue开发,只要跟着石头哥也可以快速的开发一款Java和vue程序。 技术点 …

OpenWebUI如何对外提供HTTP接口?

from 公众号&#xff1a;程序员more OpenWebUI通过HTTP方式提供对外接口&#xff0c;使得开发者可以通过HTTP方式快速对接拥有RAG能力的模型基座。 01 OpenWebUI配置app key OpenWebUI使用BearerToken机制对 API 请求进行身份验证。从 Open WebUI 中的“设置>帐户”获取 …

中使馆回应美将撤销中国留学生签证 坚决反对歧视做法

中使馆回应美将撤销中国留学生签证 坚决反对歧视做法!中国驻美国大使馆发言人于5月29日针对美国务院发表的声明作出回应,该声明称将撤销有关中国在美留学生的签证。发言人表示,中方坚决反对美方这一政治性、歧视性的做法。这种行为将严重损害中国在美留学人员的正当合法权益…

【Markdown基础语法】

Markdown语法 顶部 一、标题#~###### 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二、粗体 **粗体** 粗体字 三、斜体** 斜体字 四、删除字~~~~ 删除文字​ 五、分割线***、—、___ 六、无序列表-、、* 1 2 3 七、有序列表数字后加点1. 第一项第二项 …

ROS云课基础篇-03-apt趣味小应用-250529

基本看完01和02&#xff0c;还想继续&#xff0c;十分魔幻&#xff0c;来点有趣好玩的吧。 ROS云课基础篇-01-Linux-250529-CSDN博客 ROS云课基础篇-02-C-250529-CSDN博客 在Ubuntu中&#xff0c;有许多有趣且实用的小应用可以为系统增添乐趣和功能性。以下是一些类似xeyes和…

上海老电梯更新费用规定 公积金可提取支付

上海老电梯更新费用规定 公积金可提取支付。为支持职工筹集住宅老旧电梯更新费用,改善居住条件,上海市住房公积金管委会近日印发《关于上海市住房公积金支持老旧电梯更新有关政策的通知》,将于2025年7月1日起施行。根据通知规定,住宅老旧电梯更新项目经业主依法表决通过,小…

网络编程之网络编程预备知识

网络编程预备知识 1. 网络编程 1.1 网络通信 通信/通讯需要具备两个基本条件&#xff1a; 物理媒介&#xff08;物理层面&#xff09; 网线&#xff0c;光纤 协议&#xff08;软件层面&#xff09;网络通信协议 1.2 网络协议层次模型 层次&#xff1a;把不同的功能封装成…

Spring Boot+Activiti7入坑指南初阶版

介绍  Activiti 是一个轻量级工作流程和业务流程管理 (BPM) 平台,面向业务人员、开发人员和系统管理员。其核心是一个超快且坚如磐石的 Java BPMN 2 流程引擎。它是开源的,并根据 Apache 许可证分发。Activiti 可以在任何 Java 应用程序、服务器、集群或云中运行。它与 Spri…

信创改造选择C86,相比于ARM架构有什么优势?

随着信息技术应用创新&#xff08;信创&#xff09;产业的快速发展&#xff0c;信创改造已成为我国信息技术产业升级的重要方向。信创改造的核心目标是实现信息技术的自主可控&#xff0c;保障国家信息安全&#xff0c;同时推动国产软硬件在各行业的广泛应用。 2025年作为信创产…

20250529-C#知识:运算符重载

C#知识&#xff1a;运算符重载 运算符重载能够让我们像值类型数据那样使用运算符对类或结构体进行运算&#xff0c;并且能够自定义运算逻辑。 1、运算符重载及完整代码示例 作用是让自定义的类或者结构体能够使用运算符运算符重载一定是public static的可以把运算符看成一个函…

【AI面试秘籍】| 第24期:Transformers / LLM的词表应该选多大?

在构建和训练Transformers以及大型语言模型 (LLM) 时&#xff0c;词表 (Vocabulary) 大小的选择是一个至关重要且常常令人困惑的问题。它不仅直接影响模型的性能&#xff0c;还关系到模型的计算效率和内存占用。那么&#xff0c;当面试官抛出这个问题时&#xff0c;我们应该如何…

一文清晰理解目标检测指标计算

一、核心概念 1.交并比IoU 预测边界框与真实边界框区域的重叠比&#xff0c;取值范围为[0,1] 设预测边界框为&#xff0c;真实边界框为 公式&#xff1a; IoU计算为两个边界框交集面积与并集面积之比&#xff0c;图示如下 IoU值越高&#xff0c;表示预测边界框与真实边界框的对…

一文讲懂fork函数(c语言linux)

c语言的fork函数是拿来创建子进程的, 进程 pcb(process control block) 代码和数据 子进程中的代码和数据与父进程的一致(共享父进程的代码和数据),没有自己的代码和数据. 如果父进程或者子进程要修改数据,操作系统就会把要修改的数据拷贝一份新的,让目标进程修改这份拷贝…