복붙노트

[HADOOP] MapReduce2에서 vcores 및 메모리를 기반으로 컨테이너를 만드는 방법은 무엇입니까?

HADOOP

MapReduce2에서 vcores 및 메모리를 기반으로 컨테이너를 만드는 방법은 무엇입니까?

나는 1 개의 마스터 (namenode, secondarynamenode, resourcemanager)와 2 개의 슬레이브 (datanode, nodemanager)로 구성된 작은 클러스터를 가지고있다.

마스터의 yarn-site.xml에 설정했습니다.

노예의 yarn-site.xml을 설정했습니다.

그런 다음 마스터에서 mapred-site.xml을 설정했습니다.

그래서 작업을 수행 할 때 mapreduce ApplicationMaster는 두 개의 슬레이브에 512 Mb와 1 vCore의 컨테이너를 만들려고 시도합니다. 각 컨테이너에는 각각 2048 Mb 및 4 개의 vCore 만 사용할 수 있으며 각 컨테이너에는 4 개의 컨테이너 공간이 있습니다. 노예. 이것은 내 직업에서 일어나는 일이며, 지금까지 아무런 문제가 없습니다.

그러나 mapreduce.map.cpu.vcores와 mapreduce.reduce.cpu.vcores를 1에서 2로 증가 시키면 이론적으로 슬레이브 당 2 개의 컨테이너를 만들 수있는 충분한 vCore 만 있어야합니다. 하지만 아니요, 저는 여전히 슬레이브 당 컨테이너가 4 개 있습니다.

그런 다음 mapreduce.map.memory.mb와 mapreduce.reduce.memory.mb를 512에서 768으로 늘리려고 시도했습니다. 이로 인해 2 개의 컨테이너 (2048 / 768 = 2)의 공간이 남습니다.

vCore가 매퍼 (mappers)와 리듀서 (reducer)에 대해 1 또는 2로 설정되어 있으면 상관 없습니다. 이는 768mb의 슬레이브 당 2 개의 컨테이너를 생성하고 512mb의 컨테이너는 4 개 생성합니다. 그렇다면 vCores는 무엇을위한 것입니까? ApplicationMaster는 상관하지 않습니다.

또한 메모리를 768로 설정하고 vCores를 2로 설정하면 매퍼 컨테이너의 nodemanager UI에이 정보가 표시됩니다.

768 Mb가 1024 TotalMemoryNeeded로 바뀌고 2 개의 vCore가 무시되고 1 TotalVCoresNeeded로 표시됩니다.

그래서 여러 질문에 대한 "어떻게 작동합니까?"질문을 세분화하는 것입니다.

해결법

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

    1.나는 사용 된 스케줄러가 CapacityScheduler라는 가정하에이 질문에 답할 것이다.

    나는 사용 된 스케줄러가 CapacityScheduler라는 가정하에이 질문에 답할 것이다.

    CapacityScheduler는 응용 프로그램에 필요한 리소스를 계산하기 위해 ResourceCalculator를 사용합니다. 리소스 계산기에는 두 가지 유형이 있습니다.

    기본적으로 CapacityScheduler는 DefaultResourceCalculator를 사용합니다. DominantResourceCalculator를 사용하려면 "capacity-scheduler.xml"파일에서 다음 속성을 설정해야합니다.

      <property>
        <name>yarn.scheduler.capacity.resource-calculator</name>
        <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
      </property>
    

    자, 귀하의 질문에 대답 :

    어디에:

    r = 요청 된 메모리

    논리는 다음과 같이 작동합니다.

    에이. 최대 값 (요청 된 자원 및 최소 자원) = max (768, 512) = 768

    비. 라운드 업 (768, StepFactor) = 라운드 업 (768, 512) == 1279 (대략)

    Roundup does : ((768 + (512 -1)) / 512) * 512 
    

    기음. min (루프 업 (512, stepFactor), 최대 리소스) = min (1279, 1024) = 1024

    마지막으로 할당 된 메모리는 1024MB입니다.

    단순화를 위해, 정리 (roundup)라고 말하면서 512MB (최소 자원)의 단계로 수요를 증가시키고,

    mapreduce.map.memory.mb는 컨테이너에서 사용하는 총 메모리입니다.

    mapreduce.map.java.opts의 값은 mapreduce.map.memory.mb보다 작아야합니다.

    Apache Hadoop YARN에서 'mapreduce.map.memory.mb'와 'mapred.map.child.java.opts'의 관계는 무엇입니까?

  2. from https://stackoverflow.com/questions/33099601/how-are-containers-created-based-on-vcores-and-memory-in-mapreduce2 by cc-by-sa and MIT license