我們在學習一門技術的時候一定要以系統的思維去學習,這樣的話,不僅對你的提高有很大的幫助,也可以讓你高效的使用這個技術。
對於學習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上提交應用的客戶端
這個以博客的形式給出,博客地址爲:待定