chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

spark運行的基本流程

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-02 10:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言:

由于最近對spark的運行流程非常感興趣,所以閱讀了《Spark大數(shù)據(jù)處理:技術(shù)、應(yīng)用與性能優(yōu)化》一書。通過這本書的學(xué)習(xí),了解了spark的核心技術(shù)、實際應(yīng)用場景以及性能優(yōu)化的方法。本文旨在記錄和分享下spark運行的基本流程。

一、spark的基礎(chǔ)組件及其概念

1. ClusterManager

在Standalone模式中即為Master,控制整個集群,監(jiān)控Worker。在YARN模式中為資源管理器。

2. Application

用戶自定義的spark程序, 用戶提交后, Spark為App分配資源, 將程序轉(zhuǎn)換并執(zhí)行。

3. Driver

在Spark中,driver是一個核心概念,指的是Spark應(yīng)用程序的主進(jìn)程,也稱為主節(jié)點。負(fù)責(zé)運行Application的main( ) 函數(shù)并創(chuàng)建SparkContext。

4. Worker

從節(jié)點,負(fù)責(zé)控制計算節(jié)點,啟動Executor或Driver。在YARN模式中為NodeManager,負(fù)責(zé)計算節(jié)點的控制。

5. Executor

執(zhí)行器,在Worker節(jié)點上執(zhí)行任務(wù)的組件、用于啟動線程池運行任務(wù)。每個Application擁有獨立的一組Executors。

6. RDD Graph

RDD是spark的核心結(jié)構(gòu), 可以通過一系列算子進(jìn)行操作( 主要有Transformation和Action操作) 。 當(dāng)RDD遇到Action算子時, 將之前的所有算子形成一個有向無環(huán)圖( DAG) , 也就是RDD Graph。 再在Spark中轉(zhuǎn)化為Job, 提交到集群執(zhí)行。一個App中可以包含多個Job。

7. Job

一個RDD Graph觸發(fā)的作業(yè), 往往由Spark Action算子觸發(fā), 在SparkContext中通過runJob方法向Spark提交Job。

8. Stage

每個Job會根據(jù)RDD的寬依賴關(guān)系被切分很多Stage, 每個Stage中包含一組相同的Task, 這一組Task也叫TaskSet。

9. Task

一個分區(qū)對應(yīng)一個Task, Task執(zhí)行RDD中對應(yīng)Stage中包含的算子。 Task被封裝好后放入Executor的線程池中執(zhí)行。

二、spark架構(gòu)

spark架構(gòu)采用了分布式計算中的Master-Slave模型。Master作為整個集群的控制器,負(fù)責(zé)整個集群的正常運行;Worker相當(dāng)于是計算節(jié)點,接收主節(jié)點命令與進(jìn)行狀態(tài)匯報;Executor負(fù)責(zé)任務(wù)的執(zhí)行;Client作為用戶的客戶端負(fù)責(zé)提交應(yīng)用,Driver負(fù)責(zé)控制一個應(yīng)用的執(zhí)行。

?

??

如圖所示,spark集群部署后,需要在主節(jié)點和從節(jié)點分別啟動Master進(jìn)程和Worker進(jìn)程,對整個集群進(jìn)行控制。在一個spark應(yīng)用的執(zhí)行過程中,Driver和Worker是兩個重要角色。Driver程序是應(yīng)用邏輯執(zhí)行的起點,負(fù)責(zé)作業(yè)的調(diào)度,即Task任務(wù)的分發(fā),而多個Worker用來管理計算節(jié)點和創(chuàng)建Executor并行處理任務(wù)。在執(zhí)行階段,Driver會將Task和Task所依賴的file和jar序列化后傳遞給對應(yīng)的Worker機(jī)器,同時Executor對相應(yīng)數(shù)據(jù)分區(qū)的任務(wù)進(jìn)行處理。

三、Spark的工作機(jī)制

1. Spark的整體流程

Client提交應(yīng)用,Master找到一個Worker啟動Driver,Driver向Master或者資源管理器申請資源,之后將應(yīng)用轉(zhuǎn)化為RDD Graph,再由DAG Scheduler將RDD Graph轉(zhuǎn)化為Stage的有向無環(huán)圖提交給TaskScheduler,由TaskScheduler提交任務(wù)給Executor執(zhí)行。

?

??

如圖所示,在spark應(yīng)用中,整個執(zhí)行流程在邏輯上會形成有向無環(huán)圖。Action算子觸發(fā)之后,將所有累計的算子形成一個有向無環(huán)圖,然后由調(diào)度器調(diào)度該圖上的任務(wù)進(jìn)行運算。spark根據(jù)RDD之間不同的依賴關(guān)系切分形成不同的階段(stage),一個階段包含一系列函數(shù)執(zhí)行流水線。途中A、B、C、D、E、F、分別代表不同的RDD,RDD內(nèi)的方框代表分區(qū)。數(shù)據(jù)從HDFS輸入spark,形成RDD A和RDD C,RDD C上執(zhí)行map操作,轉(zhuǎn)換為RDD D,RDD B和RDD E執(zhí)行Join操作,轉(zhuǎn)換為F。而在B和E連接轉(zhuǎn)化為F的過程中又會執(zhí)行Shuffle,最后RDD F通過函數(shù)saveAsSequenceFile輸出并保存到HDFS中。

2. Stage的劃分

如上面這個運行流程所示,在 Apache Spark 中,一個作業(yè)(Job)通常會被劃分為多個階段(Stage),每個階段包含一組并行的任務(wù)(Task)。這種劃分主要是基于數(shù)據(jù)寬窄依賴進(jìn)行的,以便更有效地進(jìn)行任務(wù)調(diào)度和執(zhí)行。以下是關(guān)于 Spark 中 Stage 劃分的一些關(guān)鍵點:

?寬窄依賴

窄依賴(Narrow Dependency):父 RDD 的每個分區(qū)只會被一個子 RDD 的分區(qū)使用,或者多個子 RDD 分區(qū)計算時都使用同一個父 RDD 分區(qū)。窄依賴允許在一個集群節(jié)點上以流水線的方式(pipeline)計算所有父分區(qū),不會造成網(wǎng)絡(luò)之間的數(shù)據(jù)混洗。

寬依賴(Wide Dependency):父 RDD 的每個分區(qū)都可能被多個子 RDD 分區(qū)所使用,會引起 shuffle。

?Stage的劃分

Spark 根據(jù) RDD 之間的寬窄依賴關(guān)系來劃分 Stage。遇到寬依賴就劃分一個 Stage,每個 Stage 里面包含多個 Task,Task 的數(shù)量由該 Stage 最后一個 RDD 的分區(qū)數(shù)決定。一個 Stage 內(nèi)部的多個 Task 可以并行執(zhí)行,而 Stage 之間是串行執(zhí)行的。只有當(dāng)一個 Stage 中的所有 Task 都計算完成后,才會開始下一個 Stage 的計算。

?Shuffle 與 Stage 邊界

當(dāng) Spark 遇到一個寬依賴(如 `reduceByKey`、`groupBy` 等操作)時,它需要在該操作之前和之后分別創(chuàng)建一個新的 Stage。這是因為寬依賴需要 shuffle 數(shù)據(jù),而 shuffle 通常涉及磁盤 I/O,因此將寬依賴作為 Stage 之間的邊界可以提高效率。

3. Stage和Task調(diào)度方式

Stage的調(diào)度是由DAGScheduler完成的。 由RDD的有向無環(huán)圖DAG切分出了Stage的有向無環(huán)圖DAG。 Stage的DAG通過最后執(zhí)行Stage為根進(jìn)行廣度優(yōu)先遍歷, 遍歷到最開始執(zhí)行的Stage執(zhí)行, 如果提交的Stage仍有未完成的父母Stage, 則Stage需要等待其父Stage執(zhí)行完才能執(zhí)行。 同時DAGScheduler中還維持了幾個重要的Key-Value集合構(gòu), 用來記錄Stage的狀態(tài), 這樣能夠避免過早執(zhí)行和重復(fù)提交Stage。waitingStages中記錄仍有未執(zhí)行的父母Stage, 防止過早執(zhí)行。 runningStages中保存正在執(zhí)行的Stage, 防止重復(fù)執(zhí)行。failedStages中保存執(zhí)行失敗的Stage, 需要重新執(zhí)行。

每個Stage包含一組并行的Task,這些Task被組織成TaskSet(任務(wù)集合)。DAGScheduler將劃分好的TaskSet提交給TaskScheduler。TaskScheduler是負(fù)責(zé)Task調(diào)度和集群資源管理的組件。TaskScheduler通過TaskSetManager來管理每個TaskSet。TaskSetManager會跟蹤和控制其管轄的Task的執(zhí)行,包括任務(wù)的啟動、狀態(tài)監(jiān)控和失敗重試等。當(dāng)TaskSet被提交到TaskScheduler時,TaskScheduler會決定在哪些Executor上運行Task,并通過集群管理器(如YARN、Mesos或Spark Standalone)將Task分發(fā)到相應(yīng)的節(jié)點上執(zhí)行。Executor接收到Task后,會在其管理的線程池中執(zhí)行任務(wù)。執(zhí)行過程中,Task的狀態(tài)會不斷更新,并通過狀態(tài)更新機(jī)制通知TaskSetManager。TaskSetManager根據(jù)接收到的狀態(tài)更新來跟蹤Task的執(zhí)行情況,如遇到任務(wù)失敗,會觸發(fā)重試機(jī)制直至達(dá)到設(shè)定的重試次數(shù)。

當(dāng)所有Task都執(zhí)行完成后,TaskScheduler會通知DAGScheduler,并由DAGScheduler負(fù)責(zé)觸發(fā)后續(xù)Stage的執(zhí)行(如果存在)。

4. Shuffle機(jī)制

為什么spark計算模型需要Shuffle過程? 我們都知道, spark計算模型是在分布式的環(huán)境下計算的, 這就不可能在單進(jìn)程空間中容納所有的計算數(shù)據(jù)來進(jìn)行計算, 這樣數(shù)據(jù)就按照Key進(jìn)行分區(qū), 分配成一塊一塊的小分區(qū), 打散分布在集群的各個進(jìn)程的內(nèi)存空間中, 并不是所有計算算子都滿足于按照一種方式分區(qū)進(jìn)行計算。 例如, 當(dāng)需要對數(shù)據(jù)進(jìn)行排序存儲時, 就有了重新按照一定的規(guī)則對數(shù)據(jù)重新分區(qū)的必要, Shuffle就是包裹在各種需要重分區(qū)的算子之下的一個對數(shù)據(jù)進(jìn)行重新組合的過程。

?

?如圖, 整個Job分為Stage1~Stage3, 3個Stage。首先從最上端的Stage2、 Stage3執(zhí)行, 每個Stage對每個分區(qū)執(zhí)行變換( transformation) 的流水線式的函數(shù)操作, 執(zhí)行到每個Stage最后階段進(jìn)行Shuffle Write,將數(shù)據(jù)重新根據(jù)下一個Stage分區(qū)數(shù)分成相應(yīng)的Bucket, 并將Bucket最后寫入磁盤。 這個過程就是Shuffle Write階段。執(zhí)行完Stage2、 Stage3之后, Stage1去存儲有Shuffle數(shù)據(jù)節(jié)點的磁盤Fetch需要的數(shù)據(jù), 將數(shù)據(jù)Fetch到本地后進(jìn)行用戶定義的聚集函數(shù)操作。 這個階段叫Shuffle Fetch, Shuffle Fetch包含聚集階段。 這樣一輪一輪的Stage之間就完成了Shuffle操作。

四、結(jié)語

在閱讀《Spark大數(shù)據(jù)處理:技術(shù)、應(yīng)用與性能優(yōu)化》一書后,我大概了解了spark的運行機(jī)制及原理。上文僅是做了一個簡單的總結(jié),而且并沒有對一些細(xì)節(jié)進(jìn)行深入解讀。在原書中有著十分詳細(xì)的介紹,包含其容錯、IO、網(wǎng)絡(luò)等機(jī)制以及從源碼解析spark的運行流程,而且書中通過大量實際案例,展示了如何在具體應(yīng)用中使用Spark進(jìn)行數(shù)據(jù)處理、分析和挖掘,使理論與實踐相結(jié)合,大家如有興趣可自行閱讀。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 大數(shù)據(jù)
    +關(guān)注

    關(guān)注

    64

    文章

    8994

    瀏覽量

    142414
  • SPARK
    +關(guān)注

    關(guān)注

    1

    文章

    106

    瀏覽量

    20927
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    LuatOS腳本開發(fā)入門:嵌入式運行框架全解析!

    想搞懂LuatOS如何運行Lua腳本?本文深入剖析其嵌入式運行框架,涵蓋虛擬機(jī)加載、任務(wù)協(xié)程、系統(tǒng)初始化等關(guān)鍵環(huán)節(jié),適合初學(xué)者。 一、LuatOS 編程起步 1.1 底層固件怎么啟動 LuatOS
    的頭像 發(fā)表于 09-26 17:45 ?123次閱讀
    LuatOS腳本開發(fā)入門:嵌入式<b class='flag-5'>運行</b>框架全解析!

    NVIDIA DGX Spark桌面AI計算機(jī)開啟預(yù)訂

    DGX Spark 現(xiàn)已開啟預(yù)訂!麗臺科技作為 NVIDIA 授權(quán)分銷商,提供從產(chǎn)品到服務(wù)的一站式解決方案,助力輕松部署桌面 AI 計算機(jī)。
    的頭像 發(fā)表于 09-23 17:20 ?679次閱讀
    NVIDIA DGX <b class='flag-5'>Spark</b>桌面AI計算機(jī)開啟預(yù)訂

    使用NVIDIA GPU加速Apache Spark中Parquet數(shù)據(jù)掃描

    的方式組織數(shù)據(jù),這使得 Parquet 在查詢時僅讀取所需的列,而無需掃描整行數(shù)據(jù),即可實現(xiàn)高性能的查詢和分析。高效的數(shù)據(jù)布局使 Parquet 在現(xiàn)代分析生態(tài)系統(tǒng)中成為了受歡迎的選擇,尤其是在 Apache Spark 工作負(fù)載中。
    的頭像 發(fā)表于 07-23 10:52 ?430次閱讀
    使用NVIDIA GPU加速Apache <b class='flag-5'>Spark</b>中Parquet數(shù)據(jù)掃描

    一文看懂芯片的設(shè)計流程

    引言:前段時間給大家做了芯片設(shè)計的知識鋪墊(關(guān)于芯片設(shè)計的一些基本知識),今天這篇,我們正式介紹芯片設(shè)計的具體流程。芯片分為數(shù)字芯片、模擬芯片、數(shù)?;旌闲酒榷喾N類別。不同類別的設(shè)計流程也存在一些
    的頭像 發(fā)表于 07-03 11:37 ?1173次閱讀
    一文看懂芯片的設(shè)計<b class='flag-5'>流程</b>

    智慧路燈的安裝流程是怎樣的

    了新的活力。而規(guī)范、科學(xué)的安裝流程,則是確保叁仟智慧路燈能夠穩(wěn)定運行、充分發(fā)揮其功能的基礎(chǔ)。深入了解叁仟智慧路燈的安裝流程,不僅有助于施工團(tuán)隊高效開展工作,更能為智慧城市建設(shè)的穩(wěn)步推進(jìn)提供有力保障。接下來,將從前期規(guī)劃
    的頭像 發(fā)表于 04-27 17:22 ?563次閱讀

    NVIDIA加速的Apache Spark助力企業(yè)節(jié)省大量成本

    隨著 NVIDIA 推出 Aether 項目,通過采用 NVIDIA 加速的 Apache Spark 企業(yè)得以自動加速其數(shù)據(jù)中心規(guī)模的分析工作負(fù)載,從而節(jié)省數(shù)百萬美元。
    的頭像 發(fā)表于 03-25 15:09 ?769次閱讀
    NVIDIA加速的Apache <b class='flag-5'>Spark</b>助力企業(yè)節(jié)省大量成本

    CAN報文流程解析

    CAN報文流程解析,直流充電樁上的CAN通訊解析過程
    發(fā)表于 03-24 14:03 ?1次下載

    NVIDIA GTC2025 亮點 NVIDIA推出 DGX Spark個人AI計算機(jī)

    和聯(lián)想)提供。 NVIDIA 發(fā)布了由 NVIDIA Grace Blackwell 平臺驅(qū)動的 DGX 個人 AI 超級計算機(jī)。 DGX Spark(前身為 Project DIGITS)支持 AI
    的頭像 發(fā)表于 03-20 18:59 ?1095次閱讀
    NVIDIA GTC2025 亮點  NVIDIA推出 DGX <b class='flag-5'>Spark</b>個人AI計算機(jī)

    NVIDIA 宣布推出 DGX Spark 個人 AI 計算機(jī)

    的 DGX? 個人 AI 超級計算機(jī)。 ? DGX Spark(前身為 Project DIGITS)支持 AI 開發(fā)者、研究人員、數(shù)據(jù)科學(xué)家和學(xué)生,在臺式電腦上對大模型進(jìn)行原型設(shè)計、微調(diào)和推理。用
    發(fā)表于 03-19 09:59 ?399次閱讀
       NVIDIA 宣布推出 DGX <b class='flag-5'>Spark</b> 個人 AI 計算機(jī)

    按照dlpu042.pdf的流程生成的DLP_LightCrafter_4500_3D_Scan_Application.exe運行時會報錯怎么解決?

    我按照dlpu042.pdf的流程生成的DLP_LightCrafter_4500_3D_Scan_Application.exe運行時會報錯。
    發(fā)表于 02-28 08:21

    NX CAD軟件:數(shù)字化工作流程解決方案(CAD工作流程)

    NXCAD——數(shù)字化工作流程解決方案(CAD工作流程)使用西門子領(lǐng)先的產(chǎn)品設(shè)計軟件NXCAD加速執(zhí)行基于工作流程的解決方案。我們在了解行業(yè)需求方面累積了多年的經(jīng)驗,并據(jù)此針對各個行業(yè)的具體需求提供
    的頭像 發(fā)表于 02-06 18:15 ?634次閱讀
    NX CAD軟件:數(shù)字化工作<b class='flag-5'>流程</b>解決方案(CAD工作<b class='flag-5'>流程</b>)

    應(yīng)對微機(jī)保護(hù)裝置故障:專業(yè)的維修流程與注意事項

    在現(xiàn)代電力系統(tǒng)中,微機(jī)保護(hù)裝置扮演著至關(guān)重要的角色。然而,如同任何設(shè)備一樣,它也可能遭遇故障。了解其專業(yè)的維修流程與注意事項,對于保障電力系統(tǒng)的穩(wěn)定運行意義非凡。 一、維修流程 1. 故障報警分析
    的頭像 發(fā)表于 12-01 16:11 ?1454次閱讀

    數(shù)字設(shè)計ic芯片流程

    主要介紹芯片的設(shè)計流程 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? &
    發(fā)表于 11-20 15:57 ?0次下載

    Arm推出GitHub平臺AI工具,簡化開發(fā)者AI應(yīng)用開發(fā)部署流程

    軟件提供了無縫的開發(fā)體驗。 GitHub Actions、原生 GitHub 運行器和基于 Arm 平臺的 AI 框架相結(jié)合,幫助全球 2,000 萬開發(fā)者簡化 AI 應(yīng)用開發(fā)部署流程。
    的頭像 發(fā)表于 10-31 18:51 ?3570次閱讀

    邏輯組件中的流程塊節(jié)點通常出于什么用途

    邏輯組件中的流程塊節(jié)點是流程圖、狀態(tài)圖、序列圖等圖表中的基本元素,它們用于表示業(yè)務(wù)流程、工作流程、算法步驟、系統(tǒng)狀態(tài)等。這些節(jié)點在軟件開發(fā)、項目管理、自動化控制、工程設(shè)計、科學(xué)研究等領(lǐng)
    的頭像 發(fā)表于 10-15 14:38 ?795次閱讀