[HADOOP] MapReduce2에서 vcores 및 메모리를 기반으로 컨테이너를 만드는 방법은 무엇입니까?
HADOOPMapReduce2에서 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.나는 사용 된 스케줄러가 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'의 관계는 무엇입니까?
from https://stackoverflow.com/questions/33099601/how-are-containers-created-based-on-vcores-and-memory-in-mapreduce2 by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] '지도 만'hadoop 작업을 작성하는 방법? (0) | 2019.06.13 |
---|---|
[HADOOP] 돼지에서 여러 튜플로 튜플 분할하기 (0) | 2019.06.13 |
[HADOOP] Hadoop mapreduce 작업에서 JVM 재사용 (0) | 2019.06.13 |
[HADOOP] Windows 서버의 Hadoop (0) | 2019.06.13 |
[HADOOP] 하둡 비디오 자습서 [닫기] (0) | 2019.06.13 |