본문 바로가기

프로그래밍(TA, AA)/JVM 언어

[SPARK] 스파크 SUBMIT

[yarn-cluster spark-submit]

 

[yarn-client spark-submit]

 

 

스파크는 spark-submit이라는 모든 클러스터 매니저 간에 작업을 제출해 주는 단일 툴을 제공한다. spark-submit이 옵션 없이 스크립트 이름 혹은 jar 파일 이름만으로 호출된다면 단순히 로컬로 스파크 프로그램을 실행한다. 이 프로그램을 스파크 단독 클러스터 매니저에게 제출하기 위해서는 단독 클러스터의 주소 및 실행을 원하는 익스큐터 프로세스의 크기 등 추가 정보를 제공해 주어야 한다.

 

bin/spark-submit --master spark://host:7077 --executor-memory 10g my_script.py

 

--master 플래그는 접속할 클러스터의 주소를 지정해 주는데, 여기서 쓴 spark://URL은 스파크의 단독 모드를 사용한 클러스터를 의미한다.

 

 값

 설명

 spark://host:port

 스파크 단독 클러스터의 지정한 포트로 접속한다. 기본적으로 스파크 단독 마스터들은 7077 포트를 쓴다.

 mesos://host:port

 메소스 클러스터에 지정한 포트로 접속한다. 기본적으로 메소스 마스터들은 5959 포트를 쓴다.

 yarn

 얀 클러스터에 접속한다. YARN에서 실행할 때는 클러스터 정보를 갖고 있는 하둡 설정 디렉토리를 HADOOP_CONF_DIR 환경 변수에 설정해 주어야 한다.

 local

 로컬 모드에서 싱글 코어로 실행한다.

 local[N]

 로컬 모드에서 N개 코어로 실행한다.

 local[*]

 로컬 모드에서 머신이 갖고 있는 만큼의 코어로 실행한다.

 

클러스터 URL 말고도 spark-submit은 애플리케이션 실행에 대해 세밀한 설정을 할 수 있도록 다양한 옵션을 제공한다. 이 옵션들은 크게 두 종류로 나눌 수 있다. 하나는 작업에 원하는 만큼의 자원량 등을 설정하는 스케줄링 정보에 대한 것이다. 다른 종류는 모든 작업 머신에 배포하기 원하는 파일이나 라이브러리같이 애플리케이션의 실행 의존선에 대한 정보이다.

 

bin/spark-submit [options] <app jar | python file> [app options]

 

[options]는 spark-submit의 플래그들이다. spark-submit --help를 실행하여 가능한 플래그들을 모두 볼 수 있다.

 

<app jar | python file>은 사용자 애플리케이션의 진입점이 될 JAR나 파이썬 스크립트이다.

 

[app options]는 사용자 애플리케이션에 전달된 옵션들이다. 만약 사용자 프로그램의 main()이 전달되는 인자들을 파싱하게 되어 있다면 이것들은 spark-submit의 플래그가 아니라 [app options]에 있어야 한다.

 

 플래그

 설명

 --master

 접속할 클러스터 매니저를 가리킨다

 --deploy-mode

 드라이버 프로그램이 지역적으로 실행될지("client") 클러스터의 작업 머신들 중에서 실행될지("cluster")를 결정한다. client 모드에서는 spark-submit이 드라이버를 자신이 실행되는 머신에서 실행한다. cluster 모드에서는 클러스터의 작업 노드에서 실행되도록 드라이버를 전송한다. 기본은 client 모드이다.

 --class

 자바나 스칼라 프로그램을 실행할 때 "main"이 들어있는 클래스를 지정한다.

 --name

 사람이 읽기 좋게 애플리케이션의 이름을 지정한다. 이 이름은 스파크 웹 UI에 표시된다.

 --jars

 사용자 애플리케이션의 클래스패스에 있어야 할 jar 파일 목록이다. 만약 사용자의 애플리케이션이 외부 jar 파일들을 사용한다면 이 옵션으로 지정해 주어야 한다.

 --files

 애플리케이션의 작업 디렉터리 내에 필요한 파일들의 목록이다. 각 노드에 배포해 주어야 할 데이터 파일 같은 것들을 위한 옵션이다.

 --py-files

 애플리케이션의 PYTHONPATH에 추가되어야 할 파일 목록이다. .py, .egg, .zip 파일 등이 가능하다.

 --executor-memory

 익스큐터가 쓸 메모리를 바이트 단위로 지정한다. "512m"(512메가바이트), "15g"(15기가바이트) 등 큰 용량을 위한 접미어도 사용할 수 있다.

 --driver-memory

 드라이버 프로세스가 쓸 메모리를 바이트 단위로 지정한다. "512m"(512메가바이트), "15g"(15기가바이트) 등 큰 용량을 위한 접미어도 사용할 수 있다.

 

spark-submit은 또한 임의의 SparkConf의 설정을 --conf 속성=값 스타일이나 각 속성의 키와 값을 포함한 파일을 --properties-file을 써서 지정해주는 식으로 전달 가능하다.

 

$ export HADOOP_CONF_DIR=/opt/hadoop/conf

$ ./bin/spark-submit \

  --master yarn \

  --class job.nclicks.parquet.DeviceLevelStatJob.class

  --name "DeviceLevelStatJob" \

  --queue dev \

  --num-executors 40

  --executor-memory 10g

  myApp.jar

 

 

'프로그래밍(TA, AA) > JVM 언어' 카테고리의 다른 글

[스프링] 스프링 프레임워크 5.0 (1)  (0) 2019.02.22
[SCALA] object, case class, trait  (0) 2018.11.11
[SPARK] 스파크 병렬화  (0) 2018.11.03
[SPARK] 스파크 UI  (0) 2018.10.27
[SPARK] 스파크 SQL  (0) 2018.10.21