2016-01-04 72 views
3

我使用下面的Scala代碼(如定製​​包裝)提交星火申請紗線集羣:如何將Spark應用程序的applicationId部署到Scala的YARN中?

val result = Seq(spark_submit_script_here).!! 

我只有在提交時間爲​​和火花應用程序的jar(沒有SparkContext)。我想從result中捕獲applicationId,但它是空的。

信息yarn.Client適合:application_1450268755662_0110

申請報告我如何可以在代碼閱讀並

我可以在命令行輸出的applicationID和休息的紗線的消息看獲取applicationId?

+0

你說的是'SparkContext.applicationId'? – Markon

+0

我認爲yarn.Client以某種方式獲取SparkContext.applicationId - 你也可以這樣做。 – Markon

+1

[spark yarn模式如何從spark-submit獲取applicationId的可能重複](https://stackoverflow.com/questions/44209462/spark-yarn-mode-how-to-get-app- application-from-spark-submit) –

回答

3

Spark issue 5439所述,您可以使用SparkContext.applicationId或解析stderr輸出。現在,當您用自己的腳本/對象包裝spark-submit命令時,我會說您需要閱讀stderr並獲取應用程序ID。

0

如果你是通過Python提交作業,那麼這就是你如何能得到紗線應用程序ID:

cmd_list = [{ 
      'cmd': '/usr/bin/spark-submit --name %s --master yarn --deploy-mode cluster ' 
        '--executor-memory %s --executor-cores %s --num-executors %s ' 
        '--class %s %s %s' 
        % (
         app_name, 
         config.SJ_EXECUTOR_MEMORY, 
         config.SJ_EXECUTOR_CORES, 
         config.SJ_NUM_OF_EXECUTORS, 
         config.PRODUCT_SNAPSHOT_SKU_PRESTO_CLASS, 
         config.SPARK_JAR_LOCATION, 
         config.SPARK_LOGGING_ENABLED 
        ), 
      'cwd': config.WORK_DIR 
     }] 
cmd_output = subprocess.run(cmd_obj['cmd'], shell=True, check=True, cwd=cwd, stderr=subprocess.PIPE) 
cmd_output = cmd_output.stderr.decode("utf-8") 
yarn_application_ids = re.findall(r"application_\d{13}_\d{4}", cmd_output) 
       if len(yarn_application_ids): 
        yarn_application_id = yarn_application_ids[0] 
        yarn_command = "yarn logs -applicationId " + yarn_application_id 
相關問題