첫째, 작업 제출
1.1 스파크 제출
모든 모드가 사용하는 스파크 spark-submit
다음과 같은 형식으로 작업을 제출 명령을 :
./bin/spark-submit \
--class <main-class> \ # 应用程序主入口类
--master <master-url> \ # 集群的 Master Url
--deploy-mode <deploy-mode> \ # 部署模式
--conf <key>=<value> \ # 可选配置
... # other options
<application-jar> \ # Jar 包路径
[application-arguments] #传递给主入口类的参数
그 참고 : 클러스터 환경에서, application-jar
당신은 HDFS의 경로가 될 수 있으며, 클러스터의 모든 노드에 액세스 할 수 있어야합니다, 또한 로컬 파일 시스템 경로가 될 수는 로컬 파일 시스템 경로의 경우, 각각의 기계가 필요합니다 클러스터 항아리 패키지를 존재하는 동일한 경로에 노드입니다.
1.2 배포 모드
이-배포 모드 cluster
와 client
두 개의 선택적 매개 변수, 기본값 client
. 다음은 모두 원사 모드에 스파크에서 설명 :
- 클러스터 모드에서 마스터 프로세스 애플리케이션에서 Drvier 실행 스파크, 프로세스가 클러스터에 YARN에 의해 관리되고, 클라이언트 제출 된 작업은 응용 프로그램을 시작한 후 폐쇄 될 수있다;
- , Drvier 클라이언트 모드에서 작업을 제출하는 과정에서 클라이언트에서 실행 스파크, 마스터 프로세스는 원사에서 리소스를 요청하는 데 사용됩니다.
1.3 마스터 URL
마스터 URL을 다음과 같은 테이블에있는 모든 옵션 매개 변수 :
마스터 URL | 의미 |
---|---|
local |
로컬 스파크를 실행하는 스레드를 사용하여 |
local[K] |
로컬 스파크를 실행하는 K 작업자 스레드를 사용하여 |
local[K,F] |
로컬로 실행중인 K 작업자 스레드를 사용하여, 두 번째 매개 변수는 재시도 횟수는 작업 실패 |
local[*] |
로컬 스파크를 실행하는 동일한 CPU를 사용하여 스레드 및 코어의 수 |
local[*,F] |
두 번째 매개 변수 <BR/> 로컬 불꽃을 실행하는 CPU 코어와 동일한 번호를 사용하여 스레드의 수는 재시도 횟수는 작업 실패 |
spark://HOST:PORT |
독립형 클러스터 지정 마스터 노드에 연결. 기본 포트 번호는 7077입니다. |
spark://HOST1:PORT1,HOST2:PORT2 |
사육사는 높은 가용성을 사용하여 독립 실행 형 클러스터의 경우, 사육사가 설정 한 모든 마스터 호스트 주소를 포함해야합니다. |
mesos://HOST:PORT |
주어진 메소 클러스터에 연결. 기본 포트는 5050입니다. , 사용의 메소 클러스터 사육사를 들어 mesos://zk://... 주소를 지정하려면 사용 --deploy-mode cluster 제출 모델. |
yarn |
YARN은 클러스터에 클러스터 구성을 연결 HADOOP_CONF_DIR , 또는 YARN_CONF_DIR 결정했다. 은 Using --deploy-mode 매개 변수 것은 구성 할 수 있습니다 client 또는 cluster 패턴. |
다음은 세 가지 일반적인 배포 모델 및 해당 작업 제출에 대해 설명합니다.
두 로컬 모드
지역의 가장 간단한 모드에서 작업을 제출, 어떤 구성은 다음 명령을 제출할 필요가 없습니다 :
# 本地模式提交应用
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100 # 传给 SparkPi 的参数
spark-examples_2.11-2.4.0.jar
불꽃 테스트 패킷이 공급된다 SparkPi
원주율의 값을 계산하기 위해, 실행 결과는 다음과 같다 :
세, 독립 실행 형 모드
독립 실행 형 모드가 관리하는 내장 된 자원 관리자를 사용하여 제공 내장 된 클러스터링 스파크입니다. 클러스터 구성 메이터 프레젠테이션 두 작업자 노드에 따라 아래와 같이 두 호스트 설명 본원에 사용 :
- hadoop001 : 두 호스트, 그래서 hadoop001 마스터 노드 모두 있기 때문에, 노드는 노동자입니다;
- hadoop002 : 근무 노드.
3.1 환경 구성
우리는 먼저 불꽃이 같은 경로 두 호스트에 압축 된 확인해야합니다. Hadoop001 다음에 ${SPARK_HOME}/conf/
디렉토리 구성 및 샘플 구성을 복사 :
# cp spark-env.sh.template spark-env.sh
에서 spark-env.sh
JDK 디렉토리 구성, 구성의 완료 후 hadoop002을 scp를 위해 배포됩니다
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201
3.2 클러스터 구성
에서 ${SPARK_HOME}/conf/
디렉토리, 클러스터 구성 및 샘플 구성을 복사 :
# cp slaves.template slaves
모든 작업자 노드의 호스트 이름을 지정합니다 :
# A Spark Worker will be started on each of the machines listed below.
hadoop001
hadoop002
그것은 다음과 같은 세 가지 점을 주목해야한다 :
- 主机名与 IP 地址的映射必须在
/etc/hosts
文件中已经配置,否则就直接使用 IP 地址; - 每个主机名必须独占一行;
- Spark 的 Master 主机是通过 SSH 访问所有的 Worker 节点,所以需要预先配置免密登录。
3.3 启动
使用 start-all.sh
代表启动 Master 和所有 Worker 服务。
./sbin/start-master.sh
访问 8080 端口,查看 Spark 的 Web-UI 界面,,此时应该显示有两个有效的工作节点:
3.4 提交作业
# 以client模式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop001:7077 \
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
# 以cluster模式提交到standalone集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://207.184.161.138:7077 \
--deploy-mode cluster \
--supervise \ # 配置此参数代表开启监督,如果主应用程序异常退出,则自动重启 Driver
--executor-memory 2G \
--total-executor-cores 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
3.5 可选配置
在虚拟机上提交作业时经常出现一个的问题是作业无法申请到足够的资源:
Initial job has not accepted any resources;
check your cluster UI to ensure that workers are registered and have sufficient resources
<br/>
这时候可以查看 Web UI,我这里是内存空间不足:提交命令中要求作业的 executor-memory
是 2G,但是实际的工作节点的 Memory
只有 1G,这时候你可以修改 --executor-memory
,也可以修改 Woker 的 Memory
,其默认值为主机所有可用内存值减去 1G。
<br/>
关于 Master 和 Woker 节点的所有可选配置如下,可以在 spark-env.sh
中进行对应的配置:
Environment Variable(环境变量) | Meaning(含义) |
---|---|
SPARK_MASTER_HOST |
master 节点地址 |
SPARK_MASTER_PORT |
master 节点地址端口(默认:7077) |
SPARK_MASTER_WEBUI_PORT |
master 的 web UI 的端口(默认:8080) |
SPARK_MASTER_OPTS |
仅用于 master 的配置属性,格式是 "-Dx=y"(默认:none),所有属性可以参考官方文档:spark-standalone-mode |
SPARK_LOCAL_DIRS |
spark 的临时存储的目录,用于暂存 map 的输出和持久化存储 RDDs。多个目录用逗号分隔 |
SPARK_WORKER_CORES |
spark worker 节点可以使用 CPU Cores 的数量。(默认:全部可用) |
SPARK_WORKER_MEMORY |
spark worker 节点可以使用的内存数量(默认:全部的内存减去 1GB); |
SPARK_WORKER_PORT |
포트 스파크 노동자 노드 (기본 : 무작위 (랜덤)) |
SPARK_WORKER_WEBUI_PORT |
포트 (포트)의 웹 UI의 노동자 (기본값 : 8081) |
SPARK_WORKER_DIR |
작업자가 응용 프로그램의 디렉토리를 실행,이 디렉토리는 로그 및 임시 공간을 포함 (기본 : SPARK_HOME / 일) |
SPARK_WORKER_OPTS |
작업자에 대한 구성 특성은 형식은 "-dx = Y"(: 없음 기본)입니다. 모든 속성은 공식 문서를 참조 할 수 있습니다 : 스파크 - 독립 - 모드 |
SPARK_DAEMON_MEMORY |
메모리는 마스터와 노동자 데몬을 촉발하기 위해 할당. (기본값 : 1G) |
SPARK_DAEMON_JAVA_OPTS |
JVM 옵션 스파크 마스터와 작업자 데몬, 형식은 "-dx = Y"(: 없음 기본값) |
SPARK_PUBLIC_DNS |
공공 DNS 이름 스파크 마스터와 노동자. (기본값 : 없음) |
원사 모드에 대한 세, 스파크
원사의 실행을 지원하기 위해 작업을 제출 스파크, 이번에는 작업자 노드를 시작할 필요가 없습니다 마스터 노드를 시작할 필요가 없습니다.
3.1 구성
에서 spark-env.sh
디렉토리 하둡 위치의 구성, 사용할 수 있습니다 YARN_CONF_DIR
또는 HADOOP_CONF_DIR
지정 :
YARN_CONF_DIR=/usr/app/hadoop-2.6.0-cdh5.15.2/etc/hadoop
# JDK安装位置
JAVA_HOME=/usr/java/jdk1.8.0_201
3.2 시작
하둡은 여기 원사를 포함, 출시 HDFS는 예외를 throw합니다, 스파크는 HDFS가 시작되지 않는 경우, 계산하는 동안 임시 파일을 저장하는 HDFS를 사용하기 때문에 시작할 필요가되었는지 확인해야합니다.
# start-yarn.sh
# start-dfs.sh
3.3 신청서를 제출
# 以client模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
# 以cluster模式提交到yarn集群
spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--executor-memory 2G \
--num-executors 10 \
/usr/app/spark-2.4.0-bin-hadoop2.6/examples/jars/spark-examples_2.11-2.4.0.jar \
100
더 큰 데이터 계열은 GitHub의 오픈 소스 프로젝트를 찾을 수 있습니다 : 빅 데이터 시작하기