現在,Spark正在進行中。 Spark使用scala語言來加載和執行程序,還有python和java。 RDD用於存儲數據。但是,我無法理解Spark的架構,它如何在內部運行。Spark的內部工作
請告訴我Spark架構以及它如何在內部工作?
現在,Spark正在進行中。 Spark使用scala語言來加載和執行程序,還有python和java。 RDD用於存儲數據。但是,我無法理解Spark的架構,它如何在內部運行。Spark的內部工作
請告訴我Spark架構以及它如何在內部工作?
即使我一直在尋找的網站,瞭解星火的內部,下面是我可以學習和分享想到這裏,
星火圍繞一個彈性分佈式數據集的概念行健(RDD)這是可以並行操作的容錯組件的容錯集合。 RDD支持兩種類型的操作:轉換(從現有數據集創建新數據集),以及在數據集上運行計算後將值返回給驅動程序的操作。
星火轉換的RDD轉化成一種叫做DAG(有向無環圖),並開始執行,
在較高水平,當任何行動呼籲RDD,星火創建DAG並提交到DAG調度。
DAG調度程序將操作員劃分爲多個任務階段。一個階段由基於輸入數據分區的任務組成。 DAG調度程序一起管理運營商。對於例如許多地圖運營商可以安排在單一階段。 DAG調度程序的最終結果是一系列階段。
階段傳遞到任務計劃程序。任務計劃程序通過集羣管理器啓動任務(Spark Standalone/Yarn/Mesos)。任務調度程序不知道階段的依賴關係。
工作人員執行從站上的任務。
讓我們來看看Spark如何構建DAG。
在高層次上,可以對RDD應用兩種轉換,即窄轉換和寬轉換。廣泛的轉換基本上導致了階段邊界。
縮小轉換範圍 - 不需要跨分區對數據進行混洗。例如,地圖,過濾器和等。
寬改造 - 需要對數據進行洗牌例如,reduceByKey和等。
讓我們計算日誌消息多少出現在每個示例嚴重級別,
下面是一個嚴重等級啓動日誌文件,
INFO I'm Info message
WARN I'm a Warn message
INFO I'm another Info message
,並創建以下Scala代碼中提取相同,
val input = sc.textFile("log.txt")
val splitedLines = input.map(line => line.split(" "))
.map(words => (words(0), 1))
.reduceByKey{(a,b) => a + b}
命令序列隱式地定義將當動作稱爲以後使用RDD對象(RDD譜系)的DAG。每個RDD都維護一個指向一個或多個父級的指針,以及有關它與父級關係的類型的元數據。例如,當我們在RDD上調用val b = a.map()時,RDD b保持對其父a的引用,這是一個譜系。
要顯示RDD的血統,Spark提供了一個調試方法toDebugString()方法。例如上執行splitedLines toDebugString() RDD,將輸出以下,
(2) ShuffledRDD[6] at reduceByKey at <console>:25 []
+-(2) MapPartitionsRDD[5] at map at <console>:24 []
| MapPartitionsRDD[4] at map at <console>:23 []
| log.txt MapPartitionsRDD[1] at textFile at <console>:21 []
| log.txt HadoopRDD[0] at textFile at <console>:21 []
第一行(從底部)示出了輸入RDD。我們通過調用sc.textFile()來創建此RDD。請參閱下面從給定的RDD創建的DAG圖形的更多示意圖。
一旦DAG是建立,星火計劃程序創建一個物理執行計劃。如上所述,DAG調度程序將圖分成多個階段,階段根據轉換創建。狹隘的轉變將被分組(管線)成一個階段。因此,對於我們的例子中,星火可以建立兩個階段執行如下,
的DAG調度然後提交階段進入任務調度。提交的任務數量取決於textFile中存在的分區數量。 Fox例子考慮在這個例子中我們有4個分區,那麼如果有足夠的從/內核,將會有4個並行創建和提交的任務。下圖說明了這一點中更詳細,
更多詳細信息,我建議你去通過下面的YouTube視頻,其中星火創作者對DAG和執行計劃,終身深入的細節給。
嗨Santish我有一個快速的問題。你說reduceByKey是一個廣泛的轉換,因爲它「要求數據被混洗」。你能否詳細說明你的洗牌意味着什麼?這是否意味着你只是添加來自不同元組的值,所以你正在「洗牌」數據? – LP496
這應該給出一個非常詳細的圖形描述什麼是洗牌 - https://databricks.gitbooks.io/databricks-spark-knowledge-base/content/best_practices/prefer_reducebykey_over_groupbykey.html – Sathish
@Sathish尼斯解釋 – PVH