Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spark config

656 views

Published on

About Spark Configuration
스파크 설정 값 관련 정리

Published in: Engineering
  • Be the first to comment

Spark config

  1. 1. 스파크설정
  2. 2. 스파크설정 클러스터운영, 어플리케이션실행에따라다양한설정값을제공 어플리케이션단위로설정(Spark properties) 각 서버단위로설정(Environment variables)
  3. 3. Spark Properties https://spark.apache.org/docs/latest/configuration.html Dynamically Loading Spark Properties Viewing Spark Properties Available Properties
  4. 4. Spark Properties 개별어플리케이션실행과 관련된설정값들을정의 SparkConf 클래스를사용하여등록 get, set 함수를제공 프로그램이실행되는시점에동적으로필요한값을설정할수없을까? (익스큐터의메모리설정이나코어수할당과 관련된부분) val conf = new SparkConf().setMaster("yarn-client").setAppName( val sc = new SparkContext(conf)
  5. 5. Dynamically Loading Spark Properties spark‑shell 또는spark‑submit 스크립트실행시, 명령행옵션을통해설정값을지정 어플리케이션을실행할때마다원하는설정값을지정가능, (하나의어플리케이션을다양한클러스터환경에서실행하는경우) spark-shell --master yarn --num-excutors 8 --executor-cores 2 --executor-memory 2g --driver-memory 10g --conf spark.ui.port=4042
  6. 6. Dynamically Loading Spark Properties ./bin/spark-submit --class <main-class> --master <master-url> --deploy-mode <deploy-mode> --conf <key>=<value> ... # other options <application-jar> [application-arguments]
  7. 7. Dynamically Loading Spark Properties 설정정보가 담긴 파일을사용하는방법  /$SPARK_HOME/conf/spark-defaults.conf  spark.master spark://master:7077 spark.eventLog.enabled true spark.driver.memory 5g spark.eventLog.enabled true
  8. 8. Dynamically Loading Spark Properties $ aws emr add-steps --cluster-id $CLUSTERID, --steps Name=$JOBNAME, Jar=$JARFILE, Args=[ /usr/lib/spark/bin/spark-submit, --deploy-mode,client, --properties-file,/etc/spark/conf/spark-defaults.conf, --conf,spark.yarn.executor.memoryOverhead=2048, --conf,spark.executor.memory=4g, --packages,$SPARK_PACKAGES ], ActionOnFailure=${ACTION_ON_FAIL}'
  9. 9. Application Properties  spark.app.name   spark.driver.cores   spark.driver.maxResultSize   spark.driver.memory   spark.executor.memory   spark.master   spark.submit.deployMode 
  10. 10. Runtime Environment  spark.driver.extraClassPath   spark.executor.extraClassPath   spark.jars, spark.files   spark.jars.packages 
  11. 11. Etc  Shuffle Behavior : 셔플관련설정  Spark UI : 스파크UI 관련설정  Compression and Serialization : 압축및직렬화  Memory Management : 메모리관련설정  Networking, Scheduling : 네트워크, 스케줄링관련설정  Dynamic Allocation : 동적자원할당관련설정  Security, TLS / SSL : 보안, 암호화관련설정  Spark Streaming, SparkR, GraphX 관련설정
  12. 12. Spark Properties 정리: 등록된설정정보는최종적으로합쳐져서반영 만약동일한속성이두가지이상의방법으로등록됐다면? SparkConf로등록 spark‑submit 명령행매개변수 spark‑defaults.conf 파일 위와같은우선순위로반영
  13. 13. Spark UI, Environment 최종적으로반영된설정값이어떤것인지확인
  14. 14. 환경 변수 각 서버단위로적용되어야하는환경 정보는 서버의환경변수를이용해등록할수있음 spark-env.sh  YARN에서클러스터모드로실행할경우,  spark-defaults.conf 파일의spark.yarn.appMasterEnv 이용  JAVA_HOME   PYSPARK_PYTHON   PYSPARK_DRIVER_PYTHON   SPARK_LOCAL_IP 
  15. 15. /conf/spark‑env.sh
  16. 16. 로깅 설정 Spark은로깅 프레임워크로log4j를사용 로깅 레벨을변경하고 싶다면,  /conf/log4j.properties 
  17. 17. 자원스케줄링 https://spark.apache.org/docs/latest/job‑scheduling.html 클러스터의자원을적절히분배해서사용하는방법 하나의클러스터에서여러작업이실행되는경우2가지 1. 서로다른어플리케이션이동시에실행되는경우 2. 하나의어플리케이션에서여러개의스레드를이용해 다수의잡을동시에실행하는경우
  18. 18. 고정자원할당방식(static resource allocation) 어플리케이션단위로고정된자원을할당 실행되는시점부터종료되는시점까지자원을점유하고 사용 Standalone, YARN, Fine‑grained 모드일때적용 https://spark.apache.org/docs/latest/running‑on‑ mesos.html#fine‑grained‑deprecated 동적자원할당방식(dynamic resource allocation) 실행상황에따라수시로할당량을조정 Spark 1.2 버전부터등장 https://www.youtube.com/watch?v=oqWDeC1zmQw
  19. 19. Graceful Decommission of Executors (p.243) https://spark.apache.org/docs/latest/job‑scheduling.html#graceful‑ decommission‑of‑executors 동적자원할당모드에서는어플리케이션이실행되고 있는도중에익스큐터가 스케줄러에의해삭제될수있다. 따라서, 별도의셔플서비스를구동시킬것 파이션데이터에대해Mapper 수행후결과를파일에기록해놓으면, Reducer가 실행결과를네트워크를통해읽어가는데, 이때Excutor가 삭제 되면해당생성해놓은데이터도함께삭제(셔플데이터유실)
  20. 20. 어플리케이션간의자원할당방식 어플리케이션이입력데이터를읽고 정해진순서에따라 연산수행후결과를계산하고 종료되는경우, 사전에필요한자원을계산해서할당(Static) 어플리케이션이장시간 동작하면서외부이벤트가 있을때만 작업을처리하는형태로동작하는경우, 외부이벤트를대기하는시간 동안은자원낭비가 발생(Dynamic)
  21. 21. 단일어플리케이션의자원스케줄링 SparkContext는기본적으로멀티스레드방식을지원 잡의실행은FIFO 방식, 먼저시작되는작업이끝날때까지대기 FIFO Scheduler / FAIR Scheduler FAIR 방식으로변경하면, 모든잡이번갈아가면서골고루자원을사용
  22. 22. FIFO Scheduler
  23. 23. FAIR Scheduler
  24. 24. Pool 중요한작업, 덜중요한작업의우선순위를조정해야하는경우 풀마다스케줄링방식, 우선순위등을다르게 설정가능 여러사용자를그룹으로묶어서자원을할당 각 그룹별로작업을분리해서관리가능(정기적, 일시적인작업)
  25. 25. Pool <allocations> <pool name="pool1"> <schedulingMode>FAIR</schedulingMode> <weight>1</weight> <minShare>2</minShare> </pool> <pool name="pool2"> <schedulingMode>FIFO</schedulingMode> <weight>2</weight> <minShare>3</minShare> </pool> </allocations> weight는다른풀과의상대적인크기를의미 minShare는최소한의CPU 코어수를의미
  26. 26. END

×