AWS EMR을 이용해 Apache Spark를 실행할 때 마스터와 슬레이브 수에 따라 적절한 메모리, 코어수를 구하는 Cheatsheet을 사용하고 있다.(무려 5년이나 된 자료이다.)
아직까지 이걸 사용하고 있는 이유는 더 좋은 계산식을 찾는 것도 힘들뿐더러 데이터 특성마다 적절한 메모리, 코어 분배수는 달라지기에 차라리 ETL을 진행하면서 Ganglia로 모니터링 후 조금씩 튜닝하는 게 시간적으로 효율이 더 좋다는 생각.(대충 귀찮다는 뜻)
사용법
1. 노드, 코어수, 메모리 등 자원 입력
1. 하단에 Clsuter Mode와 Client Mode 중 본인이 사용하는 모드를 클릭. 나는 클러스터 모드를 사용한다.
2. 좌측 초록색 셀에 슬레이브 노드수, 노드당 메모리, 노드당 코어수를 적는다
3. 좌측 노란색 셀은 가급적 건들지 않는게 좋다. 나는 Paralleism Per Core만 적당히 조절하는 편
4. 좌측 파란색 셀은 건들지 말것.
2. 노드당 Executor 수 지정
1. 위 과정을 진행하고 나면 하단 표의 숫자가 변경된다. 노드당 익스큐터를 설정할 때마다. 사용 노드, 코어수 등을 표시해주는데, 여기서 가장 중요한 것은 미사용 메모리, 코어 수가 최소화될수록 좋다. (빨간색 박스)
2. 적당히 자원 분산이 잘되고, 미사용 메모리 미사용 코어가 없는 Excutors Per Node를 골라 우측 상단에 입력해준다.(파란색 박스)
3. 출력값 확인
위 과정을 정상적으로 수행했다면 Spark configs가 나온다. 이제 이 값들을 설정해주면 된다.
4. 설정하기
이 설정값은 어떻게 입력할까? 아래 세 가지 정도를 사용해 봤는데 상황에 맞게 골라서 쓰면 된다.
1. 우선 EMR 생성 시에 설정하는 방법
EMR 생성시 소프트웨어 설정란에 Json형태로 명시해준다.
2. Spark submit으로 실행할 때 명시하는 방법
spark.apache.org/docs/latest/submitting-applications.html
3. PySpark 코드 내부에서 설정하기
(Spark Context가 이미 생성된 이후에는 수정해도 수정이 안된다.)
from pyspark.sql import SparkSession, SQLContext
sc = SparkSession.builder.appName("caf_kpi_preprocess").getOrCreate()
sc.conf.set("spark.executor.instances", 29)
#sc.conf.set("config 명칭", config 값)
# 설정 추가1
# 설정 추가2
# 설정 추가3
spark = SQLContext(sc)
Reference
- www.c2fo.io/c2fo/spark/aws/emr/2016/07/06/apache-spark-config-cheatsheet/
- spark.apache.org/docs/latest/submitting-applications.htm
'ML | DL | Big data > Data Engineering' 카테고리의 다른 글
지식 베이스(Knowledge base)에 대해 알아보자 (0) | 2021.10.08 |
---|---|
지식 그래프(Knowledge Graph)가 무엇인지 알아보자 (0) | 2021.10.07 |
ETL, ELT의 4가지 주요 차이점 (0) | 2021.04.26 |
AWS EMR에서 매번 같은 버전의 아나콘다 사용하기 (0) | 2021.03.09 |
Apache Spark 3.0 변경점/변화 총 정리 (0) | 2020.09.10 |
댓글