스파크 애플리케이션 제출
Spark bin 폴더의 spark-submit 스크립트로 사용자가 작성한 애플리케이션을 클러스터에 배포할 수 있다. spark-submit은 모든 클러스터 매니저와 같이 사용할 수 있으므로 클러스터 매니저에 따라 애플리케이션을 변경할 필요는 없다.
종속성이 있는 애플리케이션 번들링
만약 애플리케이션의 코드에 의존성이 있는 경우 의존성과 함께 코드를 패키징해야한다. 따라서 코드와 종속성을 포함하는 어셈블리 jar(또는 jber jar)을 만든다. 어셈블리 jar을 만들기 위해 sbt, maven와 같은 어셈블리 플러그인을 사용할 수 있다. 어셈블리 jar을 만들 때 Spark 및 Hadoop 종속성을 provided 종속성으로 지정한다. 클러스터 매니저가 런타임 시에 해당 종속성을 제공하므로 같이 번들로 묶을 필요가 없다.
파이썬의 경우, spark-submit의 --py-files 옵션을 사용해 애플리케이션과 함께 배포할 .py, .zip, .egg 파일을 추가할 수 있다. 여러 파이썬 파일에 의존하는 경우 .zip, .egg로 패키징하는 것이 좋다.
Spark Submit
spark의 bin/spark-submit 스크립트로 애플리케이션을 클러스터에 배포, 제출할 수 있다.
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
일반적으로 사용되는 몇 가지 옵션은 아래와 같다.
- --class : 애플리케이션의 시작 클래스(e.g. org.apache.spark.examples.SparkPi)
- --master : 클러스터의 master URL (e.g. spark://23.195.26.187:7077)
- --deploy-mode : 배포 모드, cluster 또는 client를 지정한다. default는 client
- --conf : 키 값 형식의 Spark 구성 속성
- application-jar : 애플리케이션과 모든 종속성이 포함된 jar의 경로, URL은 클러스터의 모든 노드가 접근할 수 있어야한다. (e.g hdfs://, file://)
- application-argument : 메인 클래스의 메인 메서드가 전잘되는 인자 (있는 경우만)
파이썬 애플리케이션의 경우 <application-jar> 대신 .py 파일을 전달하고 --py--files 옵션으로 Python .zip, .egg, .py 파일을 추가한다. 참고로 standalone 모드는 python 애플리케이션의 클러스터 모드를 지원하지 않는다.
# Run application locally on 8 cores
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[8] \
/path/to/examples.jar \
100
# Run on a Spark standalone cluster in client deploy mode
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--executor-memory 20G \
--total-executor-cores 100 \
/path/to/examples.jar \
1000
# Run a Python application on a Spark standalone cluster
./bin/spark-submit \
--master spark://207.184.161.138:7077 \
examples/src/main/python/pi.py \
1000
# Run on a YARN cluster in cluster deploy mode
export HADOOP_CONF_DIR=XXX
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--executor-memory 20G \
--num-executors 50 \
/path/to/examples.jar \
1000
# Run on a Kubernetes cluster in cluster deploy mode
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master k8s://xx.yy.zz.ww:443 \
--deploy-mode cluster \
--executor-memory 20G \
--num-executors 50 \
http://path/to/examples.jar \
1000
Master URL
master url 옵션에는 아래 형식이 들어갈 수 있다.
마스터 URL | 의미 |
local | 하나의 워커 스레드로 로컬에서 Spark 실행 (병렬 처리가 없음) |
local[K] | K개의 워커 스레드로 로컬에서 Spark 실행 (이상적으로는 로컬 컴퓨터의 코어 수로 지정) |
spark://HOST:PORT | 지정된 Spark Standalone cluster의 마스터와 연결, 기본적으로 7077포트 사용 |
yarn | 배포 모드에 따라 클라이언트 또는 클러스터 모드에서 yarn 클러스터와 연결 |
k8s://HOST:PORT | 배포 모드에 따라 클라이언트 또는 클러스터 모드에서 kubernest 클러스터와 연결 kubernetes의 API 서버가 지정됨 |
'Hadoop Echo System' 카테고리의 다른 글
YARN (0) | 2024.03.08 |
---|---|
스파크 클러스터 (0) | 2024.03.03 |