Spark源码阅读的正确打开方式

简介:

Spark发展至今,应该说已经非常成熟了。是大数据计算领域不得不学习的框架。尤其是Spark在稳定性和社区发展的成熟度方面,吊打其他的大数据处理框架。

Spark至今只经历过1.x、2.x和3.x三个大版本的变化,在核心实现上,我们在Github能看到的最早的实现是0.5版本,这个版本只有1万多行代码,就把Spark的核心功能实现了。

https://mmbiz.qpic.cn/mmbiz_jpg/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLV41740Vutq954fX6Fteiaan8ZlFGYcnT5N9Vs7qlJ6EgnBX4IgYprtw/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1![image](https://yqfile.alicdn.com/9839e23c948f298c8f2c125005dcd7de0c721c43.png)

当然我们不可能从这么古老的版本看,假如你接触过Spark,现在准备看源码,那么我建议从2.x版本中选取一个,最好是2.3或者2.4。但是经过如此多的迭代,Spark的代码量已经暴增了几倍。所以你需要抓住重点,本文就是想跟大家说说,我们该怎么看,看哪些东西。

基础概念篇

首先假如你是第一次接触Spark,那么你需要对Spark的设计思想有所了解,知道Spark用了哪些抽象,Spark在提出RDD的时候是基于什么样的考虑。

在这里给大家推荐几篇论文如下:

第一篇:

这个不多说,直接给出一个链接,这篇文章不长,很快能看完。

第二篇:

大型集群上的快速和通用数据处理架构
这篇论文长达170多页,当然我们没有必要看完,我在网上找到一个总结,我们在《弹性分布式数据集:一种为内存化集群计算设计的容错抽象》这篇论文基础上看起来也会轻松不少。

链接如下:https://blog.csdn.net/weixin_44024821/article/details/89948115

环境准备

Spark的源码环境搭建网上有很多资源,主要是环境依赖比如JDK、Scala、Maven等,整个过程大概耗时要1-4个小时,主要是编译源码费时。大家可以在网上任意找一篇文章搭建起来环境就可以。 直到你在编译时出现下图就大功告成了。(个人不建议使用sbt的方式编译,推荐Maven)

https://mmbiz.qpic.cn/mmbiz_jpg/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLvX4kgyJe4iboNydKuCN2kWpIIH6ibebzeiau8pfmibQUC3f3ebslwf3W5w/640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1&wx_co=1![image](https://yqfile.alicdn.com/035a32268dd2542c9f098e1d0b6ffed22bad0104.png)

Spark核心设计篇

https://mmbiz.qpic.cn/mmbiz_png/UdK9ByfMT2MSKPJAPEuwFF4c51BIibTSLshuQSPsOJW1rC7icLgKSPLq7ficCAgzxc8L9qhHKLS9Z6nqTfia9WtThQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1![image](https://yqfile.alicdn.com/7ca9cdfd807299e1a501cf5d10b9e91ab317f6f7.png)

上图是一个最简单的Spark任务的执行图。

在核心设计篇,我们最重要的模块列表如下:

Spark的初始化

SparkContext SparkEnv SparkConf RpcEnv SparkStatusTracker SecurityManager SparkUI MetricsSystem TaskScheduler

Spark的存储体系

SerializerManager BroadcastManager ShuffleManager MemoryManager NettyBlockTransferService BlockManagerMaster BlockManager CacheManager

Spark的内存管理

MemoryManager MemoryPool ExecutionMemoryPool StorageMemoryPool MemoryStore UnifiedMemoryManager

Spark的运算体系

LiveListenerBus MapOutputTracker DAGScheduler TaskScheduler ExecutorAllocationManager OutputCommitCoordinator ContextClearner

Spark的部署模式

LocalSparkCluster Standalone Mater/Executor/Worker的容错

Spark Streaming

StreamingContext Receiver Dstream 窗口操作

Spark SQL

Catalog TreeNode 词法解析器Parser RuleExecutor Analyzer与Optimizer HiveSQL相关

其他

假如你对图计算Spark GraphX和机器学习Spark MLlib感兴趣,可以单独看看。

整个跟实时计算相关的包和类大部分都已经包含在上述目录中了。假如你在使用的过程中出现了问题,就需要针对其中的具体部门去看。

源码阅读是我们每一个开发者都需要经历的阶段,阅读源码的好处就不说了。你我都懂。

关注我的公众号,后台回复【JAVAPDF】获取200页面试题!
5万人关注的大数据成神之路,不来了解一下吗?
5万人关注的大数据成神之路,真的不来了解一下吗?
5万人关注的大数据成神之路,确定真的不来了解一下吗?

欢迎您关注《大数据成神之路》
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
缓存 PHP
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection
2034 0
|
JSON API 数据格式
淘宝天猫店铺订单列表、订单详情、订单物流 API 接口全攻略
淘宝天猫订单API接口简介:支持订单列表查询、订单详情获取及物流轨迹追踪功能。通过taobao.trades.sold.get等接口批量查询订单,按状态/时间筛选;taobao.trade.fullinfo.get获取订单详细信息;taobao.logistics.trade.trackget实时跟踪物流状态。开发者需注册账号、申请权限,并使用编程语言调用API,传递必要参数(如App Key、订单ID),处理JSON返回数据。适用于多场景订单管理与物流同步。
1670 5
|
数据安全/隐私保护 iOS开发 MacOS
Mac安装Navicat Premium 16.3.5
Mac安装Navicat Premium 16.3.5
2804 3
|
PyTorch Serverless 算法框架/工具
YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py
YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py
4883 0
YOLOv5源码逐行超详细注释与解读(6)——网络结构(1)yolo.py
|
缓存 算法 中间件
如何无效化缓存-分布式缓存问题
  如何无效化缓存-分布式缓存问题   在过去的6年中,我一直参与构建中间件平台(wso2)。 我们大多数的客户部署都是群集,它们始终需要高可用性,有时还需要可伸缩性。   我们大多数服务器都是无状态的(也就是说,它们将状态保存在数据库中)。 我们的CEP服务器和邮件代理是两个值得注意的例外,但现在暂时将其忽略。   设置无状态服务器集群很容易(或者我们相信)。 我们设置服务器并放置一个负载均衡器(F5,HA Proxy,mod_proxy,Nginx)以分配负载。 不幸的是,我们还需要更多。 我们需要处理集群中服务器之间的安全性,会话,节流和工件部署。
440 0
人工智能 缓存 前端开发
12189 65
人工智能 自然语言处理 安全
1137 0
Web App开发 人工智能 API
1457 1
人工智能 JavaScript 开发工具
4839 17