1. 程式人生 > >理解Spark的執行機制

理解Spark的執行機制

Spark生態系統目前已經非常成熟了,有很多型別的任務都可以使用spark完成,我們先看下spark生態系統的組成:

image

spark的核心主要由3個模組組成:

(1)spark core 是spark的最底層的程式設計實現,定義了許多的函式及方法,是所有spark元件的基礎依賴

(2)spark ecosystems 是spark裡面的一些高階元件,基本就是我們最常用的框架

(3)resource management 負責spark任務的排程

平時我們開發過程中,基本上使用的都是第二層裡面的一些框架,這裡面使用最多的莫過於spark sql和spark streaming了。在對spark整個生態系統有一個基本瞭解後,下面我們就關注的是其執行機制了,只有解了執行機制,才會對我們使用程式,或者排查問題以及效能調優起到很大的幫助。

下面我們看下spark任務的執行機制如下圖:

image

Spark相關一些術語解釋:

(一)Driver program

driver就是我們編寫的spark應用程式,用來建立sparkcontext或者sparksession,driver會和cluster mananer通訊,並分配task到executor上執行

(二)Cluster Manager

負責整個程式的資源排程,目前的主要排程器有:

YARN

Spark Standalone

Mesos

(三)Executors

Executors其實是一個獨立的JVM程序,在每個工作節點上會起一個,主要用來執行task,一個executor內,可以同時並行的執行多個task。

(四)Job

Job是使用者程式一個完整的處理流程,是邏輯的叫法。

(五)Stage

一個Job可以包含多個Stage,Stage之間是序列的,State的觸發是由一些shuffle,reduceBy,save動作產生的

(六)Task

一個Stage可以包含多個task,比如sc.textFile("/xxxx").map().filter(),其中map和filter就分別是一個task。每個task的輸出就是下一個task的輸出。

(七)Partition

partition是spark裡面資料來源的一部分,一個完整的資料來源會被spark切分成多個partition以方便spark可以傳送到多個executor上去並行執行任務。

(八)RDD

RDD是分散式彈性資料集,在spark裡面一個數據源就可以看成是一個大的RDD,RDD由多個partition組成,spark載入的資料就會被存在RDD裡面,當然在RDD內部其實是切成多個partition了。

那麼問題來了一個spark job是如何執行的?

(1)我們寫好的spark程式,也稱驅動程式,會向Cluster Manager提交一個job

(2)Cluster Manager會檢查資料本地行並尋找一個最合適的節點來排程任務

(3)job會被拆分成不同stage,每個stage又會被拆分成多個task

(4)驅動程式傳送task到executor上執行任務

(5)驅動程式會跟蹤每個task的執行情況,並更新到master node節點上,這一點我們可以在spark master UI上進行檢視

(6)job完成,所有節點的資料會被最終再次聚合到master節點上,包含了平均耗時,最大耗時,中位數等等指標。

最後關於spark的並行執行策略在總結下:

首先我們的資料來源會被載入到RDD裡面,在RDD裡面整個資料來源會被切分成多個partition,partition的個數實際就是我們執行任務的最大並行度,每個task會負責一個partition的資料,而每個spark任務最大可以執行task的個數=executor的個數 * 每個executor的cores的個數。對應到submit指令碼中引數就是:

--num-executors 
--executor-cores

根據spark官網的建議每個executor上建議分配置的core的個數應該在3到5之間,如果分配的太多會生成大量的小task執行,task的序列化和傳輸都會比較耗效能,如果分配的task數量太少,那麼我們的executor大部分時候機器資源就會浪費,所以分配的個數一般在3到5個就行,這一點需要注意。

附錄:

Spark中RDD,DataFrame,DataSet的區別:

1、RDD支援面向java、scala物件,編譯時強型別檢查。缺點,序列化非常消耗時間(叢集分發和磁碟儲存),不能充分利用系統的高階優化能力(如off-heap),垃圾回收物件開銷大。

2、DataFrame支援資料集的模式表示(即資料列的概念),所以叢集分發資料時並不需要序列化,能充分利用系統高階優化能力(off-heap),引入查詢計劃提高效能。缺點,DataFrame的列型別,在編譯時無法判斷型別,會產生執行時錯誤。

3、Dataset即支援資料集的模式表示,又支援java、scala物件的型別檢查能力。兩者通過引入一種編碼、解碼機制來實現。

參考連結:

相關推薦

Spark學習筆記4——spark執行機制

Spark架構及執行機制 Spark執行架構包括叢集資源管理器(Cluster Manager)、執行作業任務的工作節點(Worker Node)、每個應用的任務控制節點(Driver)和每個工作節點上負責具體任務的執行程序(Executor)。其中,叢集資源管理器可以是S

Spark 執行機制

1. Spark執行基本流程 構建Spark Application的執行環境(啟動SparkContext),SparkContext向資源管理器(可以是Standalone、Mesos或YARN)註冊並申請執行Executor資源; 資源管理器分配Executor

理解JavaScript 執行機制及非同步回撥(setTimeout/setInterval/Promise)

對於javascript執行機制的理解一直都是混淆不清。在面試或工作的過程中,也經常會遇到程式碼執行順序或函式生命週期載入等類似的問題,這些多多少少都與javascript的執行機制相關。今天發現一篇很好的文章,欣喜之餘,加以轉載,供感興趣的小夥伴學習,感謝作者分享。 不論

理解Spark執行機制

Spark生態系統目前已經非常成熟了,有很多型別的任務都可以使用spark完成,我們先看下spark生態系統的組成: spark的核心主要由3個模組組成: (1)spark core 是spark的最底層的程式設計實現,定義了許多的函式及方法,是所有spark元件

深入理解JVM_java代碼的執行機制01

功能 存在 oot 對象實例 符號 token 類型 格式 找對象 本章學習重點: 1、Jvm: 如何將java代碼編譯為class文件。 如何裝載class文件及如何執行class文件。 jvm如何進行內存分配和回收。 jvm多線程

深入理解Dalvik虛擬機- 解釋器的執行機制

util dlink stat counter before expose 加鎖 enter 機制 Dalvik的指令運行是解釋器+JIT的方式,解釋器就

深入理解js引擎的執行機制

深入解讀js引擎的執行機制 最近在反省,很多知識都是隻會用,不理解底層的知識。所以在開發過程中遇到一些奇怪的比較難解決的bug,在思考的時候就會收到限制。所以,在這裡一點一點補充基礎知識吧。 在閱讀之前,請先記住兩點: js是單執行緒語言 js的Event Loop

10分鐘理解JS引擎的執行機制 event loop ---齊梟飛前端構架

首先,請牢記2點: (1) JS是單執行緒語言 (2) JS的Event Loop是JS的執行機制。深入瞭解JS的執行,就等於深入瞭解JS裡的event loop 技術的出現,都跟現實世界裡的應用場景密切相關的。 同樣的,我們就結合現實場景,來回答這三個問題 (

spark on yarn圖形化任務監控利器:History-server幫你理解spark的任務執行過程

在spark on yarn任務進行時,大家都指導用4040埠監控(預設是,設定其他或者多個任務同時會遞增等例外); 辣麼,任務結束了,還要看圖形化介面,那就要開history-server了。CDH安裝spark on yarn的時候,就自動安裝了history的例項。

深入理解JavaScript的執行機制(同步和非同步)

不論是面試求職,還是日常開發工作,我們經常會遇到這樣的情況:給定的幾行程式碼,我們需要知道其輸出內容和順序。因為JavaScript是一門單執行緒語言,所以我們可以得出結論: JavaScript是按照語句出現的順序執行的 所以我們以為JS都是這樣的:

從一個多執行緒的例子,來理解Sleep的機制和用法

這個例子是兩個執行緒用於售票,保證輪流售票的有序性。 #include <windows.h> #include <iostream> DWORD WINAPI Fun1Proc(LPVOID lpParameter);//執行緒1 DWORD W

《深入理解Spark:核心思想與原始碼分析》——SparkContext的初始化(伯篇)——執行環境與元資料清理器

《深入理解Spark:核心思想與原始碼分析》一書第一章的內容請看連結《第1章 環境準備》 《深入理解Spark:核心思想與原始碼分析》一書第二章的內容請看連結《第2章 SPARK設計理念與基本架構》 由於本書的第3章內容較多,所以打算分別開闢四篇隨筆分別展現。本文展現第3章第一部分的內容: 第3章

第42課: Spark Broadcast內幕解密:Broadcast執行機制徹底解密、Broadcast原始碼解析、Broadcast最佳實踐

第42課:  Spark Broadcast內幕解密:Broadcast執行機制徹底解密、Broadcast原始碼解析、Broadcast最佳實踐Broadcast在機器學習、圖計算、構建日常的各種演算法中到處可見。 Broadcast就是將資料從一個節點發送到其它的節點上;

Java程式執行機制和JVM的理解

Java語言編寫的程式需要經過編譯,但是這個編譯步驟不會生成特定的平臺的機器碼,而是生成一種與平臺無關的位元組碼(也就是*.class檔案)。當然,這種位元組碼不是可執行的,所以必須要使用java直譯器來執行。所以,Java程式必須先通過編譯,再通過解釋,才可執行。因此,可以

spark基礎之排程器執行機制簡述

一 概述 驅動程式在啟動的時候,首先會初始化SparkContext,初始化SparkContext的時候,就會建立DAGScheduler、TaskScheduler、SchedulerBacken

jfinal 執行機制,我的理解

入口: JFinalFilter  中 private Handler handler;  //子類中的ActionHandler.actionMapping包裝了  連結跟具體某個方法的對應關係(action),handle方法裡面的ActionInvocation包裝了

Spark工作機制詳解】 執行機制

Spark主要包括  排程與任務分配、I/O模組、通訊控制模組、容錯模組  、 Shuffle模組。 Spark 按照   ①應用  application  ②作業 job   ③ stage  ④ task   四個層次進行排程,採用經典的FIFO和FAIR等排程演

spark:架構+執行機制的一些總結--50

Hadoop中包含計算框架MapReduce和分散式檔案系統HDFS,spark是一個計算框架 // 中間結果:spark儲存到記憶體、Hadoop儲存到磁碟,spark將執行模型抽象為通用的有向無環圖通用計劃(DAG) //////////////////////////

10分鐘理解JS引擎的執行機制

作者: ziwei3749 https://segmentfault.com/a/1190000012806637 首先,請牢記2點: JS是單執行緒語言 JS的Event Loop是JS的執行機制。深入瞭解JS的執行,就等於深入瞭解JS裡的event

理解ASP.NET MVC底層執行機制

ASP.NET MVC有三大元件(即模型、檢視、控制器)。所謂模型,就是MVC需要提供的資料來源,負責資料的訪問和維護。所謂檢視,就是用於顯示模型中資料的使用者介面。所謂控制器,就是用來處理使用者的輸入,負責改變模型的狀態並選擇適當的檢視來顯示模型的資料。以下是我繪製的MV