我必须要说,Spark这个框架出现之前,我对很多大数据领域的框架源码甚至都是嗤之以鼻的。
很多小伙伴在群里或者私信留言问我关于Spark的学习路径问题。
Spark发展至今,应该说已经非常成熟了。是大数据计算领域不得不学习的框架。尤其是Spark在稳定性和社区发展的成熟度方面,基本可以吊打其他的大数据处理框架。
我之前发过一篇关于阅读Spark源码的文章:《Spark源码阅读的正确打开方式》。
我们在这篇文章的基础上总结一下我曾经总结过的关于Spark的路径。如果有什么更好的资料,欢迎大家加我微信推荐给我。
假如你是第一次接触Spark,那么你需要对Spark的设计思想有所了解,知道Spark用了哪些抽象,Spark在提出RDD的时候是基于什么样的考虑。
在这里给大家推荐几篇论文如下:
https://fasionchan.com/blog/2017/10/19/yi-wen-tan-xing-fen-bu-shi-shu-ju-ji-yi-zhong-wei-nei-cun-hua-ji-qun-ji-suan-she-ji-de-rong-cuo-mo-xing/
这篇文章中提出了弹性分布式数据集(RDD,Resilient Distributed Datasets)这个概念,这个概念是贯穿Spark设计的始终,是Spark最重要的概念之一。RDD是一种分布式的内存抽象,允许在大型集群上执行基于内存的计算(In-Memory Computing),与此同时还保持了MapReduce等数据流模型的容错特性。
这篇文章中提到,Spark实现RDD在迭代计算方面比Hadoop快二十多倍,同时还可以在5-7秒的延时内交互式地查询1TB的数据集。
- 第二篇:《大型集群上的快速和通用数据处理架构》
这本书我不给连接了。因为这个文章长达170多页,堪比一篇博士论文。相信绝大多数人都是没兴趣读完的。
我在这里给出一个读后小总结:
这本书是Spark框架设计者–计算机科学博士Matei Alexandru Zaharia和加州大学伯克利分校教授、主席Scott Shenker撰写的。书中作者主要分析了当前流行的各种计算框架的使用场景以及他们对应的缺点,然后谈了下为什么编写了Spark这个框架和spark每个模块详细的设计理念及运行原理,这里是做一部分摘要。
大家可以看到,这7个概念都是Spark中最最核心的几个概念。我们在学习过程中是万万绕不过去的。
第一张图是官方给出的Spark架构图,我们可以看到几个最重要的模块:Spark Core、Spark Streaming、Spark SQL。曾经还有一个部分叫做Structured Streaming,但是这部分好像慢慢被官方抛弃了,现在Spark官方主推SQL并且基于Spark SQL进行的优化和迭代非常之多。如果你是第一次接触Spark,并且业务没有特殊需要,可以暂时忽略Structured Streaming。此外Spark社区在努力的像机器学习和深度学习靠拢,Spark在完成最初的流计算目标后开始发力机器学习方向,如果有兴趣可以接触这一部分的内容。
第二张图是一个简单的Spark快速学习的路线图,一些基本的Linux操作和运维基础,一点简单的搭建虚拟机的基础,我相信这些对大家来说都不是问题。然后我们就可以按照官网的demo进行第一次体验了:http://spark.apache.org/examples.html
Spark的官网中给出了非常简单的Spark入门案例,同样我们也可以直接访问Spark在Github的仓库直接看更多的Demo:
https://github.com/apache/spark/tree/master/examples/src/main/java/org/apache/spark/examples
书推荐
关于Spark的书,我个人读了应该有4-5本,每本书都没有达到我的预期,如果说你真的需要一本书来当成工具,我觉得下面的书和Github项目可以用来参考:
第一本书是:《大数据处理框架Apache Spark设计与实现》,这本书主要是介绍Spark的设计和原理,包含一部分源码。你可以把它当成一本八股文书来背,当然也可以当成一本指南来深入理解Spark的设计理念和深层次的原理。
这本书对应了一个Github的Repo:
https://github.com/wangzhiwubigdata/SparkInternals
还有一本电子书:http://marsishandsome.github.io/SparkSQL-Internal/
是关于Spark SQL的,这本书写的可谓用心良苦。对SparkSQL的发展历程和性能的优化、SparkSQL的使用方法、调优、架构、优化器Catalyst以及其他的各个模块都有详细介绍。
当然我也写过一些关于Spark SQL的经典文章:
《真·屠龙之术 | 一次SparkSQL性能分析与优化之旅及相关工具小结》
《SparkSQL的自适应执行-Adaptive Execution》
Github推荐
除了上面的推荐书对应的repo,还有一个酷玩Spark:
https://github.com/wangzhiwubigdata/CoolplaySpark
这个仓库是由腾讯广告部的同学发起的,主要是Spark 源代码解析、Spark 类库等,源代码部分对Spark Streaming 和 Structured Streaming部分由非常深入的解释。但是这个仓库最后一次维护已经是2019年五月份。大家都知道2019年底Flink开源,可能抢了一部分热度,很多公司都开始转向对Flink的研究。
Spark至今只经历过1.x、2.x和3.x三个大版本的变化,在核心实现上,我们在Github能看到的最早的实现是0.5版本,这个版本只有1万多行代码,就把Spark的核心功能实现了。
当然我们不可能从这么古老的版本看,假如你接触过Spark,现在准备看源码,那么我建议从2.x版本中选取一个,最好是2.3或者2.4。但是经过如此多的迭代,Spark的代码量已经暴增了几倍。关于Spark3.x中的新增功能和优化例如动态资源分配,可以针对性的进行补充即可。
我把最重要的模块列表如下:
SparkContext SparkEnv SparkConf RpcEnv SparkStatusTracker SecurityManager SparkUI MetricsSystem TaskScheduler
SerializerManager BroadcastManager ShuffleManager MemoryManager NettyBlockTransferService BlockManagerMaster BlockManager CacheManager
MemoryManager MemoryPool ExecutionMemoryPool StorageMemoryPool MemoryStore UnifiedMemoryManager
LiveListenerBus MapOutputTracker DAGScheduler TaskScheduler ExecutorAllocationManager OutputCommitCoordinator ContextClearner
LocalSparkCluster Standalone Mater/Executor/Worker的容错
StreamingContext Receiver Dstream 窗口操作
Catalog TreeNode 词法解析器Parser RuleExecutor Analyzer与Optimizer HiveSQL相关
假如你对图计算Spark GraphX和机器学习Spark MLlib感兴趣,可以单独看看。
我曾经发过一些可以直接入门的项目,大家可以参考:
这里就不得不说B站了,你可以在B站找到非常丰富的学习资源,甚至我自己也曾经上传过关于Spark的项目。
我这里找了一个不错的入门视频:https://www.bilibili.com/video/BV1tp4y1B7qd
另外下面这篇文章也是一个完整的入门案例:
《Spark Streaming + Canal + Kafka打造Mysql增量数据实时进行监测分析》
另外,给自己打个广告,我个人从一个弱鸡资源UP主正式开始自己录制视频,要当一个合格的大数据领域硬核原创作者。主要专注关于面试&学习路线&个人成长&职场进阶。欢迎各位大大关注:
好了,这部分就是我个人曾经发过的文章总结了,大家面试不会吃亏的:
《Spark Streaming性能优化: 如何在生产环境下动态应对流数据峰值》
好了,本次分享就到这里了。欢迎大家「分享」和「在看」。 我是王知无,一个大数据领域的硬核原创作者,关注技术提升&个人成长&职场进阶,欢迎关注。