plsql如何執行存儲過程_如何理解Spark應用的執行過程

從Spark應用的提交到執行完成有很多步驟,為了便于理解,我們把應用執行的整個過程劃分為三個階段。而我們知道Spark有多種運行模式,不同模式下這三個階段的執行流程也不相同。

本文介紹這三個階段的劃分,并概要介紹不同模式下各個階段的執行流程,各個模式的詳細流程會在后面的文章進行分析。

應用執行的階段劃分

我們知道,Spark應用可以在多種模式下運行。所謂多種模式主要是針對資源分配方式來說的,Spark應用可以在yarn,k8s,mesos等分布式資源管理平臺上運行,也可以啟動自帶的master和worker端來分配和管理資源(standalone模式)。例如:我們可以通過以下命令來向yarn提交一個spark任務:

$SPARK_HOME/bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode client $SPARK_HOME/examples/jars/spark-examples*.jar

代碼1-3-1 spark應用提交命令

要注意的是,在執行以上應用提交命令時yarn資源管理集群必須已經啟動。另外,Spark應用的執行是通過Driver端和Executor端共同配合完成的。

要完成以上應用的執行,需要經歷很多步驟,為了便于更好的理解Spark應用從提交到執行完成的整個過程,我們把整個過程劃分成三個階段:

  • 應用的提交
  • 執行環境的準備
  • 任務的調度和執行

如圖1所示:

bad13c76742d93763a9721511872f37b.png
圖1 應用執行總體流程

不管以哪種模式運行,Spark應用的執行過程都可以劃分成這三個階段。下面對這三個階段分別進行說明。

三個階段概要說明

這三個階段以及每個階段要完成的目標如圖2所示。

50d6272fab7737ac485fb08bb537374e.png
圖2 Spark應用執行的3階段目標概述

? 圖2 Spark應用執行的3階段目標概述

我們根據以下代碼為例,來講解Spark應用執行的各個階段。

# 

第1階段:應用的提交

這個階段在Driver端完成,主要目標是:準備依賴包并確定Spark應用的執行主類。具體的任務包括:

  • 解析任務提交的參數,并對參數進行解析和保存。
  • 準備(可能會下載)任務啟動參數指定的依賴文件或程序包。
  • 根據Spark應用的執行模式和應用的編寫語言,來確定執行的主類名稱。
  • 實例化執行主類,生成SparkApplication對象,并調用SparkApplication#start()函數來運行Spark應用(若是Java或scala代碼其實是:執行Spark應用中的main函數)。

注意:第1階段完成時,Driver端并沒有向資源管理平臺申請任何資源,也沒有啟動任何Spark內部的服務。

第2階段:執行環境的準備

通過第1階段,已經找到了運行在Driver端的Spark應用的執行主類,并創建了SparkApplication對象:app。此時,在app.start()函數中會直接調用主類的main函數開始執行應用,從而進入第2階段。

第2階段主要目標是:創建SparkSession(包括SparkContext和SparkEnv),完成資源的申請和Executor的創建。第2階段完成后Task的執行環境就準備好了。

也就是說,第2階段不僅會在Driver端進行初始化,而且還要準備好Executor。這一階段的任務主要是在Driver端執行創建SparkSession的代碼來完成,也就是執行下面一行代碼:

val 

第2階段的Driver端主要完成以下步驟:

  • 創建SparkContext和SparkEnv對象,在創建這兩個對象時,向Cluster Manager申請資源,啟動各個服務模塊,并對服務模塊進行初始化。
  • 這些服務模塊包括:DAG調度服務,任務調度服務,shuffle服務,文件傳輸服務,數據塊管理服務,內存管理服務等。

第2階段的Executor端主要完成以下步驟:

  • Driver端向Cluster Manager申請資源,若是Yarn模式會在NodeManager上創建ApplicationMaster,并由ApplicationMaster向Cluster Manager來申請資源,并啟動Container,在Container中啟動Executor。
  • 在啟動Executor時向Driver端注冊BlockManager服務,并創建心跳服務RPC環境,通過該RPC環境向Driver匯報Executor的狀態信息。

詳細的執行步驟,會在后面介紹每種模式的運行原理時,詳細分析。第2階段執行完成后的Spark集群狀態如下:

f6ad07736d3798ca56c3a7232efb65d7.png
執行環境準備完成后Spark集群的狀態

第3階段:任務的調度和執行

通過第2階段已經完成了Task執行環境的初始化,此時,在Driver端已經完成了SparkContext和SparkEnv的創建,資源已經申請到了,并且已經啟動了Executor。

這一階段會執行接下來的數據處理的代碼:

val 

第3階段Driver端主要完成以下步驟:

  • 執行Spark的處理代碼,當執行map操作時,生成新的RDD;
  • 當執行Action操作時,觸發Job的提交,此時會執行以下步驟:
  • 根據RDD的血緣,把Job劃分成相互依賴的Stage;
  • 把每個Stage拆分成一個或多個Task;
  • 把這些Task提交給已經創建好的Executor去執行;
  • 獲取Executor的執行狀態信息,直到Executor完成所有Task的執行;
  • 獲取執行結果和最終的執行狀態。

小結

本節介紹了Spark應用的執行過程,通過本節的學習應該對Spark應用的執行過程有一個總體的理解。接下來會根據具體的運行模式來詳細分析每個階段的執行步驟。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276792.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276792.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276792.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS高級:事件冒泡和事件捕獲;

1、事件:瀏覽器客戶端上客戶觸發的行為成為時事件;所有的事件都是天生自帶的,不需要我們去綁定,只需要我們去觸發 當用戶觸發一個事件時,瀏覽器的所有詳細信息都存在一個叫做event的對象上,我們把它叫做事件…

Vue于React特性對比(三)

最近重學React,再次和vue做了對比。 一,為官方插件提供便利的第三方插件橫行 React僅僅是一個ui框架。雖然官方提供了redux,react-router;但也有第三方的redux-thunk,redux-saga;還有react-router-dom。 而…

MYsql 安裝后啟動服務1067錯誤

今天很奇怪的問題, 新安裝好的數據庫 啟動服務的時候就提示1067錯誤, 在網上找了資料是這樣說的:MYSQL1067錯誤這里看 *************1安裝MYSQL后更改了RO&am…

vc如何打開plt圖像_圖像基本操作-open cv

import cv2 import matplotlib.pyplot as plt import numpy as np %matplotlib inline img cv2.imread(revolte.jpg) img # 讀取的是array 格式 array([[[240, 243, 255],[239, 242, 255],[238, 241, 255],...,def cv_show(name,image):cv2.imshow(name,image)cv2.waitKey(0)c…

自學編程需要注意什么?

1。選合適自己的職業,不同的職業門檻不一樣,難度不一樣,或多或少總有差別。 笨的選JS,有點底子的選Java,半調子的選Android或者是IOS-如果這兩個職業還沒完蛋的話。 不想寫代碼的選PM和UI,要求不高的選QA&a…

帆軟報表(finereport)table塊鉆取,返回記住table塊位置

<1>首先table塊加初始化事件&#xff0c;idex為參數&#xff0c;參數值為$tab_idexsetTimeout(function(){_g().getWidgetByName("tabpane0").showCardByIndex(Number(idex)); },10) <2>在table塊鉆取位置&#xff0c;加js事件鉆取var u navigator.user…

python調用api應用接口_Python接口測試之urllib2庫應用

在接口測試中或者說在網絡爬蟲中&#xff0c;urllib2庫是必須要掌握的一個庫&#xff0c;當然還有優秀的requests庫&#xff0c;今天重點來說urllib2庫在接口測試中的應用。urllib2定義了很多的函數和類&#xff0c;這些函數和類能夠幫助我們在復雜情況下獲取URLS的內容。這些情…

破解MS Word 的只讀密碼限制

如果你有Microsoft Office XP 或者 Microsoft Office 2003&#xff0c;你可以使用Microsoft Script Editor 來查看&#xff08;使用AltShiftF11 快捷鍵切換&#xff09;被限制的Word 文檔的HTML&#xff0d;Code。當Word 文檔在Microsoft Script Editor打開后&#xff0c;搜索關…

CSS3透明背景表單

在線演示 本地下載

r-studio掃描后各種顏色_iPhone手機備忘錄,原來還隱藏著掃描儀,你不會還不知道吧?...

大家好&#xff0c;今天就來給大家講一講&#xff0c;iPhone手機備忘錄里面的一個隱藏功能&#xff0c;大家對手機備忘錄應該都不陌生吧&#xff0c;iPhone手機的備忘錄里有一個掃描儀的功能&#xff0c;可以將紙質文檔變成電子檔&#xff0c;不知道的小伙伴就和我一起來看看吧…

今早新聞的翻譯

踏切で人身事故 東上線亂れ&#xff14;萬人に影響  &#xff11;&#xff15;日午前&#xff17;時&#xff12;&#xff10;分ごろ、東京都板橋區常盤臺&#xff13;丁目の東武東上線ときわ臺―上板橋間の踏切で遮斷機の下をくぐった女性が成増発池袋行き普通電車にはねられ…

MySQL保留2位小數

1、round(x,d)&#xff0c;四舍五入。round(x) ,其實就是round(x,0),也就是默認d為0 select round(110.35,1); # 110.4 2、TRUNCATE(x,d)&#xff0c;直接截取需要保留的小數位 select TRUNCATE(110.35,1); # 110.3 3、FORMAT&#xff08;x,d&#xff09;&#xff0c;四舍五入…

TiDB 在小米的應用實踐

作者&#xff1a;張良&#xff0c;小米 DBA 負責人&#xff1b;潘友飛&#xff0c;小米 DBA&#xff1b;王必文&#xff0c;小米開發工程師。一、應用場景介紹 MIUI 是小米公司旗下基于 Android 系統深度優化、定制、開發的第三方手機操作系統&#xff0c;也是小米的第一個產品…

java圖片識別查看器模擬_[轉載]windows照片查看器無法顯示圖片內存不足

問題描述最近在使用Windows照片查看器打開一個jpg文件的時候異常Windows照片查看器無法顯示此圖片&#xff0c;因為計算機上的可用內存可能不足。請關閉一些目前沒有使用的程序或者釋放部分硬盤空間(如果硬盤幾乎已滿)&#xff0c;然后重試問題分析這時我們按F11或者圖片下方中…

等寬字體

摘抄了一個編程用字體選擇標準&#xff0c;供各位參考&#xff1a; 1. 所有字符等寬&#xff1b; 2. 簡潔、清晰、規范的字符形體&#xff1b; 3. 支持ASCII碼為128以上的擴展字符集&#xff1b; 4. 空白字符(ASCII: 0x20)與其他字符等寬&#xff1b; 5. 1、l和i等三個字符易于…

海量數據索引與近似最近鄰隨記

最近鄰問題(NN) 將次數看成向量&#xff0c;然后我們就可以比對向量的距離(歐式距離&#xff0c;余弦距離)。數據中會有一些異常點&#xff0c;這些異常點會導致結果的不穩定。這種思想非常的不穩定&#xff0c;因為他只基于一個樣本來做最后類別的判定。K最近鄰算法(NN > K…

MySQL時間格式TIMESTAMP和DATETIME的區別

時區&#xff0c;timestamp會跟隨設置的時區變化而變化&#xff0c;而datetime保存的是絕對值不會變化 自動更新&#xff0c;insert、update數據時&#xff0c;可以設置timestamp列自動以當前時間(CURRENT_TIMESTAMP)填充/更新 占用存儲空間不同&#xff0c;timestamp儲存占用…

python c 選擇_C和Python,小白應該選擇學習哪門語言?

首先&#xff0c;需要對兩門語言進行初步認識&#xff0c;C語言是一門通用性的編程原因&#xff0c;為什么說通用呢?是因為它能夠做很多低級、底層的處理&#xff0c;同時具有良好的跨平臺性&#xff0c;C語言可以按照一定的標準在多種計算機平臺上進行編譯&#xff0c;包含嵌…

WaitForSingleObject的用法

WaitForSingleObject的用法 1.WaitForSingleObject 的用法 DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds ); 參數 hHandle 是一個事件的句柄&#xff0c;第二個參數 dwMilliseconds 是時間間隔。如果時間是有信…

pom.xml里發布和下載包

1.下載包 在<project>標簽中 <repositories><repository><id>nexus</id><url>http://10.39.93.105:8081/repository/maven-public/</url><releases><enabled>true</enabled></releases><snapshots>&l…