Spark是發(fā)源于美國加州大學(xué)伯克利分校AMPLab的集群計(jì)算平臺,它立足于內(nèi)存計(jì)算,性能超過Hadoop百倍,即使使用磁盤,迭代類型的計(jì)算也會有10倍速度的提升。Spark從多迭代批量處理出發(fā),兼收并蓄數(shù)據(jù)倉庫、流處理和圖計(jì)算等多種計(jì)算范式,是罕見的全能選手。Spark當(dāng)下已成為Apache基金會的頂級開源項(xiàng)目,擁有著龐大的社區(qū)支持――活躍開發(fā)者人數(shù)已超過Hadoop MapReduce)。這里,我們?yōu)榇蠹曳窒碓S鵬的“Apache Spark源碼走讀”系列博文,從源碼方面對這個流行大數(shù)據(jù)計(jì)算框架進(jìn)行深度了解。
關(guān)于博主:許鵬,花名@徽滬一郎,2000年畢業(yè)于南京郵電學(xué)院,現(xiàn)就業(yè)于愛立信上海,在UDM部門從事相關(guān)產(chǎn)品研發(fā),個人關(guān)注于Linux 內(nèi)核及實(shí)時計(jì)算框架如Storm、Spark等。
源碼閱讀是一件非常容易的事,也是一件非常難的事。容易的是代碼就在那里,一打開就可以看到。難的是要通過代碼明白作者當(dāng)初為什么要這樣設(shè)計(jì),設(shè)計(jì)之初要解決的主要問題是什么。
在對Spark的源碼進(jìn)行具體的走讀之前,如果想要快速對Spark的有一個整體性的認(rèn)識,閱讀Matei Zaharia做的Spark論文是一個非常不錯的選擇。
在閱讀該論文的基礎(chǔ)之上,再結(jié)合Spark作者在2012 Developer Meetup上做的演講Introduction to Spark Internals,那么對于Spark的內(nèi)部實(shí)現(xiàn)會有一個比較大概的了解。
有了上述的兩篇文章奠定基礎(chǔ)之后,再來進(jìn)行源碼閱讀,那么就會知道分析的重點(diǎn)及難點(diǎn)。
1. RDD――Resillient Distributed Dataset 彈性分布式數(shù)據(jù)集。
2. Operation――作用于RDD的各種操作分為transformation和action。
3. Job――作業(yè),一個JOB包含多個RDD及作用于相應(yīng)RDD上的各種operation。
4. Stage――一個作業(yè)分為多個階段。
5. Partition――數(shù)據(jù)分區(qū), 一個RDD中的數(shù)據(jù)可以分成多個不同的區(qū)。
6. DAG――Directed Acycle graph,有向無環(huán)圖,反應(yīng)RDD之間的依賴關(guān)系。
7. Narrow dependency――窄依賴,子RDD依賴于父RDD中固定的data partition。
8. Wide Dependency――寬依賴,子RDD對父RDD中的所有data partition都有依賴。
9. Caching Managenment――緩存管理,對RDD的中間計(jì)算結(jié)果進(jìn)行緩存管理以加快整體的處理速度。
RDD是只讀的數(shù)據(jù)分區(qū)集合,注意是數(shù)據(jù)集。
作用于RDD上的Operation分為transformantion和action。 經(jīng)Transformation處理之后,數(shù)據(jù)集中的內(nèi)容會發(fā)生更改,由數(shù)據(jù)集A轉(zhuǎn)換成為數(shù)據(jù)集B;而經(jīng)Action處理之后,數(shù)據(jù)集中的內(nèi)容會被歸約為一個具體的數(shù)值。
只有當(dāng)RDD上有action時,該RDD及其父RDD上的所有operation才會被提交到cluster中真正的被執(zhí)行。
從代碼到動態(tài)運(yùn)行,涉及到的組件如下圖所示。
演示代碼
val sc = new SparkContext("Spark://...", "MyJob", home, jars) val file = sc.textFile("hdfs://...") val errors = file.filter(_.contains("ERROR")) errors.cache() errors.count()
不管什么樣的靜態(tài)模型,其在動態(tài)運(yùn)行的時候無外乎由進(jìn)程,線程組成。
用Spark的術(shù)語來說,static view稱為dataset view,而dynamic view稱為parition view。關(guān)系如圖所示
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈