在 Java Spark 应用程序中获取 EMR 集群 ID
Get EMR Cluster ID inside Java Spark application
我用 Java 编写了 Spark 应用程序并通过 AWS EMR 执行它。我想在我的 Java 代码中获取 EMR 集群的 ID。我尝试使用下面的方法:
String emrClusterID = System.getenv("EMR_CLUSTER_ID");
但它 returns null
集群 ID。我不想使用 EMR API 获取 运行 集群的列表,然后从那里获取 ID,因为我不知道代码内部的集群名称是什么,并且 [=24] 中可以有多个集群=] 同名状态。那么,如何从 Spark Java 应用程序的代码中获取 运行 集群的集群 ID?
您可以在 EMR 服务器本地文件系统上读取和解析 JSON 文件 /mnt/var/lib/info/job-flow.json
。
属性 jobFlowId
是 clusterId。
基本实现(缺少错误处理)可能是这样的:
import java.io.File;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EmrInfo {
static final File EMR_JOB_FLOW = new File("/mnt/var/lib/info/job-flow.json");
public static String getEmrId() {
ObjectMapper mapper = new ObjectMapper();
Map<?, ?> map = mapper.readValue(EMR_JOB_FLOW, Map.class);
return map.getOrDefault("jobFlowId", "UNKNOWN_ID");
}
}
我用 Java 编写了 Spark 应用程序并通过 AWS EMR 执行它。我想在我的 Java 代码中获取 EMR 集群的 ID。我尝试使用下面的方法:
String emrClusterID = System.getenv("EMR_CLUSTER_ID");
但它 returns null
集群 ID。我不想使用 EMR API 获取 运行 集群的列表,然后从那里获取 ID,因为我不知道代码内部的集群名称是什么,并且 [=24] 中可以有多个集群=] 同名状态。那么,如何从 Spark Java 应用程序的代码中获取 运行 集群的集群 ID?
您可以在 EMR 服务器本地文件系统上读取和解析 JSON 文件 /mnt/var/lib/info/job-flow.json
。
属性 jobFlowId
是 clusterId。
基本实现(缺少错误处理)可能是这样的:
import java.io.File;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class EmrInfo {
static final File EMR_JOB_FLOW = new File("/mnt/var/lib/info/job-flow.json");
public static String getEmrId() {
ObjectMapper mapper = new ObjectMapper();
Map<?, ?> map = mapper.readValue(EMR_JOB_FLOW, Map.class);
return map.getOrDefault("jobFlowId", "UNKNOWN_ID");
}
}