Spark 의 -- Spark Submit 제출 프로그램 상세 설명
spark - submit 는 spark 설치 디 렉 터 리 에 있 는 빈 디 렉 터 리 의 다음 셸 스 크 립 트 파일 로 클 러 스 터 에서 프로그램 을 시작 하 는 데 사 용 됩 니 다 (예:
*. py 스 크 립 트);spark 가 지원 하 는 클 러 스 터 모드 에 대해 spark - submit 가 응용 프로그램 을 제출 할 때 통 일 된 인터페이스 가 있 으 며 설정 이 많 지 않 습 니 다.
spark - submit 를 사용 할 때 프로그램의 jar 패키지 와 - jars 옵션 을 통 해 포 함 된 임의의 jar 파일 은 자동 으로 클 러 스 터 에 전 달 됩 니 다.
spark-submit --class --master --jars
1. 바 인 딩 응용 프로그램 의존
코드 가 다른 항목 에 의존 하면 코드 를 Spark 클 러 스 터 에 나 누 어 주기 위해 서 는 이 의존 을 응용 프로그램 에 포장 해 야 합 니 다.sbt 와 Maven 에는 모두 설치 플러그 인 이 있 습 니 다. 통합 jar 를 만 들 때 Spark 와 Hadoop 에 필요 한 의존 도 를 표시 하기 만 하면 이러한 의존 과 응용 을 포장 할 필요 가 없습니다. 프로그램 이 실 행 될 때 클 러 스 터 의 master 는 이러한 의존 도 를 어떻게 호출 하고 제공 하 는 지 알 고 있 기 때 문 입 니 다.하지만 통 합 된 jar 가방 이 있 으 면 빈/spark - submit 스 크 립 트 를 실행 할 때 이 jar 가방 을 전달 합 니 다.
Python 언어 에 있어 서 spark - submit 의 – py - files 매개 변 수 를 사용 하여. py, zip, egg 파일 을 응용 프로그램 과 함께 배포 할 수 있 습 니 다. 응용 프로그램 이 여러 Python 파일 에 의존 하면. zip 또는. egg 파일 로 포장 하 는 것 을 권장 합 니 다.
2. spark - submit 로 프로그램 시작
프로그램 을 포장 하면 빈/spark - submit 스 크 립 트 를 사용 하여 프로그램 을 시작 할 수 있 습 니 다. 이 스 크 립 트 는 Spark 류 경로 (classpath) 와 응용 프로그램 의존 패 키 지 를 설정 할 수 있 고 서로 다른 Spark 가 지원 하 는 클 러 스 터 관리 와 배치 모드 를 설정 할 수 있 습 니 다.작업 을 제출 하면 Standalone 모드 든 Spark on Yarn 모드 든 웹 주소 http:/: 4040 을 통 해 현재 실행 상 태 를 볼 수 있 습 니 다 (구체 적 인 방문 주 소 는 spark 구축 시의 설정 파일 을 봐 야 합 니 다).spark - submit 제출 응용 프로그램의 대략적인 형식 은 다음 과 같 습 니 다.
./bin/spark-submit \
--class \
--master \
--deploy-mode \
--conf = \
... # other options
\
[application-arguments]
많이 사용 하 는 매개 변 수 는:--class:应用程序的入口点(例如,org.apache.spark.examples.SparkPi)
--master:集群的master URL(例如,spark://localhost:7077)
--deploy-mode:将driver部署到worker节点(cluster模式)或者作为外部客户端部署到本地(client模式),默认情况下是client模式
--conf:用key=value格式强制指定Spark配置属性,用引号括起来
--application-jar:包含应用程序和所有依赖的jar包的路径,路径必须是在集群中是全局可见的,例如,hdfs://路径或者file://路径
--application-arguments:传递给主类中main函数的参数
일반적인 배치 전략 은 게 이 트 웨 이 기기 에 응용 프로그램 을 제출 하 는 것 입 니 다. 이 기계 와 Worker 기 계 는 하나의 네트워크 에 배 치 됩 니 다 (예 를 들 어 Standalone 모드 의 EC2 클 러 스 터 중의 Master 노드).이 배치 정책 에서 client 모드 가 더욱 적합 합 니 다. client 모드 의 driver 는 spark - submit 프로 세 스 와 함께 시작 합 니 다. spark - submit 프로 세 스 는 클 라 이언 트 의 역할 을 합 니 다.프로그램의 입 출력 은 콘 솔 에 의존 합 니 다. 그러면 이 모드 는 REPL (예 를 들 어 Spark shell) 에 관 한 프로그램 에 특히 적합 합 니 다.또 다른 배치 전략 은 응용 프로그램 이 Worker 노드 에서 멀리 떨 어 진 기 계 를 통 해 제출 (예 를 들 어 로 컬 또는 휴대용 장치) 하 는 경우, 일반적으로 cluster 모드 를 사용 하여 drivers 와 executors 간 의 네트워크 지연 시간 을 최소 화 하 는 것 이다.cluster 모드 는 Mesos 클 러 스 터 나 Python 프로그램 에서 잠시 지원 되 지 않 습 니 다.
Python 응용 프로그램 에서 간단하게 application - jar 에 JAR 파일 이 아 닌. py 파일 을 전달 한 다음 – py - files 로 Python. zip,. egg 또는. py 파일 을 검색 경로 에 추가 합 니 다.
클 러 스 터 관리자 가 사용 하고 있 는 옵션 도 있 습 니 다.예 를 들 어 Spark Standalone 의 cluster 배치 모드 에 대해 서도 – supervise 를 사용 하여 driver 가 0 (non - zero) 이 아 닌 종료 코드 의 오 류 를 만 났 을 때 자동 으로 재 부팅 할 수 있 습 니 다.spark - submit 에서 - help 를 실행 하여 모든 옵션 을 표시 합 니 다.다음은 자주 사용 하 는 옵션 의 예 입 니 다.
# 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 on a Spark standalone cluster in cluster deploy mode with supervise
./bin/spark-submit –class org.apache.spark.examples.SparkPi –master spark://207.184.161.138:7077 –deploy-mode cluster –supervise –executor-memory 20G –total-executor-cores 100 /path/to/examples.jar 1000
Run on a YARN cluster
export HADOOP_CONF_DIR=XXX ./bin/spark-submit –class org.apache.spark.examples.SparkPi –master yarn-cluster\# can also be
yarn-client
for client mode –executor -memory 20G –num-executors 50 /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 Mesos cluster in cluster deploy mode with supervise
./bin/spark-submit –class org.apache.spark.examples.SparkPi –master mesos://207.184.161.138:7077 –deploy-mode cluster –supervise –executor-memory 20G –total-executor-cores 100 http://path/to/examples.jar 1000
3、Master URLs
Spark 에 전 달 된 master url 은 다음 과 같은 임의의 형식 중 하나 일 수 있 습 니 다.
master URL
의의
local
워 커 스 레 드 1 개 를 사용 하여 로 컬 에서 Spark 를 실행 합 니 다 (즉, 병렬 화 되 지 않 았 습 니 다)
local[K]
K 개의 worker 스 레 드 를 사용 하여 Spark 를 로 컬 로 실행 합 니 다 (K 를 기계 의 CPU 핵 수로 설정 하 는 것 이 좋 습 니 다)
local[]
기계 의 CPU 논리 핵 수 에 따라 가능 한 한 Worker 스 레 드 를 많이 사용 합 니 다.
spark://HOST:PORT
주어진 Spark Standalone 군집 에 연 결 된 Master 입 니 다. 이 포트 는 Master 가 설정 한 포트 여야 합 니 다. 기본 값 은 7077 입 니 다.
mesos://HOST:PORT
주어진 Mesos 군집 에 연 결 된 Master 입 니 다. 이 포트 는 Master 가 설정 한 포트 여야 합 니 다. 기본 값 은 5050 입 니 다.Mesos 클 러 스 터 가 ZooKeeper 를 사용 하면 master URL 이 사 용 됩 니 다.mesos://zk://……
yarn-client
client 모드 로 YARN 클 러 스 터 에 연결, 클 러 스 터 위 치 는 HADOOPCONF_DIR 환경 변수 획득
yarn-cluster
cluster 모드 로 YARN 클 러 스 터 에 연결, 클 러 스 터 위 치 는 HADOOPCONF_DIR 환경 변수 획득
4. 파일 에서 설정 불 러 오기
spark - submit 스 크 립 트 는 속성 파일 을 통 해 기본 Spark 설정 값 을 불 러 와 프로그램 에 전달 할 수 있 습 니 다.기본적으로 Spark 디 렉 터 리 에 있 는 conf/spark - default. conf 파일 의 각 설정 항목 을 읽 습 니 다. 자세 한 정 보 는 '기본 설정 불 러 오기' 를 참고 하 십시오.
기본 설정 을 불 러 오 면 spark - submit 명령 의 일부 매개 변수 옵션 을 취소 할 수 있 습 니 다.예 를 들 어 spark. master 속성 을 설정 하면 – master 옵션 을 직접 생략 할 수 있 습 니 다.일반적으로 SparkConf 가 설정 한 속성 값 을 직접 사용 하면 가장 높 은 우선 순 위 를 가 집 니 다. 그 다음 에 spark - submit 명령 에서 전달 하 는 옵션 입 니 다. 마지막 으로 기본 설정 파일 의 값 입 니 다.설정 옵션 이 어디에서 왔 는 지 잘 모 르 면 spark - submit – verbose 인쇄 부 에서 더 세밀 한 디 버 깅 정 보 를 실행 할 수 있 습 니 다.
5. 고급 의존 관리
spark - submit 을 사용 할 때 프로그램의 jar 패키지 와 – jars 에서 선택 한 jar 는 자동 으로 클 러 스 터 에 업로드 되 며, – jars 가 제공 하 는 jar 경로 사이 에 쉼표 로 구분 되 어야 합 니 다. 경로 가 디 렉 터 리 라면 – jars 의 설정 이 작 동 하지 않 습 니 다. abc. jar 에 자세히 설명해 야 합 니 다.Spark 는 아래 URL 형식 을 사용 하여 서로 다른 jar 패키지 배포 정책 을 허용 합 니 다.1. 파일 file 방식: 절대 경로 와 file:/URIs 는 driver 로 서 의 HTTP 파일 서버 이 고 모든 executor 는 driver 의 HTTP 서버 에서 파일 을 끌 어 옵 니 다.2. hdfs 방식: http:, https:, ftp:, 주어진 URI 에서 파일 과 JAR 패 키 지 를 끌 어 옵 니 다.3. 로 컬 local 방식: local:/로 시작 하 는 URI 는 모든 worker 노드 의 로 컬 파일 이 어야 합 니 다. 이 는 네트워크 IO 비용 이 없 거나 NFS/GlusterFS 등 을 통 해 모든 worker 큰 파일/JAR 파일 에 공유 하거나 좋 은 작업 을 할 수 있 음 을 의미 합 니 다.
注意:SparkContext的JAR包和文件都会被复制到每个executor节点的工作目录下,这将用掉大量的空间,所以需要清理干净。
在YARN下,会自动清理。
在Spark Standalone下,可以通过配置spark.worker.cleanup.appDataTtl属性做到自动清理。
用户可以用–packages选项提供一个以逗号分隔的maven清单来包含任意其他依赖。
其它的库(或SBT中的resolvers)可以用–repositories选项添加(同样用逗号分隔),这些命令都可以用在pyspark,spark-shell和spark-submit中来包含一些Spark包。
Python 에 있어 서 – py - files 옵션 은 executors 에. egg,. zip,. py 라 이브 러 리 를 나 누 어 줄 수 있 습 니 다.
6. YARN 클 러 스 터 에서 Spark 응용 프로그램 실행
상세 한 것 은 홈 페이지 가 Spark 독립 클 러 스 터 모드 를 참고 하 십시오. – master 가 제공 하 는 주 소 는 Spark 자체 가 제공 합 니 다. Yrn 모드 에서 Spark 자원 관리자 의 주 소 는 사실은 hadop 의 master 주소 이기 때문에 – master 의 주 소 는 Yrn 이 제공 해 야 합 니 다.형식 은 다음 과 같 습 니 다.
$ ./bin/spark-submit –class path.to.your.Class –master yarn –deploy-mode cluster [options] jar > [app options]
다음은 더 상세 한 예 이다.$ ./bin/spark-submit –class org.apache.spark.examples.SparkPi
–master yarn
–deploy-mode cluster
–driver-memory 4g
–executor-memory 2g
–executor-cores 1
–queue thequeue
lib/spark-examples.jar
10
실행 과정 은 크게 다음 과 같 습 니 다. 위의 응용 프로그램 이 제출 되면 yarn 클 라 이언 트 프로그램 이 시 작 됩 니 다. 이 프로그램 은 master 의 응용 프로그램 을 시작 합 니 다. SparkPi 는 master 응용 프로그램의 서로 다른 스 레 드 를 시작 합 니 다. yarn 클 라 이언 트 프로그램 은 주기 적 으로 master 응용 프로그램의 상 태 를 검사 하고 콘 솔 에서 이 상 태 를 인쇄 합 니 다. 프로그램 이 끝나 면 yarn 클 라 이언 트 가 끝나 면 바로 나 옵 니 다.드라이브 와 실행 기의 로그 파일 을 보면 서 프로그램 을 디 버 깅 할 수 있 습 니 다.
우선 여기에 놓 고 시간 이 있 으 면 다시 보충 하 자
7. Spark Python 응용 프로그램 실행
라 이브 러 리 와 함께 제출 하 는 문 제 를 해결 하 는 것 이 중요 하 다.방법 1: 라 이브 러 리 를 python 파일 로 제출 합 니 다.우선 이해 해 야 할 것 은 우리 가 python 외부 라 이브 러 리 를 설치 할 때 이 라 이브 러 리 의 기능 은 주로 abc. py 와 같은 클래스 파일 로 이 루어 집 니 다. 우리 가 유사
from spark_learning.utils.default_utils import setDefaultEncoding
를 사용 할 때 이 클래스 파일 에서 어떤 함 수 를 도 입 했 습 니 다.그래서 우리 가 어떤 라 이브 러 리 를 클 러 스 터 에 제출 하려 고 할 때 관련 파일 을 찾 아서 이 파일 을 제출 할 수 있 습 니 다.다음 형식 을 참고 할 수 있 습 니 다 (오류 가 있 을 수 있 습 니 다).
-
#python代码中的import
-
from spark_learning.utils.default_utils
import setDefaultEncoding,initSparkContext,ensureOffset
-
#submit命令:
-
bin/spark-submit --jars /home/jabo/software/spark
-1.5
.2-bin-hadoop2
.6/lib/spark-streaming-kafka-assembly_2
.10
-1.5
.2.jar
–py-files /home/jabo/spark-by-python/spark_learning/utils/default_utils.py
/home/jabo/spark-by-python/spark_learning/third_day/streaming_kafka_avg.py