Platform/Hadoop

HADOOP - vCPU(AWS EC2)와 vCORE(Yarn)의 관계

wave35 2023. 3. 15. 09:18

 

EC2 vCPU

AWS에서 나와있는 EC2인스턴스별 유형을 살펴보면 이해가 쉽다.
일반 컴퓨팅의 CPU와 같다고 보면 된다.

https://aws.amazon.com/ko/ec2/instance-types/

 

 

YARN vCORE

YARN이 병렬처리(Thread)를 하기 위해 실제 코어(CPU)를 추상화한 가상코어이다.

Windows OS가 CPU를 하나로 메모리에 응용프로그램을 실행시키는 것과 같이,

YARN은 컨테이너를 통한 메모리할당을 할 때 vCORE를 사용한다.

 

http://yourHDFSurl:8088에서 설정된 vCORE를 확인하거나

yarn-site.xml에서 yarn.nodemanager.resource.cpu-vcores 프로퍼티에서 변경할 수 있다.

( Default는 8이다 )

 

 

 

vCPU와 vCORE의 관계

YARN의 CORE 수 자체는 CPU에 대해 큰 영향은 주진 않는다.

core가 8로 지정되었고 cpu가 4개이면

YARN은 cpu 4개가 사용할 수 있는 최대 컨테이너만 수만을 사용할 뿐이다.

 

그러나 반대로 cpu갯수가 8개이고 core가 4개이면 자원낭비를 하고 있는 셈이다.

일반적으로 cpu의 갯수에 1~2배정도로 yarn core 수를 설정하지만

cpu의 코어가 하이퍼코어(CPU하나가 멀티스레드 기능을 하는 것)가 아닌 이상

cpu수와 core수는 일치시키는게 좋다.

( Cloudera에서는 Number of physical disks used for Datanode * 2를 권장)

 

이것 또한 사용하는 응용프로그램에 따라 차이가 있는데

하나의 프로세스로 고정된 자원을 계속 할당하는 Spark의 경우,

실제 cpu와 core의 갯수가 같을 수록 최대의 성능을 발휘한다. 

 

그렇다면 EC2 CPU는 멀티스레드를 몇개까지 사용할 수 있는가?

친절하게도 vCPU = ( cpu * 스레드 수 )이므로 하이퍼코어를 고려할 필요없다.

결론적으로 none-yarn어플리케이션, 어플리케이션에 따른 컨테이너당 사용하는 vcore등 변수를 고려해 yarn vCore설정을 해야한다. 

 

 

 

참고

: https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/instance-optimize-cpu.html

https://blog.cloudera.com/how-to-tune-your-apache-spark-jobs-part-2/