首页 > 解决方案 > 如何从提交的 Spark 应用程序步骤中获取 AWS EMR 集群 ID 和步骤 ID

问题描述

场景:
我在 AWS EMR 中运行 Spark Scala 作业。现在我的工作转储了该应用程序独有的一些元数据。现在为了倾销,我写在位置“s3://bucket/key/<APPLICATION_ID>”,其中 ApplicationId 是 val APPLICATION_ID: String = getSparkSession.sparkContext.getConf.getAppId

现在基本上有一种方法可以在 s3 位置写入类似“s3://bucket/key/<emr_cluster_id>_<emr_step_id>”的内容。如何从 spark Scala 应用程序中获取集群 ID 和步骤 ID。

以这种方式编写将帮助我调试并帮助我到达基于集群并调试日志。

除了阅读“/mnt/var/lib/info/job-flow.json”之外,还有其他方法吗?

PS:我是 spark、scala 和 emr 的新手。如果这是一个明显的查询,请提前道歉。

标签: amazon-web-servicesscalaapache-sparkamazon-emr

解决方案


在 EMR 上使用 PySpark,EMR_CLUSTER_ID并可EMR_STEP_ID作为环境变量使用(在 emr-5.30.1 上确认)。

它们可以在代码中使用,如下所示:

import os
emr_cluster_id = os.environ.get('EMR_CLUSTER_ID')
emr_step_id = os.environ.get('EMR_STEP_ID')

我无法测试,但以下类似的代码应该在 Scala 中工作。

val emr_cluster_id = sys.env.get("EMR_CLUSTER_ID")
val emr_step_id = sys.env.get("EMR_STEP_ID")

因为sys.env只是一个Map[String, String]它的get方法返回一个Option[String],如果这些环境变量不存在,它不会失败。如果你想提出一个异常,你可以使用sys.env("EMR_x_ID")

和变量在环境选项卡下的 Spark History Server UI 中可见,EMR_CLUSTER_ID以及EMR_STEP_ID其他可能感兴趣的变量。


推荐阅读