Spark 支持本地运行模式(Local 模式)、独立运行模式(Standalone 模式)、Mesos、YARN(Yet Another Resource Negotiator)、Kubernetes 模式等。
一、Spark Local 模式
1.1 下载解压 Spark
1 | [hadoop@hadoop1 ~/downloads]$ wget https://dlcdn.apache.org/spark/spark-3.1.2/spark-3.1.2-bin-hadoop2.7.tgz |
解压目录说明
bin:可执行脚本
conf:配置文件
data:示例程序使用数据
examples:示例程序
jars:依赖 jar 包
python:pythonAPI
R:R 语言 API
sbin:集群管理命令
yarn:整合yarn需要的东西
1.2 启动 spark-shell
1 | [hadoop@hadoop1 ~]$ ./spark-3.1.2-bin-hadoop2.7/bin/spark-shell --master local[1] |
spark-shell –master local[N] 表示在本地模拟N个线程来运行当前任务
spark-shell –master local[*] 表示使用当前机器上所有可用的资源
1.3 计算圆周率案例
1 | [hadoop@hadoop1 ~]$ ./spark-3.1.2-bin-hadoop2.7/bin/spark-submit \ |
二、Spark Standalone 模式
服务规划
| 服务器 | IP地址 | spark角色 | 其它依赖 |
|---|---|---|---|
| hadoop1 | 10.10.8.11 | Master、Slave | JDK1.8 |
| hadoop2 | 10.10.8.12 | Slave | JDK1.8 |
| hadoop3 | 10.10.8.13 | Slave | JDK1.8 |
2.1 准备工作
服务器免密登录
1 | [dev@hadoop1 ~]# su - hadoop |
配置jdk 1.8环境
1 | [hadoop@hadoop1 ~]$ tar xf downloads/jdk-8u301-linux-x64.tar.gz |
2.2 修改 spark 配置
1 | #下载spark |
修改 spark-env.sh 配置文件
1 | [hadoop@hadoop1 ~/spark-3.1.2-bin-hadoop2.7/conf]$ cp spark-env.sh.template spark-env.sh |
修改 slaves 配置文件
1 | [hadoop@hadoop1 ~/spark-3.1.2-bin-hadoop2.7/conf]$ vim slaves |
2.3 分发 spark 配置
将spark配置拷贝到其它服务器上
1 | [hadoop@hadoop1 ~]$ rsync -av spark-3.1.2-bin-hadoop2.7 hadoop@hadoop2:~/ |
2.4 启动 spark 集群
1 | 启动master |
2.5 计算圆周率案例
1 | Standalone cluster模式运行 |
三、Spark Standalone 高可用
服务规划
| 服务器 | IP地址 | spark角色 | 其它依赖 |
|---|---|---|---|
| hadoop1 | 10.10.8.11 | Master、Slave | JDK1.8、zookeeper |
| hadoop2 | 10.10.8.12 | Master、Slave | JDK1.8、zookeeper |
| hadoop3 | 10.10.8.13 | Slave | JDK1.8、zookeeper |
3.1 修改 spark 配置
在Spark Standalone 模式的基础上修改spark-env.sh配置文件,增加zk配置
1 | [hadoop@hadoop1 ~]$ vim spark-3.1.2-bin-hadoop2.7/conf/spark-env.sh |
3.2 分发 spark 配置
将spark配置拷贝到其它服务器上
1 | [hadoop@hadoop1 ~]$ rsync -av spark-3.1.2-bin-hadoop2.7 hadoop@hadoop2:~/ |
3.3 修改 master2 配置
修改master2机器上的spark-env.sh配置文件 SPARK_MASTER_HOST 参数,将master地址指向master2服务器
1 | [hadoop@hadoop2 ~]$ vim spark-3.1.2-bin-hadoop2.7/conf/spark-env.sh |
3.4 启动 spark 集群
1 | 启动master1 |
如果和其它服务端口冲突可以修改 start-master.sh 中的
SPARK_MASTER_WEBUI_PORT=8080更改为其它端口
查看 spark web页面


3.4 验证 高可用
停止 master 节点服务
1 | [hadoop@hadoop1 ~]$ ./spark-3.1.2-bin-hadoop2.7/sbin/stop-master.sh |
访问master1节点

访问master2节点

四、Spark on YARN模式
服务规划
| 主机名 | IP地址 | spark角色 | 依赖服务 |
|---|---|---|---|
| hadoop1 | 10.10.8.11 | Master、Slave | JDK1.8、YARN |
| hadoop2 | 10.10.8.12 | Slave | JDK1.8、YARN |
| hadoop3 | 10.10.8.13 | Slave | JDK1.8、YARN |
前置条件
hadoop yarn集群是可用的
4.1 准备工作
服务器免密登录
1 | [dev@hadoop1 ~]# su - hadoop |
配置jdk 1.8环境
1 | [hadoop@hadoop1 ~]$ tar xf downloads/jdk-8u301-linux-x64.tar.gz |
4.2 修改 spark 配置
修改master2机器上的spark-env.sh配置,增加hadoop YARN配置文件目录
1 | [hadoop@hadoop1 ~/spark-3.1.2-bin-hadoop2.7/conf]$ cp spark-env.sh.template spark-env.sh |
修改 slaves 配置文件
1 | [hadoop@hadoop1 ~/spark-3.1.2-bin-hadoop2.7/conf]$ vim slaves |
4.3 分发 spark 配置
将spark配置拷贝到其它服务器上
1 | [hadoop@hadoop1 ~]$ rsync -av spark-3.1.2-bin-hadoop2.7 hadoop@hadoop2:~/ |
4.4 启动 spark 集群
1 | 启动master |
如果和其它服务端口冲突可以修改 start-master.sh 中的
SPARK_MASTER_WEBUI_PORT=8080更改为其它端口
4.5 运行示例
1 | cluster模式运行 |
client模式如果运行报错:
ERROR spark.SparkContext: Error initializing SparkContext.修改spark-env.sh添加export SPARK_LOCAL_IP=<IP_Address>配置
4.6 在 YRAN 上查看任务

五、Spark on Mesos 模式
服务规划
| 主机名 | IP地址 | mesos角色 |
|---|---|---|
| hadoop1 | 10.10.8.11 | Master、Agent |
前置条件
spark 是可用的
5.1 部署mesos
编译安装 mesos
1 | [hadoop@hadoop1 ~/downloads]$ wget http://archive.apache.org/dist/mesos/1.9.0/mesos-1.9.0.tar.gz |
启动 mesos
1 | 启动 mesos master |
访问 mesos WEB页面

5.2 spark 配置
将当前使用的spark二进制包上传到hdfs
1 | [hadoop@hadoop1 ~]$ hdfs dfs -put ~/downloads/spark-3.1.2-bin-hadoop2.7.tgz spark-3.1.2-bin-hadoop2.7.tgz |
修改 spark-env.sh 配置文件,增加mesos相关配置
1 | [hadoop@hadoop1 ~/spark-3.1.2-bin-hadoop2.7]$ vim conf/spark-env.sh |
5.3 运行示例
1 | [hadoop@hadoop1 ~/spark-3.1.2-bin-hadoop2.7]$ ./bin/spark-submit \ |
或使用spark-shell
1 | 上传示例文件到hdfs |
同时前往mesos WEB查看进行中的任务
