场景:
我正在AWS EMR中运行Spark Scala作业。现在,我的工作转储了该应用程序特有的一些元数据。现在要进行转储,我在位置“ s3:// bucket / key / val APPLICATION_ID: String = getSparkSession.sparkContext.getConf.getAppId
现在基本上可以在s3位置写类似“ s3:// bucket / key /
以这种方式编写将帮助我进行调试,并帮助我基于群集和调试日志。
除了读取“ /mnt/var/lib/info/job-flow.json”以外,还有其他方法吗?
PS:我是Spark,scala和emr的新手。如果这是很明显的查询,请提前道歉。
答案 0 :(得分:1)
我遇到了同样的问题,无法通过编程方式获取cluster-id。我通过使用emrClient的listClusters()方法结束了。
您可以使用适用于AWS的Java SDK或在其之上使用Scala wrapper来使用此方法。
答案 1 :(得分:0)
除了A.B的答案之外,您还可以将群集ID传递给listSteps方法,以获取步骤ID的列表,如下所示:
emrClient.listSteps(new ListStepsRequest().withClusterId(jobFlowId)).getSteps()
答案 2 :(得分:0)
对于 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")
EMR_CLUSTER_ID
和 EMR_STEP_ID
变量在环境选项卡下的 Spark History Server UI 中可见,以及其他可能感兴趣的变量。