복붙노트

[HADOOP] 컨테이너 내부에서 YARN ContainerId를 어떻게 얻습니까?

HADOOP

컨테이너 내부에서 YARN ContainerId를 어떻게 얻습니까?

YARN에서 Spark 작업을 실행하고 있으며 YARN 컨테이너 ID를 얻고 싶습니다 (Spark 작업 세트에서 고유 ID를 생성하기위한 요구 사항의 일부). ContainerId를 가져 오는 Container.getId () 메소드를 볼 수 있지만 YARN에서 현재 실행중인 컨테이너에 대한 참조를 얻는 방법을 모릅니다. 이것이 가능합니까? YARN 컨테이너는 어떻게 자신의 정보를 얻습니까?

해결법

  1. ==============================

    1.내가 얻을 수있는 유일한 방법은 logging 디렉토리를 사용하는 것입니다. 다음은 스파크 쉘에서 작동합니다.

    내가 얻을 수있는 유일한 방법은 logging 디렉토리를 사용하는 것입니다. 다음은 스파크 쉘에서 작동합니다.

    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)
    
  2. ==============================

    2.아래는 컨테이너 ID를 Spark에 저장하는 방법에 대한 설명입니다.

    아래는 컨테이너 ID를 Spark에 저장하는 방법에 대한 설명입니다.

    컨테이너 ID를 숨기고 응용 프로그램 / 작업마다 실행기 ID를 노출 스파크 작업 당 고유 ID를 유지하려는 경우 스파크가 제공하는 응용 프로그램 ID를 사용하라는 제안은 고유 한 문자열을 추가 할 수 있습니다

    "YarnAllocator.scala"의 스파크 코드 아래

    private [yarn] val executorIdToContainer = 새 HashMap [문자열, 컨테이너]

  3. ==============================

    3.YARN은 여기에 나열된 모든 환경 변수를 내 보냅니다 : https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org /apache/hadoop/yarn/api/ApplicationConstants.java#L117

    YARN은 여기에 나열된 모든 환경 변수를 내 보냅니다 : https://github.com/apache/hadoop/blob/trunk/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org /apache/hadoop/yarn/api/ApplicationConstants.java#L117

    따라서 다음과 같이 액세스 할 수 있어야합니다.

    sys.env.get(ApplicationConstants.Environment.CONTAINER_ID.toString)
    // or, equivalently
    sys.env.get("CONTAINER_ID")
    
  4. from https://stackoverflow.com/questions/41724300/how-do-i-get-the-yarn-containerid-from-inside-the-container by cc-by-sa and MIT license