簡體   English   中英

如何從提交的 spark 應用程序步驟中獲取 AWS EMR 集群 ID 和步驟 ID

[英]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_IDEMR_CLUSTER_IDEMR_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_IDEMR_STEP_ID變量在環境選項卡下的 Spark History Server UI 中可見,以及其他可能感興趣的變量。

我最近在以編程方式獲取集群 ID 時遇到了同樣的問題。 我最后使用了emrClient 的 listClusters()方法。

您可以在其上使用 Java SDK for AWS 或Scala 包裝器來使用此方法。

添加在AB的答案之上,您可以將集群 ID 傳遞給listSteps方法以獲取步驟 ID 的列表,如下所示:

emrClient.listSteps(new ListStepsRequest().withClusterId(jobFlowId)).getSteps()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM