如何从容器内部获取 YARN ContainerId?

2024-04-10

我正在 YARN 上运行 Spark 作业,并且希望获取 YARN 容器 ID(作为在一组 Spark 作业中生成唯一 ID 的要求的一部分)。我可以看到容器.getId() https://hadoop.apache.org/docs/r2.6.0/api/org/apache/hadoop/yarn/api/records/Container.html#getId()方法来获取 ContainerId,但不知道如何从 YARN 获取对当前正在运行的容器的引用。这可能吗? YARN容器如何获取自己的信息?


我能得到一些东西的唯一方法是使用日志目录。以下工作在 Spark shell 中进行。

import org.apache.hadoop.yarn.api.records.ContainerId

def f(): String = {
  val localLogDir: String = System.getProperty("spark.yarn.app.container.log.dir")
  val containerIdString: String = localLogDir.split("/").last
  val containerIdLong: Long = ContainerId.fromString(containerIdString).getContainerId
  containerIdLong.toHexString
}

val rdd1 = sc.parallelize((1 to 10)).map{ _ => f() }
rdd1.distinct.collect().foreach(println)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从容器内部获取 YARN ContainerId? 的相关文章

随机推荐