当前位置:  开发笔记 > 编程语言 > 正文

如何在Scala中部署到YARN的Spark应用程序的applicationId?

如何解决《如何在Scala中部署到YARN的Spark应用程序的applicationId?》经验,为你挑选了2个好方法。

我正在使用以下Scala代码(作为自定义spark-submit包装器)将Spark应用程序提交到YARN集群:

val result = Seq(spark_submit_script_here).!!

我在提交时所拥有的只是spark-submit和Spark应用程序的jar(没有SparkContext).我想拍摄applicationIdresult,但它是空的.

我可以在命令行中看到输出applicationId和其余的Yarn消息:

INFO yarn.Client:application_1450268755662_0110的应用报告

如何在代码中读取它并获取applicationId?



1> Markon..:

如Spark问题5439中所述,您可以使用SparkContext.applicationId或解析stderr输出。现在,当您用自己的脚本/对象包装spark-submit命令时,我会说您需要阅读stderr并获取应用程序ID。



2> Rajiv..:

如果要通过Python提交作业,则可以通过以下方式获取yarn应用程序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

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有