[英]How to get AWS EMR cluster id and step id from inside the spark application step submitted
設想:
我正在 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 上的EMR_CLUSTER_ID
, 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 中可見,以及其他可能感興趣的變量。
我最近在以編程方式獲取集群 ID 時遇到了同樣的問題。 我最后使用了emrClient 的 listClusters()方法。
您可以在其上使用 Java SDK for AWS 或Scala 包裝器來使用此方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.