스택큐힙리스트

Apache Spark: 코어 개수 대 실행자 개수 본문

카테고리 없음

Apache Spark: 코어 개수 대 실행자 개수

스택큐힙리스트 2023. 11. 28. 06:57
반응형

작업은 다음 구성으로 실행되었습니다:



  1. --master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3 (데이터 노드당 실행자 수, 가능한 만큼 사용)


  2. --master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3 (코어 수 감소)


  3. --master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12 (적은 코어, 많은 실행자)



경과 시간:



  1. 50분 15초


  2. 55분 48초


  3. 31분 23초



놀랍게도, (3)이 훨씬 빨랐습니다.

(1)은 셔플링 시 상호 실행자 통신이 덜 발생하기 때문에 더 빠를 거라고 생각했습니다.

(1)의 코어 수는 (3)보다 적지만, 코어 수가 핵심 요인은 아니었습니다. (2)도 잘 동작했습니다.


(pwilmot의 답변 이후 추가되었습니다.)

안내할 내용을 위해, 성능 모니터 스크린 캡처는 다음과 같습니다:



  • (1)에 대한 강글리아 데이터 노드 요약 - 04:37에 작업이 시작되었습니다.


Ganglia



  • (3)에 대한 강글리아 데이터 노드 요약 - 19:47에 작업이 시작되었습니다. 해당 시간 이전의 그래프는 무시해주세요.


Ganglia


그래프는 대략 2개의 섹션으로 나눠집니다:



  • 첫 번째: 시작부터 reduceByKey까지: CPU 집약적 작업, 네트워크 활동 없음

  • 두 번째: reduceByKey 이후: CPU 사용량 감소, 네트워크 I/O 수행됨.


그래프가 보여주는대로, (1)은 주어진 CPU 성능을 최대한 활용할 수 있습니다. 따라서 이는 쓰레드의 수에 문제가 있지 않을 수도 있습니다.


이 결과를 어떻게 설명할까요?

답변 1


모든 것을 좀 더 구체화하기 위해, 가능한 한 클러스터의 모든 자원을 사용하도록 Spark 앱을 구성하는 예제입니다. 각각 16개의 코어와 64GB의 메모리가 장착된 육 개의 노드가 있는 클러스터를 상상해보십시오. NodeManager의 용량인 yarn.nodemanager.resource.memory-mb 및 yarn.nodemanager.resource.cpu-vcores는 아마도 각각 64512 (메가바이트) 및 15로 설정해야합니다. 우리는 노드가 OS 및 하둡 데몬을 실행하기 위해 일부 리소스가 필요하기 때문에 YARN 컨테이너에 자원의 100%를 할당하지 않으려고합니다. 이 경우, 운영 체제 및 Hadoop 데몬을 실행하는 데 1GB와 1개의 코어를 남겨둡니다. Cloudera Manager는 이를 고려하여 이러한 YARN 속성을 자동으로 구성하는 데 도움이됩니다.


처음 생각할 수있는 대략적인 방법은 --num-executors 6 --executor-cores 15 --executor-memory 63G를 사용하는 것입니다. 그러나 이것은 잘못된 접근 방식입니다. 왜냐하면:


63GB + 실행자 메모리 오버헤드는 NodeManager의 63GB 용량에 맞지 않을 것입니다. 응용 프로그램 마스터는 하나의 노드에서 하나의 코어를 차지하여 해당 노드에서 15 코어 실행자에 대한 공간이 없을 것입니다. 실행자 당 15 개의 코어는 나쁜 HDFS I/O 처리량으로 이어질 수 있습니다.


더 좋은 옵션은 --num-executors 17 --executor-cores 5 --executor-memory 19G를 사용하는 것입니다. 왜냐하면?


이 구성은 AM이있는 노드를 제외한 모든 노드에 3개의 실행자를 결과로 제공합니다. --executor-memory는 (노드 당 3 개의 실행자 / 63)로 유도되었습니다. = 21. 21 * 0.07 = 1.47. 21 - 1.47 ≈ 19입니다.


해당 설명은 Cloudera의 블로그 기사인 Apache Spark 작업을 튜닝하는 방법 (파트 2)에서 제공되었다.

답변 2

아파치 스파크: 코어 수 대 실행자 수
아파치 스파크는 대용량 데이터 처리와 분산 컴퓨팅을 위한 인기 있는 오픈 소스 데이터 처리 엔진입니다. 스파크는 데이터 처리 및 분석을 간편하고 효율적으로 수행할 수 있도록 도와주는 많은 기능과 도구를 제공합니다. 그 중에서도 '코어 수'와 '실행자 수'는 중요한 매개 변수로, 스파크 애플리케이션의 성능과 확장성에 영향을 미칩니다.
이 논문에서는 코어 수와 실행자 수 간의 관계를 조사하고, 애플리케이션의 최적의 설정을 결정하는 방법에 대해 알아보겠습니다.
코어 수는 스파크 클러스터의 각 노드에서 사용 가능한 CPU 코어의 총 수를 나타냅니다. 한 머신에서 여러 개의 코어를 사용할 수 있으며, 일반적으로 CPU가 하이퍼스레딩 기술을 지원하는 경우, 물리적 코어의 두 배인 가상 코어가 제공됩니다. 이러한 코어 수는 스파크 애플리케이션이 동시에 처리할 수 있는 작업량과 성능에 직접적인 영향을 미칩니다.
실행자 수는 스파크 클러스터에서 수행되는 작업을 분산시키는 데 사용되는 작업 단위입니다. 스파크는 작업을 여러 개의 실행자에게 분할하여 병렬 처리하므로, 실행자 수가 많을수록 애플리케이션의 처리 속도가 높아질 수 있습니다.
코어 수와 실행자 수 사이의 관계는 여러 요인에 따라 달라질 수 있습니다. 하나의 실행자는 여러 개의 코어를 사용할 수 있고, 하나의 코어는 여러 개의 실행자에 할당될 수 있습니다. 따라서 적절한 코어 수와 실행자 수를 선택하기 위해서는 애플리케이션의 성능과 목표에 맞는 작업 부하를 고려해야 합니다.
첫째, 코어 수가 적은 경우 실행자 수를 증가시켜야 합니다. 이는 작업을 더욱 병렬화하여 처리 속도를 향상시키는 데 도움이 됩니다. 그러나 실행자 수가 새점을 넘어가면 스파크 클러스터의 리소스가 과도하게 사용되어 성능이 저하될 수 있으므로 주의가 필요합니다.
둘째, 코어 수가 많은 경우에는 실행자 수를 적게 설정하여, 각 실행자가 더 많은 코어를 사용할 수 있도록 합니다. 이는 대규모 데이터 처리를 위해 큰 작업을 더 효율적으로 처리하는 데 도움이 됩니다. 그러나 코어 수가 너무 많으면 실행자 간의 경쟁으로 인해 가용 리소스를 낭비할 수 있으므로 적절한 벨런스를 유지하는 것이 중요합니다.
마지막으로, 이러한 코어 수와 실행자 수의 결정에는 특정 애플리케이션의 특성과 클러스터의 리소스 제약 사항을 고려해야 합니다. 가용 리소스가 제한적인 경우 더 적은 실행자와 코어 수를 선택하여 효율적으로 작업을 처리할 수 있습니다.
이렇듯 코어 수와 실행자 수는 스파크 애플리케이션의 성능과 확장성에 영향을 미치는 중요한 요소입니다. 이를 통해 적절한 코어 및 실행자 수를 선택하여 스파크 애플리케이션을 최적화하고, 대용량 데이터 처리와 분산 컴퓨팅의 효율성을 극대화할 수 있습니다. 스파크 애플리케이션을 성공적으로 구축하고 확장하기 위해서는 이러한 요소들에 대한 이해와 조율이 필수입니다.

반응형
Comments