yarn-site.xml 설정 값 상세내용
yarn-site.xml에 들어가는 설정 중 메모리 및 cpu와 관련 된 값에 대해 자세히 알아보도록 하겠습니다.
** yarn.nodemanager.resource.memory-mb
- 클러스터의 각 노드에서 컨테이너 운영에 설정할 수 있는 메모리의 총량
- 노드의 OS를 운영할 메모리를 제외하고 설정
- 기본값은 장비에 설정된 메모리의 80% 정도를 설정
ex) 노드의 메모리가 32G인경우 운영체제를 위한 4G를 제외하고 28G를 설정 ( 각 노드의 메모리 )
** yarn.nodemanager.resource.cpu-vcores
- 클러스터의 각 노드에서 컨테이너 운영에 설정할 수 있는 CPU의 개수
- 기본값은 장비에 설치된 CPU의 80% 정도를 설정
- 노드에 설치된 CPU가 40개일 경우 32를 설정 ( 전체 nodemanager 서버 cpu 개수의 80퍼 )
- vcore의 개수가 4개이면 동시에 4개 이상의 컨테이너 사용할 수 없음.
** yarn.scheduler.minimum-allocation-vcores
- 이 옵션은 container 에 할당하는 virtual cpu 코어의 단위를 의미한다.
minimum 코어 수가 3이라는 상황을 가정해보자.
예를 들어 spark 에서 어떤 app 을 구동시키는 데 1개의 코어가 필요하다면,
3개 코어 만큼의 container 를 만들어서 app 에 제공한다.
왜냐하면 3개가 cpu 를 제공하는 단위이기 때문이다.
만약 app 을 구동시키는 데 4개 코어가 필요하다면,
6개 코어 만큼의 container 를 만들어서 app 에 제공한다.
즉, 위 설정을 1로 하면 3개 코어가 필요할 때, 3개 코어 만큼의 container를 만들어 제공한다. 단위에 맞게 제공함.
** yarn.scheduler.maximum-allocation-vcores
- container 에 할당할 수 있는 최대 virtual cpu 코어 수를 의미한다.
10으로 설정하고, 5개 코어가 필요하면 10개보다 작기때문에 5개 container 를 만들어서 app 에 제공할 수 있다.
10으로 설정하고, 12개 코어가 필요하다면 10개보다 크기 때문에 container 를 만들어서 제공할 수 없어 에러를 내보낸다.
yarn.nodemanager.resource.cpu-vcores를 10으로 설정했으면 이 설정 값도 동일하게 10.
** yarn.scheduler.maximum-allocation-mb
- 하나의 컨테이너에 할당할 수 있는 메모리의 최대값
- 8G가 기본 값
- nodemanager.resource.memory-mb와 값이 동일 ( 기본 설정 기준 )
**yarn.scheduler.minimum-allocation-mb
- 하나의 컨테이너에 할당할 수 있는 메모리의 최소값
- 1G가 기본값 ( 1024 ) 적당할 듯
** yarn.nodemanager.vmem-pmem-ratio
- 실제 메모리 대비 가상 메모리 사용 비율
- 메모리를 1G로 설정하고, 이 값을 10으로 설정하면 가상메모리를 10G 사용
- mapreduce.map.memory.mb * 설정값의 비율로 사용 가능 ( mapred-site.xml 설정에 있음 )
** yarn.app.mapreduce.am.resource.mb
- 노드에서 애플리케이션 마스터를 실행할 때 할당하는 메모리
- 1기가 정도만 되어도 am이 많은 job들을 처리하는 데 큰 문제가 없다. ( 추천 설정 값 1024 )
** mapreduce.map.memory.mb * 설정값의 비율로 사용 가능 ( mapred-site.xml 설정에 있음 )
- 메모리를 1G로 설정하고, 이 값을 10으로 설정하면 가상메모리를 10G 사용
** yarn.nodemanager.vmem-check-enabled ( 가상 메모리 제한 확인 )
- 가상 메모리에 대한 제한이 있는지 확인하여, true 일 경우 메모리 사용량을 넘어서면 컨테이너를 종료 ( 가상메모리를 확인하여 컨테이너 종료 )
** yarn.nodemanager.pmem-check-enabled ( 물리 메모리 제한 확인 )
- 물리 메모리에 대한 제한이 있는지 확인하여, true 일 경우 메모리 사용량을 넘어서면 컨테이너를 종료 ( 물리메모리 확인 후 컨테이너 종료 )