Dynamic Allocation

이상민·2023년 3월 23일
0

spark

목록 보기
5/17

static allocation

executor의 최대 개수가 고정
만약 다른 application이 executor를 사용하고 있어서 원하는 executor를 전부 사용하지 못한다면 사용 가능한 executor를 먼저 사용하고, application이 종료되어 executor가 남는다면 남은 excutor를 할당함

dynamic allocation

작업에 따라 executor의 최대 개수가 가변적

Dynamic Allocation.... #01 (Total 24 cores/24 memory, Worker 1개)

$ ./sbin/start-master.sh --host spark-master-01 --port 7177 --webui-port 8180
$ ./sbin/start-worker.sh spark://spark-master-01:7177 --host spark-master-01 --port 12345 --webui-port 8181 --cores 24 --memory 24G --work-dir ./work_dir_4_worker

core와 memory를 default보다 과하게 설정함

$ ./bin/spark-shell --master spark://spark-master-01:7177 --conf spark.dynamicAllocation.enabled=true --conf spark.dynamicAllocation.shuffleTracking.enabled=true --executor-cores 2 --executor-memory 2G

dynamic allocation: true
shuffle tracking: true
executor 자체의 core와 memory는 2개와 2GB임

$ jps
6418 Jps
6199 Worker
6135 Master
6301 SparkSubmit

spark shell을 실행한 후 executor가 할당되지 않은 것을 jps와 Master web UI: http://spark-master-01:8180 에서 확인

scala> val rdd = sc.textFile("/skybluelee/spark3/README.md")

executor가 할당되지 않음

rdd.count()

action을 실행하면 executor(2 core, 2g memory)가 할당됨.
이 후 1분이 지나면 executor는 제거됨(killed) -> Removed Executors (1)

scala> val rdd2 = sc.textFile("/skybluelee/data/airline_on_time/1997.csv")  
scala> rdd2.count() 

rdd2의 값이 큰 경우에도 executor의 개수가 한정되어 있는데
이는 동적할당의 경우에도 spark-env.sh의 옵션이 우선시되기 때문이다

$ vi /skybluelee/spark3/conf/spark-env.sh

에서 SPARK_MASTER_OPTS에서 최대 core의 개수를 설정할 수 있다

9개의 executor가 동작하는 것을 확인할 수 있다.

scala> sc.requestExecutors(2)

동작을 하지 않더라도 executor를 할당 받을 수 있다

0개의 댓글