欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Spark是如何實(shí)現(xiàn)資源管理器比如yarn等可插拔的

本篇文章給大家分享的是有關(guān)Spark是如何實(shí)現(xiàn)資源管理器比如yarn等可插拔的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比琿春網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式琿春網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋琿春地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。

作為Spark源碼閱讀愛好者,有誰想過Spark是如何實(shí)現(xiàn)資源管理器比如yarn等可插拔的呢?

其實(shí),在這里不得不說一下,spark1.6及之前,資源管理器還是不可插拔,代碼是寫死在sparkContext類里的,你要想增加一種資源管理器,必須要修改SparkContext的代碼。

spark2.以后開始可以實(shí)現(xiàn)資源管理器的熱插拔,主要工具是ServiceLoader。本文就給大家揭示一下。

ServiceLoader與ClassLoader是Java中2個即相互區(qū)別又相互聯(lián)系的加載器.JVM利用ClassLoader將類載入內(nèi)存,這是一個類聲明周期的第一步(一個java類的完整的生命周期會經(jīng)歷加載、連接、初始化、使用、和卸載五個階段,當(dāng)然也有在加載或者連接之后沒有被初始化就直接被使用的情況)。詳情請參閱:詳解Java類的生命周期

那ServiceLoader又是什么呢?ServiceLoader:一個簡單的服務(wù)提供者加載設(shè)施。服務(wù) 是一個熟知的接口和類(通常為抽象類)集合。服務(wù)提供者 是服務(wù)的特定實(shí)現(xiàn)。提供者中的類通常實(shí)現(xiàn)接口,并子類化在服務(wù)本身中定義的子類。服務(wù)提供者可以以擴(kuò)展的形式安裝在 Java 平臺的實(shí)現(xiàn)中,也就是將 jar 文件放入任意常用的擴(kuò)展目錄中。也可通過將提供者加入應(yīng)用程序類路徑,或者通過其他某些特定于平臺的方式使其可用。……唯一強(qiáng)制要求的是,提供者類必須具有不帶參數(shù)的構(gòu)造方法,以便它們可以在加載中被實(shí)例化。

通過在資源目錄META-INF/services中放置提供者配置文件 來標(biāo)識服務(wù)提供者。文件名稱是服務(wù)類型的完全限定二進(jìn)制名稱。該文件包含一個具體提供者類的完全限定二進(jìn)制名稱列表,每行一個。忽略各名稱周圍的空格、制表符和空行。注釋字符為'#'('\u0023', NUMBER SIGN);忽略每行第一個注釋字符后面的所有字符。文件必須使用 UTF-8 編碼。 

以延遲方式查找和實(shí)例化提供者,也就是說根據(jù)需要進(jìn)行。服務(wù)加載器維護(hù)到目前為止已經(jīng)加載的提供者緩存。每次調(diào)用 iterator 方法返回一個迭代器,它首先按照實(shí)例化順序生成緩存的所有元素,然后以延遲方式查找和實(shí)例化所有剩余的提供者,依次將每個提供者添加到緩存。可以通過 reload 方法清除緩存。

以上來源于Java API里的說明,也許說的很專業(yè),讓我們有點(diǎn)暈頭轉(zhuǎn)向,我們可以簡單的認(rèn)為:ServiceLoader也像ClassLoader一樣,能裝載類文件,但是使用時有區(qū)別,具體區(qū)別如下:

(1) ServiceLoader裝載的是一系列有某種共同特征的實(shí)現(xiàn)類,而ClassLoader是個萬能加載器;

(2)ServiceLoader裝載時需要特殊的配置,使用時也與ClassLoader有所區(qū)別;

(3)ServiceLoader還實(shí)現(xiàn)了Iterator接口。

[如有錯誤或不到的地方敬請指出,互相學(xué)習(xí):)]

鏈接:https://www.cnblogs.com/sparkbj/articles/6208328.html

首先看一下SparkContext內(nèi)部初始化管理器的代碼

//    創(chuàng)建和啟動調(diào)度器    val (sched, ts) = SparkContext.createTaskScheduler(this, master, deployMode)    _schedulerBackend = sched    _taskScheduler = ts    _dagScheduler = new DAGScheduler(this)    _heartbeatReceiver.ask[Boolean](TaskSchedulerIsSet)

主要類方法是createTaskScheduler,其中有片段是通過url來找到資源管理器的。

case masterUrl =>        val cm = getClusterManager(masterUrl) match {          case Some(clusterMgr) => clusterMgr          case None => throw new SparkException("Could not parse Master URL: '" + master + "'")        }        try {          val scheduler = cm.createTaskScheduler(sc, masterUrl)          val backend = cm.createSchedulerBackend(sc, masterUrl, scheduler)          cm.initialize(scheduler, backend)          (backend, scheduler)        } catch {          case se: SparkException => throw se          case NonFatal(e) =>            throw new SparkException("External scheduler cannot be instantiated", e)        }

getClusterManager內(nèi)部實(shí)現(xiàn)了資源管理器的加載。

private def getClusterManager(url: String): Option[ExternalClusterManager] = {    val loader = Utils.getContextOrSparkClassLoader    val serviceLoaders =      ServiceLoader.load(classOf[ExternalClusterManager], loader).asScala.filter(_.canCreate(url))    if (serviceLoaders.size > 1) {      throw new SparkException(        s"Multiple external cluster managers registered for the url $url: $serviceLoaders")    }    serviceLoaders.headOption  }

然后我們可以找到相關(guān)配置了。

Spark是如何實(shí)現(xiàn)資源管理器比如yarn等可插拔的

以上就是Spark是如何實(shí)現(xiàn)資源管理器比如yarn等可插拔的,小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前文章:Spark是如何實(shí)現(xiàn)資源管理器比如yarn等可插拔的
鏈接URL:http://chinadenli.net/article46/gsjhhg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)Google網(wǎng)站排名電子商務(wù)網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)