spark-使用總結-大數據基礎入門

1、partition數目

spark的輸入可能以多個文件的形式存儲在HDFS上,每個File都包含了很多塊,稱爲Block。

當Spark讀取這些文件作爲輸入時,會根據具體數據格式對應的InputFormat進行解析,一般是將若干個Block合併成一個輸入分片,稱爲InputSplit,注意InputSplit不能跨越文件。
隨後將爲這些輸入分片生成具體的Task。InputSplit與Task是一一對應的關係。
隨後這些具體的Task每個都會被分配到集羣上的某個節點的某個Executor去執行。
每個節點可以起一個或多個Executor。
每個Executor由若干core組成,每個Executor的每個core一次只能執行一個Task。
每個Task執行的結果就是生成了目標RDD的一個partiton。
注意: 這裏的core是虛擬的core而不是機器的物理CPU核,可以理解爲就是Executor的一個工作線程。

而 Task被執行的併發度 = Executor數目 * 每個Executor核數。

至於partition的數目:

對於數據讀入階段,例如sc.textFile,輸入文件被劃分爲多少InputSplit就會需要多少初始Task。
在Map階段partition數目保持不變。
在Reduce階段,RDD的聚合會觸發shuffle操作,聚合後的RDD的partition數目跟具體操作有關,例如repartition操作會聚合成指定分區數,還有一些算子是可配置的。
2、spark部署模式的對比

這篇博客中對三種部署模式做了對比,請參考部署模式對比:總結如下:

mesos似乎是Spark更好的選擇,也是被官方推薦的
但如果你同時運行hadoop和Spark,從兼容性上考慮,Yarn似乎是更好的選擇,畢竟是親生的。Spark on Yarn運行的也不錯。
如果你不僅運行了hadoop,spark。還在資源管理上運行了docker,Mesos似乎更加通用。
standalone小規模計算集羣,似乎更適合!
對於yarn模式下的client和cluster對比,請參考client和cluster的對比:
理解YARN-Client和YARN-Cluster深層次的區別之前先清楚一個概念:Application Master。在YARN中,每個Application實例都有一個ApplicationMaster進程,它是Application啓動的第一個容器。它負責和ResourceManager打交道並請求資源,獲取資源之後告訴NodeManager爲其啓動Container。從深層次的含義講YARN-Cluster和YARN-Client模式的區別其實就是ApplicationMaster進程的區別
YARN-Cluster模式下,Driver運行在AM(Application Master)中,它負責向YARN申請資源,並監督作業的運行狀況。當用戶提交了作業之後,就可以關掉Client,作業會繼續在YARN上運行,因而YARN-Cluster模式不適合運行交互類型的作業
YARN-Client模式下,Application Master僅僅向YARN請求Executor,Client會和請求的Container通信來調度他們工作,也就是說Client不能離開
(1)YarnCluster的Driver是在集羣的某一臺NM上,但是Yarn-Client就是在RM的機器上;
(2)而Driver會和Executors進行通信,所以Yarn_cluster在提交App之後可以關閉Client,而Yarn-Client不可以;

(3)Yarn-Cluster適合生產環境,Yarn-Client適合交互和調試。

3、spark運行原理

spark應用程序進行各種transformation的計算,最後通過action觸發job。提交之後,構建SparkContext,通過sparkContext根據RDD的依賴關係構建DAG圖,DAG圖提交給DAGScheduler進行解析,解析時是以shuffle爲邊界,反向解析,構建stage,stage之間也有依賴關係,這個過程就是對DAG圖進行解析劃分stage,並且計算出各個stage之間的依賴關係。stage以stageSet方式提交給TaskScheduler,然後將一個個TaskSet提交給底層調度器,在spark中是提交給taskScheduler處理,生成TaskSet manager,最後提交給executor進行計算,executor多線程計算,完成task任務後,將完成信息提交給schedulerBackend,由它將任務完成的信息提交給TaskScheduler。TaskScheduler反饋信息給TaskSetManager,刪除該task任務,執行下一個任務。同時TaskScheduler將完成的結果插入到成功隊列裏,加入之後返回加入成功的信息。TaskScheduler將任務處理成功的信息傳給TaskSet Manager。全部任務完成後TaskSet Manager將結果反饋給DAGScheduler。如果屬於resultTask,交給JobListener。如果不屬於resultTask,保存結果。全部運行完之後寫入數據。

很多人都知道我有大數據培訓資料,都天真的以爲我有全套的大數據開發、hadoop、spark等視頻學習資料。我想說你們是對的,我的確有大數據開發、hadoop、spark的全套視頻資料。
如果你對大數據開發感興趣可以加口羣領取免費學習資料: 763835121

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章