amazon-web-services - 如何从提交的 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 的新手。如果这是一个明显的查询,请提前道歉。
解决方案
在 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
其他可能感兴趣的变量。
推荐阅读
- ldap - 尝试将用户添加到 LDAP 时收到无效凭据 (49)
- firebase - Firestore如何结合“AND”逻辑执行多个“OR”查询?
- python - 将一个数组连接到另一个数组中?
- django - 如何使用 Django 加入带有外部 API 的表?
- java - 线程“主”java.util.NoSuchElementException errorr 中的异常
- go - 尝试:除了:通过但在 Go 中?(当出现网络问题时让 Go 不会崩溃?)
- javascript - 在 Django 中从后端到前端操作和传递 JSON
- laravel - 使用 Dropbox 驱动程序无法从 Laravel 上传到 Dropbox
- sql-server - 将 Excel 公式(逻辑)转换为 SQL Server
- android - 将按钮放在 AppBarOverlay 的右上角