亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark提交Yarn的詳細過程

發布時間:2021-09-10 15:59:28 來源:億速云 閱讀:187 作者:chen 欄目:云計算

這篇文章主要講解了“Spark提交Yarn的詳細過程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spark提交Yarn的詳細過程”吧!

spark-submit.sh-> spark-class.sh,然后調用SparkSubmit.scala。

根據client或者cluster模式處理方式不一樣。

client:直接在spark-class.sh運行的地方包裝要給進程來執行driver。

cluster:將driver提交到集群去執行。

核心在SparkSubmit.scala的prepareSubmitEnvironment方法中,截取一段處理Yarn集群環境的看一下。

// In client mode, launch the application main class directly
    // In addition, add the main application jar and any added jars (if any) to the classpath
    if (deployMode == CLIENT) {
      childMainClass = args.mainClass
      if (localPrimaryResource != null && isUserJar(localPrimaryResource)) {
        childClasspath += localPrimaryResource
      }
      if (localJars != null) { childClasspath ++= localJars.split(",") }
    }

client模式,childMainClass就是driver的main方法。

接下來看看Yarn cluster模式:

// In yarn-cluster mode, use yarn.Client as a wrapper around the user class
    if (isYarnCluster) {
      childMainClass = YARN_CLUSTER_SUBMIT_CLASS
      if (args.isPython) {
        childArgs += ("--primary-py-file", args.primaryResource)
        childArgs += ("--class", "org.apache.spark.deploy.PythonRunner")
      } else if (args.isR) {
        val mainFile = new Path(args.primaryResource).getName
        childArgs += ("--primary-r-file", mainFile)
        childArgs += ("--class", "org.apache.spark.deploy.RRunner")
      } else {
        if (args.primaryResource != SparkLauncher.NO_RESOURCE) {
          childArgs += ("--jar", args.primaryResource)
        }
        childArgs += ("--class", args.mainClass)
      }
      if (args.childArgs != null) {
        args.childArgs.foreach { arg => childArgs += ("--arg", arg) }
      }
    }

這時候childMainClass變成了

YARN_CLUSTER_SUBMIT_CLASS =    "org.apache.spark.deploy.yarn.YarnClusterApplication"

private[spark] class YarnClusterApplication extends SparkApplication {
  override def start(args: Array[String], conf: SparkConf): Unit = {
    // SparkSubmit would use yarn cache to distribute files & jars in yarn mode,
    // so remove them from sparkConf here for yarn mode.
    conf.remove(JARS)
    conf.remove(FILES)
    new Client(new ClientArguments(args), conf, null).run()
  }
}

看源碼可以看到,YarnClusterApplication最終是用到了deploy/yarn/Client.scala

client.run調用client.submitApplication方法提交到Yarn集群。

def submitApplication(): ApplicationId = {
     // Set up the appropriate contexts to launch our AM
      val containerContext = createContainerLaunchContext(newAppResponse)
      val appContext = createApplicationSubmissionContext(newApp, containerContext)
}

主要是createContainerLaunchContext方法:

 /**
   * Set up a ContainerLaunchContext to launch our ApplicationMaster container.
   * This sets up the launch environment, java options, and the command for launching the AM.
   */
private def createContainerLaunchContext(newAppResponse: GetNewApplicationResponse){

val userClass =
      if (isClusterMode) {
        Seq("--class", YarnSparkHadoopUtil.escapeForShell(args.userClass))
      } else {
        Nil
      }    
 val amClass =
      if (isClusterMode) {
        Utils.classForName("org.apache.spark.deploy.yarn.ApplicationMaster").getName
      } else {
        Utils.classForName("org.apache.spark.deploy.yarn.ExecutorLauncher").getName
      }
 val amArgs =
      Seq(amClass) ++ userClass ++ userJar ++ primaryPyFile ++ primaryRFile ++ userArgs ++
      Seq("--properties-file",
        buildPath(Environment.PWD.$$(), LOCALIZED_CONF_DIR, SPARK_CONF_FILE)) ++
      Seq("--dist-cache-conf",
        buildPath(Environment.PWD.$$(), LOCALIZED_CONF_DIR, DIST_CACHE_CONF_FILE))

    // Command for the ApplicationMaster
    val commands = prefixEnv ++
      Seq(Environment.JAVA_HOME.$$() + "/bin/java", "-server") ++
      javaOpts ++ amArgs ++
      Seq(
        "1>", ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout",
        "2>", ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr")
}

這樣就生成要執行的命令了,就是Command。上面這句話啥意思呢:

(1)cluster模式

用ApplicationMaster啟動userClass。

(2)client模式

啟動Executor

這里我們要看的是cluster模式,至此就清楚了,在cluster模式下,在Yarn集群中用ApplicationMaster包裝了userClass并啟動。userClass就是driver的意思。

感謝各位的閱讀,以上就是“Spark提交Yarn的詳細過程”的內容了,經過本文的學習后,相信大家對Spark提交Yarn的詳細過程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

于都县| 绥滨县| 天祝| 开鲁县| 大关县| 广南县| 天镇县| 昌黎县| 萝北县| 东乡| 环江| 荆门市| 通河县| 达日县| 夹江县| 丰宁| 鹰潭市| 孟连| 固镇县| 兴义市| 舒兰市| 张家界市| 历史| 唐山市| 虞城县| 西和县| 河东区| 湖州市| 如东县| 海城市| 栾川县| 郓城县| 临海市| 泰州市| 巴林右旗| 乌拉特中旗| 澎湖县| 万宁市| 黄梅县| 卓资县| 马山县|