spark hw spec 산정을 위해 고려할점
spark hw spec 산정을 위해 고려할점

spark hw spec 산정을 위해 고려할점

설명
spark hw spec 산정을 위해 고려할점
Last Updated
Last updated April 29, 2024
태그
spark
Data Engineering
DE
 

스파크 하드웨어 스펙 산정을 위해 고려할 점

  • 스파크 애플리케이션의 목적, 복잡도, 데이터 크기와 유형에 따라 적절한 클러스터 구성을 선택합니다. 예를 들어 배치 처리 작업은 CPU와 메모리가 많이 필요하고, 스트리밍 작업은 네트워크 대역폭과 디스크 I/O가 중요합니다¹.
  • 스파크 애플리케이션의 병렬화 수준을 결정하기 위해 파티션 개수를 조정합니다. 파티션 개수는 클러스터의 코어 개수보다 크거나 같아야 하며, 너무 작으면 자원이 낭비되고 너무 크면 오버헤드가 발생합니다¹.
  • 스파크 애플리케이션의 메모리 사용량을 최적화하기 위해 직렬화 포맷, 메모리 관리 모드, 가비지 컬렉션 전략 등을 설정합니다. 예를 들어 Kryo 직렬화는 Java 직렬화보다 더 효율적이고, 정적 메모리 할당은 동적 메모리 할당보다 더 안정적입니다¹.
  • 스파크 애플리케이션의 성능과 안정성을 모니터링하고 분석하기 위해 스파크 UI, 로그 파일, 메트릭 시스템 등을 활용합니다. 이를 통해 잠재적인 문제점을 발견하고 해결할 수 있습니다¹.
참고로 열교환기 설계 절차에 대해서는 다음과 같은 글들이 검색되었습니다.
  • 서비스 경량화를 위한 MSA 설계 시 고려사항 | 인사이트 리포트 | 삼성SDS 클라우드: MSA (Microservices Architecture)는 경량화되고 독립적인 여러 개의 서비스를 조합하여 애플리케이션을 구현하는 방식으로 도메인 주도 설계 (Domain Driven Design)와 서비스 메쉬 (Service Mesh) 기반의 아우터 아키텍처 (Outer Architecture)를 활용한다².
  • Shell and Tube heat exchanger 설계 절차 R1 : 네이버 블로그: Shell and Tube heat exchanger는 열전달 계수와 압력 손실을 만족하는 형상과 치수를 결정하는 기본설계와 온도, 압력, 기타 힘에 견디는 두께와 치수를 결정하는 상세설계로 나뉘며 전처리 자료로 각 side의 입구와 출구의 온도, 압력 및 유량 등이 필요하다³.
  • 머신러닝 파이프라인에서 데이터 전처리 방법: 머신러닝 파이프라인에서 데이터 전처리는 모델 학습 및 서빙의 입력에 알맞게 가공하는 과정으로 데이터 정규화 (Normalization), 범주형 변수 인코딩 (Categorical Variable Encoding), 결
출처: Bing과의 대화, 2023. 3. 21.(1) 서비스 경량화를 위한 MSA 설계 시 고려사항 | 인사이트리포트 .... https://www.samsungsds.com/kr/insights/1239180_4627.html 액세스한 날짜 2023. 3. 21.. (2) Shell and Tube heat exchanger 설계 절차 R1 : 네이버 블로그. https://blog.naver.com/PostView.nhn?blogId=proteccon&logNo=222210366819 액세스한 날짜 2023. 3. 21.. (3) 머신러닝 파이프라인에서 데이터 전처리 방법. https://bcho.tistory.com/1380 액세스한 날짜 2023. 3. 21..
 
 

스파크 YARN 클러스터 하드웨어 스펙 산정

  • 스파크 애플리케이션의 목적, 복잡도, 데이터 크기와 유형에 따라 적절한 클러스터 크기와 형태를 결정합니다. 스파크 클러스터는 드라이버 프로그램과 여러 개의 익스큐터 프로세스로 구성되며, 익스큐터 프로세스는 코어 개수와 메모리 크기를 설정할 수 있습니다. 익스큐터 프로세스의 개수와 크기는 애플리케이션의 병렬화 수준과 데이터 크기에 따라 조정할 수 있습니다¹.
  • 스파크 YARN 클러스터 매니저를 설정합니다. 스파크는 YARN 클러스터 매니저와 통신하기 위해 Hadoop 설정 파일을 참조하므로 HADOOP_CONF_DIR 또는 YARN_CONF_DIR 환경 변수를 설정해야 합니다. 또한 스파크 애플리케이션을 실행할 때 --master 옵션에 yarn을 지정하고 --deploy-mode 옵션에 cluster 또는 client를 지정해야 합니다².
  • 스파크 YARN 클러스터의 설정을 조정합니다. 스파크는 다양한 설정 옵션을 제공하며, 이들은 SparkConf 객체나 Java 시스템 속성으로 설정할 수 있습니다. 예를 들어 메모리 관리 모드, 직렬화 포맷, 압축 및 암호화 옵션 등을 설정할 수 있습니다³. 또한 스파크 UI나 로그 파일 등을 통해 클러스터의 성능과 상태를 모니터링하고 분석할 수 있습니다¹.
참고로 스파크 YARN 클러스터 하드웨어 스펙 산정에 대해서는 다음과 같은 글들이 검색되었습니다.
  • Running Spark on YARN - Spark 3.3.2 Documentation: 스파크가 YARN에서 어떻게 동작하는지와 필요한 설정 및 옵션에 대해 설명한다².
  • Cluster Mode Overview - Spark 3.3.2 Documentation: 스파크가 클러스터에서 어떻게 동작하는지와 지원하는 클러스터 매니저 종류에 대해 설명한다¹.
  • apache spark - Pyspark on yarn-cluster mode - Stack Overflow: Pyspark에서 yarn-cluster 모드를 사용하는 방법에 대해 답변한다.
출처: Bing과의 대화, 2023. 3. 21.(1) Running Spark on YARN - Spark 3.3.2 Documentation. https://spark.apache.org/docs/latest/running-on-yarn.html 액세스한 날짜 2023. 3. 21.. (2) Running Spark on YARN - Spark 2.2.0 Documentation. https://spark.apache.org/docs/2.2.0/running-on-yarn.html 액세스한 날짜 2023. 3. 21.. (3) apache spark - Pyspark on yarn-cluster mode - Stack Overflow. https://stackoverflow.com/questions/31327275/pyspark-on-yarn-cluster-mode 액세스한 날짜 2023. 3. 21..
 
 

익스큐터 프로세스의 코어 개수와 메모리 크기

  • 익스큐터 프로세스의 코어 개수는 스파크 애플리케이션의 병렬화 수준을 결정합니다. 즉, 한 번에 실행할 수 있는 태스크의 개수입니다. 익스큐터 프로세스당 코어 개수를 늘리면 태스크 병렬 처리가 가능해지지만, 너무 많은 태스크를 동시에 실행하면 컨텍스트 스위칭 오버헤드가 발생하거나 메모리 부족 문제가 발생할 수 있습니다. 반대로 익스큐터 프로세스당 코어 개수를 줄이면 태스크 병렬 처리가 어려워지고 자원이 낭비될 수 있습니다. 일반적으로 익스큐터 프로세스당 5개 정도의 코어를 할당하는 것이 좋은 성능을 보인다고 알려져 있습니다¹.
  • 익스큐터 프로세스의 메모리 크기는 스파크 애플리케이션의 데이터 처리량과 관련됩니다. 익스큐터 프로세스는 RDD나 데이터셋 등을 메모리에 저장하고 캐싱하며, 가비지 컬렉션을 수행합니다. 익스큐터 프로세스당 메모리 크기를 늘리면 더 많은 데이터를 메모리에 저장하고 가비지 컬렉션 비용을 줄일 수 있습니다. 하지만 너무 많은 메모리를 할당하면 YARN에서 리소스 요청이 거절되거나 클러스터 전체적인 자원 활용도가 떨어질 수 있습니다. 반대로 익스큐터 프로세서당 메모리 크기를 줄이면 더 많은 익스큐터 프로세서를 생성할 수 있으나, 데이터 스풀링이나 가비지 컬렉션 비용이 증가할 수 있습니다. 일반적으로 익스큐터 프로세서당 10GB 이상의 메모리를 할당하지 않는 것이 좋다고 알려져 있습니다².
  • 익스큐터 프로세서의 코어 개수와 메모리 크기는 서로 상호 영향을 주므로 균형있게 조정해야 합니다. 예를 들어, 한 노드에 16개의 코어와 64GB의 RAM이 있다고 가정합시다. 이때 각 익스큐터 프로세서에 5개의 코어와 19GB의 메모리를 할당한다면, 한 노드에 3개의 익슥처 프로세서가 생성될 수 있습니다¹. 하지만 각 익슥처 프로세서에 2개의 코어와 9GB의 메모리를 할당한다면, 한 노드에 6개의 익슥처 프로세서가 생성될 수 있으며, 이 경우 태스트 병렬 처리 성능은 낮아질 수 있으나 자원 활용도는 높아질 수 있습니다².
출처: Bing과의 대화, 2023. 3. 21.(1) PySpark : Setting Executors/Cores and Memory Local Machine. https://stackoverflow.com/questions/63387253/pyspark-setting-executors-cores-and-memory-local-machine 액세스한 날짜 2023. 3. 21.. (2) How to tune spark executor number, cores and executor memory?. https://stackoverflow.com/questions/37871194/how-to-tune-spark-executor-number-cores-and-executor-memory 액세스한 날짜 2023. 3. 21.. (3) How to deal with executor memory and driver memory in Spark?. https://stackoverflow.com/questions/27181737/how-to-deal-with-executor-memory-and-driver-memory-in-spark 액세스한 날짜 2023. 3. 21.. (4) Distribution of Executors, Cores and Memory for a Spark Application. http://beginnershadoop.com/2019/09/30/distribution-of-executors-cores-and-memory-for-a-spark-application/ 액세스한 날짜 2023. 3. 21..
 
 
  • 익스큐터 프로세서의 코어 개수와 메모리 크기를 설정하는 방법은 스파크 애플리케이션을 실행할 때 --executor-cores 와 --executor-memory 옵션을 사용하면 됩니다. 예를 들어, 각 익스큐터 프로세서에 5개의 코어와 19GB의 메모리를 할당하려면 다음과 같이 입력할 수 있습니다.
$ ./bin/spark-submit --class path.to.your.Class --master yarn --deploy-mode cluster --executor-cores 5 --executor-memory 19g [options] <app jar> [app options]
  • 익스큐터 프로세서의 코어 개수와 메모리 크기를 조정할 때 주의할 점은 YARN 클러스터 매니저가 요청한 리소스를 승인해주는지 확인하는 것입니다. YARN 클러스터 매니저는 각 컨테이너에 할당할 수 있는 최대 리소스량을 yarn.scheduler.maximum-allocation-mb 와 yarn.scheduler.maximum-allocation-vcores 로 설정합니다. 만약 요청한 리소스량이 이 값보다 크다면, YARN 클러스터 매니저는 요청을 거절하거나 줄여서 승인할 수 있습니다. 따라서 익스큐터 프로세서의 코어 개수와 메모리 크기를 설정하기 전에 YARN 클러스터 매니저의 설정을 확인해야 합니다.
 
 

고려해야 할 다른 요소

  • 스파크 애플리케이션의 데이터 직렬화 방식입니다. 데이터 직렬화는 네트워크 통신과 메모리 사용량에 큰 영향을 미치므로, 적절한 직렬화 포맷을 선택하는 것이 중요합니다. 스파크는 기본적으로 Java 직렬화를 사용하지만, Kryo 직렬화를 사용하면 더 빠르고 압축된 형식으로 데이터를 전송하고 저장할 수 있습니다. Kryo 직렬화를 사용하려면 스파크 설정에서 spark.serializer 옵션을 org.apache.spark.serializer.KryoSerializer 로 변경하고, 사용할 클래스들을 미리 등록해야 합니다¹.
  • 스파크 애플리케이션의 메모리 관리 모드입니다. 스파크는 익스큐터 프로세서의 메모리를 정적으로 할당하거나 동적으로 조절할 수 있습니다. 정적 메모리 할당은 익스큐터 프로세서가 시작될 때 고정된 양의 메모리를 할당하는 방식으로, 안정적이고 예측 가능한 성능을 제공합니다. 동적 메모리 할당은 익스큐터 프로세서가 필요에 따라 메모리를 요청하거나 반납하는 방식으로, 유연하고 효율적인 자원 활용을 가능하게 합니다. 동적 메모리 할당을 사용하려면 스파크 설정에서 spark.dynamicAllocation.enabled 옵션을 true 로 변경해야 합니다².
  • 스파크 애플리케이션의 클러스터 매니저 종류입니다. 스파크는 standalone, Mesos, YARN, Kubernetes 등 다양한 클러스터 매니저와 호환됩니다. 각 클러스터 매니저는 리소스 할당과 관리 방식에 따라 장단점과 특징이 있으므로, 애플리케이션의 목적과 요구사항에 맞게 적절한 클러스터 매니저를 선택하는 것이 중요합니다³.
참고로 스파크 클러스터 튜닝 요소에 대해서는 다음과 같은 글들이 검색되었습니다.
  • Tuning - Spark 3.3.2 Documentation: 스파크 애플리케이션의 성능 향상을 위해 고려해야 할 여러 가지 요소들에 대해 설명한다¹.
  • Cluster Mode Overview - Spark 3.3.2 Documentation: 스패
출처: Bing과의 대화, 2023. 3. 21.(1) Tuning - Spark 3.3.2 Documentation. https://spark.apache.org/docs/latest/tuning.html 액세스한 날짜 2023. 3. 21.. (2) Cluster Mode Overview - Spark 3.3.2 Documentation. https://spark.apache.org/docs/latest/cluster-overview.html 액세스한 날짜 2023. 3. 21.. (3) Optimize Spark K-Means clustering on Graviton2. https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/optimize-spark-on-aws-graviton2-best-practices-k-means-clustering 액세스한 날짜 2023. 3. 21..