中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Java Web怎么提交任務到Spark Standalone集群并監控

發布時間:2021-09-16 21:21:35 來源:億速云 閱讀:163 作者:chen 欄目:編程語言

這篇文章主要講解了“Java Web怎么提交任務到Spark Standalone集群并監控”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java Web怎么提交任務到Spark Standalone集群并監控”吧!


1. 環境
軟件    版本    備注
IDEA    14.1.5    
JDK    1.8    
Spark    1.6.0    工程maven引用
Spark    cdh6.7.3-spark1.6.0    實際集群5.7.3-1.cdh6.7.3.p0.5
Hadoop    2.6.4    工程Maven引用
Hadoop    2.6.0-cdh6.7.3    實際集群參數
Maven    3.3    
2. 工程下載路徑
工程在GitHub上地址為: javaweb_spark_standalone_monitor

3. Spark任務提交流程
之前做過相關的工作,知道可以通過下面的方式來提交任務到Spark Standalone集群:

String[] arg0=new String[]{
                "--master","spark://server2.tipdm.com:6066",
                "--deploy-mode","cluster",
                "--name",appName,
                "--class",className,
                "--executor-memory","2G",
                "--total-executor-cores","10",
                "--executor-cores","2",
                path,
                "/user/root/a.txt",
                "/tmp/"+System.currentTimeMillis()
        };
        SparkSubmit.main(arg0);

1. 這里要注意的是,這里使用的模式是cluster,而非client,也就是說driver程序也是運行在集群中的,而非提交的客戶端,也就是我Win10本地。
2. 如果需要使用client提交,那么需要注意本地資源是否足夠;同時因為這里使用的是cluster,所以需要確保集群資源同時可以運行一個driver以及executor(即,最少需要同時運行兩個Container)
3. 其中的path,也就是打的jar包需要放到集群各個slave節點中的對應位置。比如lz集群中有node1,node2,node3 ,那么就需要把wc.jar放到這三個節點上,比如放到/tmp/wc.jar ,那么path的設置就要設置為file:/opt/wc.jar ,如果直接使用/opt/wc.jar 那么在進行參數解析的時候會被解析成file:/c:/opt/wc.jar (因為lz使用的是win10運行Tomcat),從而報jar包文件找不到的錯誤!

進入SparkSubmit.main源碼,可以看到如下代碼:

def main(args: Array[String]): Unit = {
    val appArgs = new SparkSubmitArguments(args)
    if (appArgs.verbose) {
      // scalastyle:off println
      printStream.println(appArgs)
      // scalastyle:on println
    }
    appArgs.action match {
      case SparkSubmitAction.SUBMIT => submit(appArgs)
      case SparkSubmitAction.KILL => kill(appArgs)
      case SparkSubmitAction.REQUEST_STATUS => requestStatus(appArgs)
    }
  }

代碼里面是通過submit來提交任務的,順著這條線往下,則最終是通過

mainMethod.invoke 是通過反射來調用的,通過debug可以得到,這里反射調用的其實是:RestSubmissionClient 的main函數提交任務的。
所以這里可以模仿RestSubmissionClient來提交任務。程序如下:

public static String submit(String appResource,String mainClass,String ...args){
        SparkConf sparkConf = new SparkConf();
        // 下面的是參考任務實時提交的Debug信息編寫的
        sparkConf.setMaster(MASTER);
        sparkConf.setAppName(APPNAME+" "+ System.currentTimeMillis());
        sparkConf.set("spark.executor.cores","2");
        sparkConf.set("spark.submit.deployMode","cluster");
        sparkConf.set("spark.jars",appResource);
        sparkConf.set("spark.executor.memory","2G");
        sparkConf.set("spark.cores.max","2");
        sparkConf.set("spark.driver.supervise","false");
        Map<String,String> env = filterSystemEnvironment(System.getenv());
        CreateSubmissionResponse response = null;
        try {
            response = (CreateSubmissionResponse)
                    RestSubmissionClient.run(appResource, mainClass, args, sparkConf, toScalaMap(env));
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
        return response.submissionId();
    }

如果不加其中的

sparkConf.set

則程序運行會有問題,第一個錯誤就是:

java.lang.IllegalArgumentException: Invalid environment variable name: “=::”

這個錯誤是因為模式設置不對(沒有設置cluster模式),所以在進行參數匹配的時候異常。可以看到的參數如下圖所示:

這里面對應的參數,其實就是SparkSubmit提交任務所對應的值了。

4. 問題及問題解決
問題提出:
1. 最近一段時間,在想運行Spark的任務的時候為什么要提交到YARN上,而且通過實踐發現,提交到YARN上程序運行比Spark Standalone運行要慢的多,所以是否能直接提交任務到Spark Standalone集群呢?
2. 提交任務到Spark Standalone集群后,如何獲得任務的id,方便后面的監控呢?
3. 獲得任務id后,怎么監控?

針對這三個問題,解答如下:
1. 第一個問題,應該是見仁見智的問題了,使用SparkONYARN的方式可以統一生態圈什么的;
2. 在上面的代碼中已經可以提交任務,并且獲取任務ID了。不過需要注意的是,通過:

response = (CreateSubmissionResponse)
RestSubmissionClient.run(appResource, mainClass, args, sparkConf, toScalaMap(env));

獲取的response需要轉型為CreateSubmissionResponse,才能獲得submittedId,但是要訪問CreateSubmissionResponse,那么需要在某些包下面才行,所以lz的SparkEngine類才會定義在org.apache.spark.deploy.rest包中。

第三:
監控,監控就更簡單了,可以參考:

private def requestStatus(args: SparkSubmitArguments): Unit = {
    new RestSubmissionClient(args.master)
      .requestSubmissionStatus(args.submissionToRequestStatusFor)
  }

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

向AI問一下細節

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

AI

成都市| 武隆县| 瑞安市| 辉县市| 喜德县| 巴彦淖尔市| 武冈市| 延安市| 泗阳县| 安多县| 福安市| 井研县| 伊宁县| 托克托县| 全南县| 彭阳县| 洮南市| 大田县| 滨州市| 象州县| 大荔县| 敦煌市| 武胜县| 徐闻县| 宁德市| 定兴县| 漾濞| 蓬溪县| 丹江口市| 石楼县| 观塘区| 南召县| 南投县| 龙山县| 阳朔县| 泊头市| 济阳县| 莎车县| 喀喇沁旗| 青神县| 盐津县|