之所以忽然提筆,是因?yàn)檫@段時(shí)間正好在業(yè)余時(shí)間系統(tǒng)地學(xué)習(xí)Spark,整個(gè)學(xué)習(xí)思路讓我想起了大學(xué)期間學(xué)習(xí)《模擬電子電路》這門課的一些方法,個(gè)人覺得可以作為一個(gè)學(xué)習(xí)模板來和大家一起交流分享(本文只談如何系統(tǒng)高效地學(xué)習(xí)一項(xiàng)技能或者一門課程,抱有突擊學(xué)習(xí)目的的請繞道)。
無論是學(xué)習(xí)Spark技術(shù)還是學(xué)習(xí)《模擬電子電路》課程,總結(jié)起來,大體都經(jīng)歷了這么幾個(gè)階段:
1.?初識(10%):系統(tǒng)地過一遍整個(gè)內(nèi)容,《模電》就是大體聽一遍老師的課程,Spark就到處看看相關(guān)的資料,在測試環(huán)境寫一點(diǎn)測試代碼。這個(gè)過程不需要特別仔細(xì),也不需要多么深入的理解,只需要有個(gè)基本的概念了解即可。通常初識階段是沒有辦法建立起知識的體系結(jié)構(gòu)的。
2.?搭建知識體系(20%):初步了解基本概念之后,需要再過一遍所有內(nèi)容,這次同樣不需要關(guān)注細(xì)節(jié),但是需要重點(diǎn)關(guān)注章節(jié)體系以及章節(jié)核心點(diǎn):
【大數(shù)據(jù)開發(fā)學(xué)習(xí)資料領(lǐng)取方式】:加入大數(shù)據(jù)技術(shù)學(xué)習(xí)交流群458345782,點(diǎn)擊加入群聊,私信管理員即可免費(fèi)領(lǐng)取
這門課程有哪些章節(jié),比如Spark整體可以劃分為Spark內(nèi)核原理、Spark運(yùn)帷優(yōu)化、SparkSQL等幾大部分。其中Spark內(nèi)核原理可以劃分為RDD介紹、DAG介紹、Spark任務(wù)調(diào)度、Spark存儲(chǔ)管理系統(tǒng)、Spark資源管理系統(tǒng)等幾個(gè)模塊,Spark運(yùn)維優(yōu)化分為Spark部署、Web?UI等
進(jìn)一步,需要針對每個(gè)模塊列出核心點(diǎn),不需要多,每個(gè)章節(jié)只需要列出三四個(gè)核心點(diǎn)即可,比如Spark資源管理模塊需要關(guān)注靜態(tài)資源管理策略以及動(dòng)態(tài)資源管理策略
這樣處理之后,厚厚的Spark書籍/《模電》就可以變成薄薄的幾頁紙,一頁紙對應(yīng)一個(gè)具體模塊,記錄該模塊的核心點(diǎn)。猶記得當(dāng)年考試前別的同學(xué)在拿著一本厚厚的模電書翻來翻去的時(shí)候,我就只需要拿著幾頁紙復(fù)習(xí)(而且單科成績?nèi)登懊?/p>
第二步是整個(gè)方法論中的重中之重,建立知識體系結(jié)構(gòu),構(gòu)建知識樹譜對知識的深入理解至關(guān)重要。只有擁有了全局的視野,你才知道現(xiàn)在自己學(xué)習(xí)了哪些,還有哪些沒學(xué)。就像蓋別墅,你需要首先畫圖紙,有個(gè)全局的設(shè)計(jì),沒有人會(huì)今天想起來東邊蓋個(gè)花園,明天在西邊搞個(gè)游泳池。很多同學(xué)在學(xué)習(xí)一門技能的時(shí)候總是這里看點(diǎn)資料,那里學(xué)點(diǎn)優(yōu)化方法,缺乏全局的視野,缺乏系統(tǒng)性,學(xué)到的東西永遠(yuǎn)支離破碎。而此時(shí)的你,已經(jīng)可以滔滔不絕、由淺及深地概括一本書了。下面兩圖是筆者學(xué)習(xí)Spark內(nèi)核時(shí)為自己列的一個(gè)提綱以及優(yōu)化章節(jié)的部分核心點(diǎn):


3.??深入探索(20%):知識體系建立起來之后,需要更加深入。此時(shí)可以丟掉課本,只需要對照著每個(gè)章節(jié)的核心點(diǎn)一個(gè)一個(gè)重點(diǎn)擊破,比如現(xiàn)在要深入學(xué)習(xí)Spark資源調(diào)度模塊中的動(dòng)態(tài)資源調(diào)度,那就利用所有可以利用到的資源(google、官方博客、spark文檔、youtubo、jira、源碼等)檢索動(dòng)態(tài)資源調(diào)度的相關(guān)信息,深入理解其工作原理。這樣一個(gè)一個(gè)擊破之后整個(gè)知識體系就更加豐滿。這個(gè)階段需要嚴(yán)苛的工匠精神,需要你搜集各種資料去了解,去思考why。至此,在理論層面你已經(jīng)是所謂的”專家”了。這個(gè)階段有兩點(diǎn)建議:
(1)?經(jīng)典內(nèi)容檢索:這個(gè)階段拼的是各位的檢索能力和閱讀理解能力,在此強(qiáng)烈推薦技術(shù)人多關(guān)注國外技術(shù)大牛的博客以及官方博客、文檔,比如Spark可以關(guān)注的材料主要有:
官方文檔:http://spark.apache.org/docs/latest/index.html
官方博客:https://databricks.com/blog
Youtube視頻(比較多):https://www.youtube.com/watch?v=cs3_3LdCny8
國內(nèi)大神:https://github.com/JerryLead/SparkInternals/tree/master/markdown
(2)畫圖整理:網(wǎng)絡(luò)上關(guān)于Spark的內(nèi)容有很多很多,經(jīng)典的內(nèi)容更不少,一般遇到經(jīng)典內(nèi)容之后都會(huì)一口氣讀完,再加入書簽。然,久而久之,很多內(nèi)容都會(huì)慢慢模糊,當(dāng)你再想去查的時(shí)候已經(jīng)不知道是哪個(gè)博客的內(nèi)容了,相信很多人會(huì)有這樣的苦惱。針對這樣的問題,需要將一些自己體會(huì)非常深刻的內(nèi)容記錄下來,建議使用畫圖工具,俗話說一圖勝千言,比如學(xué)習(xí)SparkSQL時(shí)為了理解SQL的整個(gè)解析過程,筆者就簡單地將一個(gè)簡單的SQL的執(zhí)行計(jì)劃通過幾張圖表示出來:

4.?實(shí)踐探索(30%):?第三步完成之后,相信你已經(jīng)可以就這項(xiàng)技能和別人談笑風(fēng)生了,但也就僅此而已。一旦別人問你一個(gè)線上問題,相信你就會(huì)從滔滔不絕變得支支吾吾,因?yàn)槟闳鄙賹?shí)踐。當(dāng)然,只有在知識體系構(gòu)建完成后的實(shí)踐才是真正意義上的實(shí)踐。有理論依據(jù)作為支撐,實(shí)踐才有更多意義。實(shí)踐是一個(gè)遇坑填坑的過程,沒有遇到坑也不能稱為實(shí)踐。因?yàn)橹挥杏龅絾栴},你才會(huì)完整地將監(jiān)控、日志信息利用起來追蹤整個(gè)系統(tǒng)工作流程,你才會(huì)真真切切地去想如何通過修改配置、修改源碼來進(jìn)一步改造它。
這個(gè)階段,主要考察你解決問題的能力,一般來說通常就三板斧:監(jiān)控、日志和源碼。監(jiān)控分為硬件監(jiān)控以及業(yè)務(wù)監(jiān)控,兩者都需要看懂并會(huì)分析。日志也有很多,比如業(yè)務(wù)日志、GC日志等,需要能力根據(jù)異常猜測問題原因并進(jìn)行驗(yàn)證。如果前者都失效,就只能分析源碼。問題分析是第一步,更重要的,你還要提出一個(gè)高效地解決方案,這個(gè)可能是領(lǐng)導(dǎo)/面試官更看重的
實(shí)踐探索不可能一撮而就,需要不斷的踩坑填坑,所以需要一顆大心臟。
5.?分享交流(20%):?上面四步都是你自己對知識的理解,你還需要看看同行是如何理解的。實(shí)踐結(jié)束之后一定記得需要以博客的形式系統(tǒng)完整的將這個(gè)模塊完完整整、成體系地、由淺及深地進(jìn)行復(fù)盤整理、分享交流!這個(gè)階段可以讓你認(rèn)識更多圈子里的朋友,一起交流探討才能不寂寞
學(xué)習(xí)有無數(shù)種方法,適合自己的才是最好的。本文只是筆者對學(xué)習(xí)方法的一點(diǎn)思考,分享出來一方面是為了更好地完善自己,另一方面也是希望能夠給大家提供參考。當(dāng)然,學(xué)習(xí)從來不是一件輕松的事情,但也從來不是一件艱難的事情。共勉。