我们在学习一门技术的时候一定要以系统的思维去学习,这样的话,不仅对你的提高有很大的帮助,也可以让你高效的使用这个技术。
对于学习spark,当然也是要以系统的思维去全面的学习。这篇博客是我系统的学习spark的点点滴滴,写这篇博客的目的有两:一是将自己多年学习到的知识的总结;二是分享给大家,希望对大家有帮助
系统的学习spark技术的形式有两种:博客和视频,对于能用博客说明白的问题,会以免费的博客形式给出,但是对于一些原理性的东西用博客很难说的很明白,所以会以视频给出
这个系统学习spark的名称是:spark2.x 由浅入深深到底系列知识。所谓的"浅"是指一定的场景或者问题,然后"入深"就是这个解决这个场景以及问题的原理是什么,然后再“深”就是指这些场景以及问题的原理在我们的代码层面上是怎么实现的,就是会涉及到源码的阅读,最后“到底”就是我们的实践了,然后用实践产生价值
以下是系统学习spark的步骤:
一、spark2.x 由浅入深深到底系列一:正确理解spark
只有正确理解spark了,我们才能确定学习spark的方向和思路,这个是指路灯。
这个我们以视频的方式给出,视频的链接URL是:http://edu.51cto.com/course/10932.html
在这个视频中,我们会弄明白下面的几个问题:
1: 彻底弄懂什么是RDD及其特点
2: 彻底弄懂什么是spark的分布式内存计算
3: 彻底弄懂spark是怎样解决各个领域问题,以及在解决各个领域问题的时候的特点
同时,我们会彻底搞明白下面的两个问题:
1: spark是基于内存的,MapReduce是基于磁盘的,所以spark比MapReduce快,真的是这样的吗?
2: spark的分布式内存是怎么样合理的使用的,或者说用在哪些场景下是合理的
二、spark2.x 由浅入深深到底系列二:spark core RDD Api
对spark core中的RDD中的每一个scala api的用法、用的过程中需要注意的点以及每一个api的原理都做了系统的深入的讲解
这个我们以视频的方式给出,视频的链接URL是:http://edu.51cto.com/course/11058.html
这个视频中的内容包括如下:
第一章: 课程内容以及课程需要的环境的描述
第二章: 了解scala
了解scala的基本概念,包括:
1、scala之面向对象编程
2、scala之函数式编程
3、scala的两个特征:闭包和数据结构Option
第三章: RDD概念
根据RDD的特点,进而提出RDD的定义以及RDD的优势
第四章: RDD的创建
详细讲解创建RDD的api,并且详细分析了parallelize和makeRDD两个api的原理和差异
第五章: RDD的依赖
RDD的依赖的设计,并详细讲解了为什么RDD这么设计依赖
第六章: RDD的分区
1、用原理图的方式展示了RDD分区器HashPartitioner的工作原理
2、讲解利用分区器是怎么样进行性能优化的
3、结合原理图和源代码讲解RangePartitioner的工作原理以及使用场景
4、结合实例自定义RDD的分区器Partitioner
5、RDD分区数控制api - coalesce 和 repartition的使用场景以及两者的区别
6、结合原理图和源代码讲解coalesce的原理
第七章: 单类型RDD的api详解
1、单类型RDD的transformation api的使用及其需要注意的点,包括map, mapPartition, flatMap等api
2、MapPartitionsRDD的原理代码详解
3、RDD的采样api(sample等)介绍
4、RDD分层采样api(sampleByKey等)的介绍
5、RDD的pipe api的使用方式以及使用过程中需要注意的点
6、RDD的pipe的原理深入讲解
7、单类型RDD的基本action api的讲解,包括foreach、first、collect等
8、单类型RDD基本action api讲解,包括reduce、fold以及aggregate等。同时分析了reduce和treeReduce以及aggregate和treeAggregate的原理和区别
第八章 key-value类型RDD的api详解
1、combineBykey的七大参数的详解
2、ShuffleRDD的原理详解
3、基于combineByKey的api详解,包括aggregateByKey、reduceByKey、foldByKey以及groupByKey等
4、combineBykey实战以及使用过程中需要注意的点
5、reduceByKey和groupByKey的对比,同时包含了reduce和fold的对比
6、cogroup api的感官认识,包括基于cogroup实现的join、leftOuterJoin、rightOuterJoin、fullOuterJoin以及subtractByKey等api
7、通过原理图和源代码详解cogroup原理
8、join等api的原理实现
9、subtractByKey的原理
10、sortedByKey原理,利用RangePartitioner实现优化
11、count、countByKey等计数api,包括近似估算等api
第九章: 二元RDD操作
1、union的使用及其原理
2、intersection的使用及其原理
3、cartesian笛卡尔积的使用及其原理
4、zip的使用及其原理
第十章: persist 和 checkpoint机制
1、RDD的缓存机制,即persist
2、checkpoint的作用和实现流程
3、checkpoint实现原理
4、localCheckpoint和checkpoint的优缺点
第十一章: Spark读写外部数据源
1、spark支持的读写存储系统
2、HadoopRDD的原理和实现
3、spark支持的通用的文件格式,重点会讲述了SequenceFile的数据结构以及需要注意的点,包括text file、CSV file、Sequence file 、 Object file以及MapFile等
4、spark支持的hbase file的读写代码
5、行式存储文件格式(avro)和列式存储文件格式(parquet)读写的详细讲解
6、spark对二进制数据的读写的api详解
第十二章: broadcast和accumulator两个api的详解
第十三章: RDD项目实战
以本人真实参加的项目来串联我们这个课程所将到的api
三、spark2.x 由浅入深深到底系列三:spark core正确提交spark应用
我们一般用spark-submit来提交一个spark应用,所以我们需要理解透spark-submit中的每一个参数的用法及其原理,以达到正确提交各种业务场景下的spark应用。在理解透了spark-submit中的每一个参数的用法及其原理后,我们需要理解透spark-submit的原理,这个也是打开深入学习spark的大门
这个我们以视频的方式给出,视频的链接URL是:http://edu.51cto.com/course/11132.html
这个视频的内容包括:
第一章:课程内容简介
第二章:java基础知识
2.1 java命令启动JVM
2.2 java ProcessBuilder启动JVM
第三章:详解spark-submit的每一个参数
3.1 spark-submit感官认识
3.2 master和deploy-mode参数详解
3.3 --conf参数详解
3.4 driver相关参数的详解
3.5 executor相关参数的详解
3.6 --jars参数详解
3.7 --package相关参数详解
3.8 --files参数详解
3.9 --queue相关参数的详解
3.10 python spark应用的正确提交
3.11 利用SparkLauncher在代码中提交spark应用
第四章 spark-submit原理
4.1 spark脚本系统
4.2 spark-class脚本原理以及实现
4.3 spark-daemon脚本原理以及实现
4.4 SparkSubmit原理以及源码分析
四、spark2.x 由浅入深深到底系列四:spark core - scheduler on driver
由浅入深的讲解spark应用是怎么样拆分成task的,然后怎么在集群中调度的,以及深入讲解了task调度的过程中的本地性规则、推测机制以及黑名单机制等。
这章比较偏原理,但是我会以一种通俗易懂的话语来讲透这些原理,你会发现,你觉得很复杂的东东其实都是那么的简单
这个我们以视频的方式给出:大概十一之前会发布视频
大致的内容包括(可能会变,以发布出来的视频为准):
第一章:课程内容以及环境
第二章:一个spark应用中的调度
2.1 DAG的划分
2.2 stage的调度流程原理
2.3 task的延迟调度及性能调优
2.4 task的推测机制及其使用场景
2.5 Blacklist机制及其使用场景
2.6 资源调度及其管理
第三章:多个spark应用的调度
3.1 资源动态分配的前提
3.2 资源动态分配的机制
五、spark2.x 由浅入深深到底系列五:spark core - shuffle实现原理以及调优
在这个课程中会以通俗易懂的话语彻底说清楚spark的shuffle的实现原理以及调优过程
这个课程的内容大致会涉及到:内存管理原理、存储管理原理、mapoutTracker实现原理以及shuffle管理原理
这个我们以视频的方式给出:发布时间待定
六、spark2.x 由浅入深深到底系列六:spark core RDD java api
这个是对系列二的一个补充,会详细介绍RDD java api的实现原理,以及api的用法
这个以博客的形式给出,博客地址为:http://7639240.blog.51cto.com/7629240/d-1
会时时更新,以达到将自己所有知道的都写进去
七、spark2.x 由浅入深深到底系列七:spark core RDD python api
这个是对系列二的一个补充,会详细介绍RDD python api的实现原理,以及api的用法
这个以博客的形式给出,博客地址为:http://7639240.blog.51cto.com/7629240/d-2
这个目前还不是很完善,有空会时时更新
八、 spark2.x 由浅入深深到底系列八:spark core必备基础知识
本课程主要会深入理解spark core的三个基础组件以及我们深入理解spark需要的部分的基础java知识
目标:
1: spark的安全管理
2: spark的序列化机制
3: spark的RPC机制,包括部分的nio的知识点
这个以博客的形式给出,博客地址为:待定
九、 spark2.x 由浅入深深到底系列九:spark core集群资源管理机制
本课程会详细的理解spark的三种资源管理机制:
1: spark自带的standalone模式,以及深入讲解standalone的实现原理
2: hadoop的yarn模式,这节课使的我们彻底弄明白spark是怎么基于yarn来跑任务的,以及我们怎么样去自己实现一个往yarn上提交应用的客户端
3: mesos模式,这节课使的我们彻底弄明白spark是怎么基于mesos来跑任务的,以及我们怎么样去自己实现一个往mesos上提交应用的客户端
这个以博客的形式给出,博客地址为:待定