1. EC2 vCPU
AWS에서 나와있는 EC2인스턴스별 유형을 살펴보면 이해가 쉽다.
https://aws.amazon.com/ko/ec2/instance-types/
일반 컴퓨팅의 CPU와 같다고 보면 된다.
2. YARN vCORE
YARN이 병렬처리(Thread)를 하기 위해 실제 코어(CPU)를 추상화한 가상코어이다.
Windows OS가 CPU를 하나로 메모리에 응용프로그램을 실행시키는 것과 같이, YARN이 컨테이너를 통한 메모리할당을 할 때 vCORE를 사용한다.
http://yourHDFSurl:8088에서 설정된 vCORE를 확인하거나
yarn-site.xml에서 yarn.nodemanager.resource.cpu-vcores 프로퍼티에서 변경할 수 있다. ( Default는 8이다 )
3. 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/
댓글 없음:
댓글 쓰기