梳理一下spark中關於併發度涉及的幾個概念file,block,split,task,partition,rdd以及節點數、executor數、core數目的關係。
輸入可能以多個檔案的形式儲存在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操作會聚合成指定分割槽數,還有一些運算元是可配置的。
jobspark中的job和mr中job不一樣不一樣。mr中job主要是map或者reduce job。而spark的job其實很好區別,乙個action運算元就算乙個job,比方說count,first等。
task
task是spark中最小的執行單元。rdd一般是帶有partitions的,每個partition的在乙個executor上的執行是乙個task任務。
stage
stage概念是spark中獨有的。一般而言乙個job會切換成一定數量的stage。各個stage之間按照順序執行。至於stage是怎麼切分的,首選得知道spark**中提到的narrow dependency(窄依賴)和wide dependency( 寬依賴)的概念。其實很好區分,看一下父rdd中的資料是否進入不同的子rdd,如果只進入到乙個子rdd則是窄依賴,否則就是寬依賴。寬依賴和窄依賴的邊界就是stage的劃分點
Spark基礎概念梳理
因為最近在學習與使用spark,所以對一些基礎概念與術語做一些梳理。用來加深映像同時方便後續複習 spark是乙個基於記憶體的分布式計算框架,可無縫整合於現有的hadoop生態體系。主要包括四大元件 spark streaming spark sql spark mllib和spark graphx...
Spark機器學習過程梳理
最近半個月開始研究spark的機器學習演算法,由於工作原因,其實現在還沒有真正開始機器學習演算法的研究,只是做了前期大量的準備,現在把早年學習的,正在學習的和將要學習的一起做個梳理,整理乙個spark機器學習完整流程。本文推薦的書籍注重通俗和實戰。linux的學習推薦 鳥哥的linux私房菜 基礎篇...
spark關鍵版本簡要梳理
好久沒有看 spark 了,發現 spark 都開始發力 ai了。簡單梳理下 spark 的發展脈絡如下 1 spark 0.x 主要對標 mapreduce 用記憶體計算的能力替換 mapreduce 依賴磁碟,最主要的概念就是 rdd。2 最主要解決是易用性問題,用 sparksql 統一了程式...