日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第三章 Spark运行模式及原理

發布時間:2024/4/11 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第三章 Spark运行模式及原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第三章 Spark運行模式及原理


目錄

  • Spark運行模式概述
  • Local模式
  • Standalone模式
  • Local cluster模式
  • Mesos模式
  • YARN standalone/YARN cluster模式
  • YARN client模式
  • 各種模式的實現細節比較
  • Spark1.0版本之后的變化
  • 小結
  • 注:學習《Spark大數據處理技術》筆記


    1. Spark運行模式概述

    1. Spark運行模式列表

  • Spark應用程序的運行模式取決于傳遞給SparkContext的MASTER環境變量的值,個別模式還需要依賴輔助的程序接口來配合使用,目前所支持的MASTER環境變量由特定的字符串或URL所組成
  • Local[N]:本地模式,使用N個線程
  • Local cluster[worker, core, Memory]:偽分布模式,可以配置所需要啟動的模擬工作,以及每個工作節點管理的CPU數量和內存尺寸
  • Spark://hostname:port: Standalone 模式,需要部署Spark到相關節點,URL為Spark Master主機地址和端口
  • Mesos://hostname:port:Mesos模擬,需要部署Spark和Mesos到相關節點,URL為Mesos主機地址和端口
  • YARN standalone/YARN cluster:YARN 模式一,主程序邏輯和任務都運行在YARN集群中
  • YARN client:YARN 模式二,主程序運行在本地,具體任務運行在YARN集群中
  • 2. Spark基本工作流程

  • 多個運行模式從總體上來說,都基于一個相似的工作流程。從根本上都是將Spark的應用分為任務調度和任務執行兩個部分
    1. 分布式模式下,Spark的各個調度和執行模塊大致架構圖

    2. 對于本地模式來說,其內部程序邏輯結構也是類似的,只是其中的部分模塊有所簡化,例如集群管理模塊簡化為進程內部的線程池
  • 從圖3-1可知,所有的Spark應用程序都離不開SparkContext和Executor兩部分
    1. Executor負責執行任務,運行Executor的機器稱為Worker節點
    2. SparkContext由用戶程序啟動,通過資源調度模塊和Executor通信
    3. SparkContext和Executor這兩部分的核心代碼實現在各個運行模式中都是公用的,在它們之上,根據運行部署模式的不同,包裝了不同調度模塊以及相關的適配代碼
  • 具體來說,以SparkContext為程序運行的總入口,在SparkContext的初始化過程中,Spark會分別創建DAGScheduler作業調度和TaskScheduler任務調度兩級調度模塊
    1. 其中作業調度模塊是基于任務階段的高層調度模塊,它為每個Spark作業計算具有依賴關系的多個調度階段(通常根據shuffle來劃分),然后為每個階段構建出一組具體的任務(通常會考慮數據的本地性等),然后以TaskSets(任務組)的形式提交給任務調度模塊來具體執行。
    2. 而任務調度模塊則負責具體啟動任務、監控和匯報任務運行情況
  • 作業調度模塊和具體的部署運行模式無關,在各種運行模式下邏輯相同。
  • 不同的運行模式的區別主要體現在任務調度模塊。不同的部署和運行模式,根據底層資源調度方式的不同,各自實現了自己特定的任務調度模塊,用來將任務實際調度給對應的計算資源
  • 3. 相關基本類

  • TaskScheduler/SchedulerBackend

  • 為了抽象出一個公共的接口供DAGScheduler作業調度模塊使用,所有的這些運行模式實現的任務調度模塊都是基于這兩個接口的(Trait):TaskScheduler(見程序3-1)及SchedulerBackend(見程序3-2)
  • TaskScheduler的實現主要用于于DAGScheduler交互,負責任務的具體調度和運行,其核心接口是submitTasks和canceTasks
  • SchedulerBackend的實現是與底層資源調度系統交互(如Mesos/Yarn),配合TaskScheduler實現具體任務執行所需的資源分配,核心接口是receiveOffers
  • 這兩者之間的實際交互過程取決于具體的調度模式,理論上這兩者的實現是成對匹配工作的,之所以拆分成兩部分,是有利于相似的調度模式共享代碼功能模塊
  • TaskSchedulerImpl

  • TaskSchedulerImpl實現了TaskScheduler接口,提供了大多數本地和分布式運行調度模式的任務調度接口
  • 此外,它還實現了resourceOffers和statusUpdate這兩個接口供Backend調用,用于提供調度資源和更新任務狀態
  • 另外,在提交任務和更新狀態等階段,TaskSchedulerImpl都會調用Backend的receiveOffers函數,用于發起一次任務資源調度請求
  • Executor

  • 實際任務的運行,最終都由Executor類來執行,Executor對每一個任務創建一個TaskRunner類,交給線程池運行
  • 運行結果通過ExecutorBackend接口返回
  • 圖3-2列出了各種運行模式下相關類的關系圖

  • 待續…

  • 總結

    以上是生活随笔為你收集整理的第三章 Spark运行模式及原理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。