1.spark提交流程
sparkContext其實是與一個集群建立一個鏈接,當你停掉它之后
就會和集群斷開鏈接,則屬於這個資源的Excutor就會釋放掉了,Driver
向Master申請資源,Master會向work分配資源,則會在wordCount里面會
構建Rdd,則它會會構建DAG,DAG又叫有向無環圖,則有向無環圖一旦觸發Action
的時候,這個時候就會提交任務,此時,這些任務就不會經過Master,如果經過Master
則Master的壓力會很大,其實Excutor一旦啟動了,它就會向Driver建立連接,Excutor
它可能存在多個機器上面,則Driver不知道Excutor在哪里,但是Excutor知道Driver
在哪里(通過Mastre來知道的),則此時Excutor會和Driver進行rpc通信,則此時Driver則會
提交計算任務(以stage進行分開處理,其中stage里面是一個個並行的task),則
提交的任務在Excutor里面執行,則在Excutor里面有這些任務的執行進度,則
Excutor會向這個Master里面匯報進度,Driver就會知道它執行到了哪里,如果
執行失敗,則Driver可能會執行重試,可能會例如,如果有10個項目,其中9個項目
都執行完了,但是有一個項目會很慢很慢,則此時Driver會在啟動一個項目,
看這兩個項目,誰快就用誰,對於catch,則Excutor只會catch屬於它的的分區
2.rdd緩存
spark計算特別快的原因,就是在不同的操作中可以在內存中持久化或緩存
多個數據集
3.容量的大小
關於容量大小,一般來說我們可以這樣的假設,2個字段,100萬條數據,50M,如果要說
可以往后面一次計算
4.關於內存分配
在spark的計算過程中,如果我們的一台worker的內存是2g,但是我們可以給這個work
啟動spark,我可以只給他分1個g的內存,就是說這個worker里面,不管在執行任何操作,
都只用這1個g的內存
5.checkpoint(檢查點)
假如在進行rdd的計算的過程中,如果前面計算的結果之后,把這個結果保存在磁盤當中,
但是磁盤燒了,則此時這個里面的數據就會消失,則此時我們就會從頭開始記性計算,
但是這樣又有一些浪費,我們可以設置一個檢查點(checkpoint),把某些計算出來的結果
存在一個地方,當磁盤損壞,我們就可以回退到這些檢查點當中,很想快照的意味
(這個就一般作用於比較復雜的運用,當我們保存這個checkpoint的時候,他會主動的去尋找
這個checkpoint里面保存的值)我們可以防止檢查點的公共存放目錄
sc.setCheckpointDir("hdfs://192.168.109.136:9000/ck2016mypoint"),設置檢查點存放的地方
則我們此時hdfs dfs -ls /,我們就可以發現這個檢查點存放的目錄
val rdd = sc.textFile("hdfs://192.168.109.136:9000/wj/input19")
rdd.checkpoint
rdd.count(運行action)
則此時回啟動兩個方法,第一個方法進行計算,另一個方法則把結果寫到checkpoint
寫到指定的目錄(這個存放checkpoint的地方葯可用性高,所以我們采用hdfs),
則此時把rdd的內容寫到checkpoint里面
6.關於collect,cache,checkpoint的區別
collect是一個Action類型的RDD,而cache則是,當我們xxx.cache,則這個xxx的rdd在進行
Action的方法(collect),則會把這個RDD里面的內容緩存進內存,則當我們再一次進行計算的
時候,則會從內存中進行讀取,而checkpoint這個值,這個是把這個rdd的值緩存進入一個公共
的目錄(這個目錄要有高的可用性,即使內存中丟失,這個也不會丟失)