Spark——SparkContext簡單分析

来源:http://www.cnblogs.com/softlin/archive/2016/08/21/5792126.html
-Advertisement-
Play Games

本篇文章就要根據源碼分析 SparkContext 所做的一些事情,用過Spark的開發者都知道SparkContext是編寫Spark程式用到的第一個類,足以說明SparkContext的重要性;這裡先摘抄SparkContext源碼註釋來 簡單介紹介紹SparkContext,註釋的第一句話就是 ...


本篇文章就要根據源碼分析SparkContext所做的一些事情,用過Spark的開發者都知道SparkContext是編寫Spark程式用到的第一個類,足以說明SparkContext的重要性;這裡先摘抄SparkContext源碼註釋來 簡單介紹介紹SparkContext,註釋的第一句話就是說SparkContext為Spark的主要入口點,簡明扼要,如把Spark集群當作服務端那Spark Driver就是客戶端,SparkContext則是客戶端的核心;如註釋所說 SparkContext用於連接Spark集群、創建RDD、累加器(accumlator)、廣播變數(broadcast variables),所以說SparkContext為Spark程式的根本都不為過,這裡使用的Spark版本為2.0.1;

Spark結構

  圖片來自Spark官網,可以看到SparkContext處於DriverProgram核心位置,所有與Cluster、Worker Node交互的操作都需要SparkContext來完成;

SparkContext相關組件

  1、SparkConf
  SparkConf為Spark配置類,配置已鍵值對形式存儲,封裝了一個ConcurrentHashMap類實例settings用於存儲Spark的配置信息;配置項包括:master、appName、Jars、ExecutorEnv等等;
  2、SparkEnv
  SparkEnv可以說是Context中非常重要的類,它維護著Spark的執行環境,包含有:serializer、RpcEnv、block Manager、map output tracker、etc等;所有的線程都可以通過SparkCotext訪問到同一個SparkEnv對象;SparkContext通過SparkEnv.createDriverEnv創建SparkEnv實例;在SparkEnv中包含瞭如下主要對象:

  SecurityManager:用於對許可權、賬號進行管理、Hadoop YARN模式下的證書管理等;
  RpcEnv:為Rpc環境的封裝,之前使用的是Akka現在預設已經使用了Netty作為Spark的Rpc通信框架,Spark中有RpcEnvFactory trait特質預設實現為NettyRpcEnvFactory,在Factory中預設使用了Jdk的Serializer作為序列化工具;
  SerializerManager:用於管理Spark組件的壓縮與序列化;
  BroadcastManager:用與管理廣播對象,預設使用了TorrentBroadcastFactory廣播工廠;
  MapOutputTracker:跟蹤Map階段結果的輸出狀態,用於在reduce階段獲取地址與輸出結果,如果當前為Driver則創建MapOutputTrackerMaster對象否則創建的是MapOutputTrackerWorker兩者都繼承了MapOutputTracker類;
  ShuffleManager:用於管理遠程和本地Block數據shuffle操作,預設使用了SortShuffleManager實例;
  MemoryManager:用於管理Spark的記憶體使用策略,有兩種模式StaticMemoryManager、UnifiedMemoryManager,第一種為1.6版本之前的後面那張為1.6版本時引入的,當前模式使用第二種模式;兩種模式區別為粗略解釋為第一種是靜態管理模式,而第二種為動態分配模式,execution與storage之間可以相互“借”記憶體;
  BlockTransferService:塊傳輸服務,預設使用了Netty的實現,用於獲取網路節點的Block或者上傳當前結點的Block到網路節點;
  BlockManagerMaster:用於對Block的協調與管理;
  BlockManager:為Spark存儲系統重要組成部分,用於管理Block;
  MetricsSystem:Spark測量系統;

  3、LiveListenerBus
  非同步傳遞Spark事件監聽與SparkListeners監聽器的註冊;
  4、JobProgressListener
  JobProgressListener監聽器用於監聽Spark中任務的進度信息,SparkUI上的任務數據既是該監聽器提供的,監聽的事件包括有,Job:active、completed、failed;Stage:pending、active、completed、skipped、failed等;JobProgressListener最終將註冊到LiveListenerBus中;

  5、SparkUI
  SparkUI為Spark監控Web平臺提供了Spark環境、任務的整個生命周期的監控;

  6、TaskScheduler
  TaskScheduler為Spark的任務調度器,Spark通過他提交任務並且請求集群調度任務;TaskScheduler通過Master匹配部署模式用於創建TashSchedulerImpl與根據不同的集群管理模式(local、local[n]、standalone、local-cluster、mesos、YARN)創建不同的SchedulerBackend實例;

  7、DAGScheduler
  DAGScheduler為高級的、基於stage的調度器,為提交給它的job計算stage,將stage作為tasksets提交給底層調度器TaskScheduler執行;DAGScheduler還會決定著stage的最優運行位置;
  8、ExecutorAllocationManager
  根據負載動態的分配與刪除Executor,可通過ExecutorAllcationManager設置動態分配最小Executor、最大Executor、初始Executor數量等配置,調用start方法時會將ExecutorAllocationListener加入到LiveListenerBus中監聽Executor的添加、移除等;
  9、ContextClearner
  ContextClearner為RDD、shuffle、broadcast狀態的非同步清理器,清理超出應用範圍的RDD、ShuffleDependency、Broadcast對象;清理操作由ContextClearner啟動的守護線程執行;
  10、SparkStatusTracker
  低級別的狀態報告API,對job、stage的狀態進行監控;包含有一個jobProgressListener監聽器,用於獲取監控到的job、stage事件信息、Executor信息;
  11、HadoopConfiguration
  Spark預設使用HDFS來作為分散式文件系統,HadoopConfigguration用於獲取Hadoop配置信息,通過SparkHadoopUtil.get.newConfiguration創建Configuration對象,SparkHadoopUtil 會根據SPARK_YARN_MODE配置來判斷是用SparkHadoopUtil或是YarnSparkHadoopUtil,創建該對象時會將spark.hadoop.開頭配置都複製到HadoopConfugration中;

簡單總結

  以上的對象為SparkContext使用到的主要對象,可以看到SparkContext包含了Spark程式用到的幾乎所有核心對象可見SparkContext的重要性;創建SparkContext時會添加一個鉤子到ShutdownHookManager中用於在Spark程式關閉時對上述對象進行清理,在創建RDD等操作也會判斷SparkContext是否已stop;
  通常情況下一個Driver只會有一個SparkContext實例,但可通過spark.driver.allowMultipleContexts配置來允許driver中存在多個SparkContext實例;

參考資料:
http://spark.apache.org/docs/latest/

文章首發地址:Solinx
http://www.solinx.co/archives/643


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文網址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 語言編寫的TCP/UDP通信框架 作者是英國人 以前是收費的 目前作者已經開源 開源地址是:https://github.com/MarcFletcher/NetworkComms.Net 使 ...
  • 原文網址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 語言編寫的TCP/UDP通信框架 作者是英國人 以前是收費的 目前作者已經開源 開源地址是:https://github.com/MarcFletcher/NetworkComms.Net 使 ...
  • 開始使用 LINQ(五)- LINQ 中的查詢語法和方法語法 在表示語言集成查詢 (LINQ) 使用 LINQ 性查詢語法,文檔中的多數查詢編寫。但是,編譯代碼時,必須將查詢語法轉換為方法,這就需要 .NET 公共語言運行時 (CLR)。這些方法調用標準查詢運算符的名稱類似 Where、Select ...
  • 開始使用 LINQ(四)- LINQ 查詢操作的類型關係 LINQ 查詢操作在數據源、查詢本身及查詢執行中是強類型的。查詢中變數的類型必須與數據源中元素的類型和 foreach 語句中迭代變數的類型相容。此強類型保證在編譯時捕獲類型錯誤,以便可以在用戶遇到這些錯誤之前更正它們。 一、不轉換源數據的查 ...
  • 【簡訊貓相關問題】 【getDeviceNameByRFID】的引用。註意 一系列配置 【簡訊貓SmsHelper】 【簡訊貓DuanXinMao】 ...
  • MXS&Vincene ─╄OvЁ &0000027─╄OvЁ MXS&Vincene MXS&Vincene ─╄OvЁ:今天很殘酷,明天更殘酷,後天很美好,但是絕大部分人是死在明天晚上,只有那些真正的英雄才能見到後天的太陽。 MXS&Vincene ─╄OvЁ:We're here to put ...
  • 索引 【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做項目 目錄索引 前言 前面還沒有下載到UI和資料庫的,這裡再次給大家提供一下:百度網盤 提取碼:fuuv ,UI是參照H+,但是H+是收費授權的(¥998RMB),價格有點貴,所以 我們的 UI 跟H+ 雖然是一個風格,但 ...
  • 問題引出: winform程式中的耗時操作,一般不能在UI線程中執行,需要另開線程。往往我們需要在耗時操作結束後將結果顯示在UI上。 以下是Mainform.cs中調用耗時操作的一段代碼: 這裡耗時操作被封裝在類Job中,調用 j.runJob() 開始耗時操作。其中runJob中封裝了開啟新線程執 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...