内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//    創(chuàng)建和啟動(dò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等可插拔的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

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

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

廣告

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

外貿(mào)網(wǎng)站建設(shè)
中江县| 甘谷县| 牟定县| 彭水| 金门县| 铁岭市| 武汉市| 临武县| 裕民县| 盈江县| 马尔康县| 黎平县| 原平市| 虎林市| 邛崃市| 贵阳市| 赞皇县| 贞丰县| 奉贤区| 乐亭县| 揭西县| 昂仁县| 宜川县| 简阳市| 长乐市| 清镇市| 阳朔县| 凉城县| 永和县| 易门县| 易门县| 泾源县| 海城市| 大庆市| 通河县| 东辽县| 怀宁县| 汝州市| 漯河市| 申扎县| 扎赉特旗|