Spark部署
local模式:
local模式就是在本地部署单个spark服务,local模式多数用于自学形式,在本地进行练手和测试。 官网下载地址: Apache Archive Distribution Directory
下载之后将文件夹在linux系统中进行解压缩操作:
其实通过上面的计算,我们就成功将他部署到了local中,之后执行下面的命令展示一下:
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master local[2] \ ./examples/jars/spark-examples_2.12-3.3.1.jar \ 10命令详解
这是一个使用 Spark 自带的spark-submit脚本来提交任务的标准命令,作用是计算圆周率(π)的近似值。这条命令是学习 Spark 时最经典的入门示例,下面我为你逐行拆解它的含义。
bin/spark-submit:这是 Spark 提供的统一任务提交脚本,用于将你的应用程序提交到集群上运行。bin/表示它在 Spark 安装目录下的bin文件夹中。\:这是 Linux 系统的续行符,告诉终端这行命令还没结束,下一行是它的延续。它本身没有实际功能,只是为了提升可读性。--class org.apache.spark.examples.SparkPi:指定程序运行的入口类。Spark 会去执行spark-examplesJAR 包中SparkPi类的main方法。--master local[2]:指定 Spark 任务的运行模式。local表示在本地模式运行,不会连接任何集群,非常适合开发和测试。[2]表示启用2 个线程来模拟并行计算,相当于使用 2 个 CPU 核心来执行任务。
./examples/jars/spark-examples_2.12-3.3.1.jar:指定要运行的应用程序 JAR 包的路径。这个包包含了 Spark 官方提供的各种示例程序,_2.12表示它是为 Scala 2.12 编译的,-3.3.1则是 Spark 版本号。10:这是传给SparkPi示例程序的参数。在SparkPi程序中,这个数字代表循环计算的次数,数值越大,计算量越大,估算出的圆周率也越精确。
spark web看板观测执行中的任务
Spark web UI at http://192.168.1.191:4040
但是当前的看板只能在任务执行的时候可以观测,执行之后这个页面就看不到了,他自己就会退出。
Yarn部署
注意下面的部署都是在你已经拥有一个可以使用的hadoop为前提进行配置。
不是到yarn
修改spark中的配置文件/conf/spark-env.sh,添加YARN_CONF_DIR配置,保证后续运行任务的路径都变成集群路径
[atguigu@hadoop102 conf]$ mv spark-env.sh.template spark-env.sh
[atguigu@hadoop102 conf]$ vim spark-env.sh
YARN_CONF_DIR=/opt/module/hadoop/etc/hadoop
之后通过命令启动hadoop:
启动HDFS以及YARN集群
$ sbin/start-dfs.sh
$ sbin/start-yarn.sh
执行命令进行测试:
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
./examples/jars/spark-examples_2.12-3.3.1.jar \
10
可以计算出结果证明执行成功。
因为是部署在yarn上的,我们可以打开Yarn资源管理页面查看:
地址:http://ResourceManager主机IP:8088/cluster/apps
查看运行日志
目前是Hadoop的作业运行日志展示,如果想获取Spark的作业运行日志,请进行如下配置:
1)修改spark-default.conf文件,配置日志存储路径(写)
vim spark-defaults.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop102:8020/directory
2)修改spark-env.sh文件,添加如下配置:
vim spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://hadoop102:8020/directory
-Dspark.history.retainedApplications=30"
# 参数1含义:WEBUI访问的端口号为18080
# 参数2含义:指定历史服务器日志存储路径(读)
# 参数3含义:指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
3)hdfs://hadoop102:8020/directory 这个文件一定要存在,大家自己要创建一下。
4)为了能从Yarn上关联到Spark历史服务器,需要配置spark历史服务器关联路径。
目的:点击yarn(8088)上spark任务的history按钮,进入的是spark历史服务器(18080),而不再是yarn历史服务器(19888)。
修改配置文件/opt/module/spark-yarn/conf/spark-defaults.conf
添加如下内容:
spark.yarn.historyServer.address=hadoop102:18080
spark.history.ui.port=18080
重启Spark历史服务
sbin/stop-history-server.sh
sbin/start-history-server.sh
配置完成后再次点击就可以直接跳转到spark历史页面中
Spark On YARN 两种部署模式详解
client模式
- Driver 进程运行位置Driver 程序运行在提交任务的本地客户端机器(你敲 spark-submit 命令的服务器),不在 YARN 容器中。
- 资源容器分工
- AM(ApplicationMaster):YARN 集群中 NodeManager 的容器,仅负责申请资源、调度 Executor;
- Driver:本地客户端进程;
- Executor:集群各个 NodeManager 容器,执行计算任务。
- 日志输出位置
- Spark 运行打印的计算日志、print 输出:直接打印在本地提交命令的终端窗口;
- YARN 容器日志:存于 Hadoop 集群日志服务器,需用
yarn logs -applicationId查看。
- 网络与适用场景
- 客户端机器必须全程在线、网络稳定,一旦断开终端 / 关闭服务器,Driver 进程被杀,任务直接失败;
- 适合开发调试:本地实时看日志、排查代码报错,测试小任务。
- 优缺点✅ 调试方便,日志实时输出在本地; ❌ 提交机器占用资源,长期跑任务不稳定,网络波动易丢任务。
cluster 模式:
- Driver 进程运行位置Driver 内嵌在YARN ApplicationMaster 容器中,运行在集群某一台 NodeManager 节点,不在本地提交机。
- 资源容器分工
- AM 容器:同时承载 ApplicationMaster + Spark Driver 两个核心程序;
- Executor:集群其他 NodeManager 容器,执行 RDD / 算子计算。
- 日志输出位置所有 Spark 日志、计算输出、异常堆栈全部存在 YARN 集群日志系统,本地终端只会打印任务提交信息,看不到业务输出;必须执行
yarn logs -applicationId 任务ID查看完整日志。 - 网络与适用场景提交命令后,本地客户端即可断开、关机,任务不受影响;Driver 在集群内部,节点间网络通信更快稳定; 适合生产环境定时 / 长期离线计算任务。
- 优缺点✅ 任务稳定性高,不依赖提交客户端机器,集群内部通信性能更好,生产标准用法; ❌ 调试麻烦,不能实时看本地日志,排错需要去 YARN 拉取日志。
| 对比维度 | YARN Client | YARN Cluster |
|---|---|---|
| Driver 所在机器 | 提交任务的本地客户端 | 集群中某台 NodeManager(AM 容器) |
| 客户端是否可断开 | 不可断开,断则任务失败 | 提交完即可断开,任务正常运行 |
| 实时日志位置 | 本地终端直接打印 | 仅集群 YARN 日志,本地无业务输出 |
| 资源占用 | 占用提交服务器 CPU / 内存 | 全部资源由 YARN 集群调度 |
| 生产推荐 | 不推荐,仅调试用 | 生产环境标准部署模式 |
| 网络依赖 | 客户端与集群保持长连接 | Driver 在集群内部,网络开销更小 |
client命令:
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ --deploy-mode client \ ./examples/jars/spark-examples_2.12-3.3.1.jar \ 10
-------------------------------------------------------------------------------------------------------------------------
bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master yarn \ ./examples/jars/spark-examples_2.12-3.3.1.jar \ 10
cluster模式命令
bin/spark-submit --class org.apache.spark.examples.SparkPi --master yarn --deploy-mode cluster ./examples/jars/spark-examples_2.12-3.3.1.jar 10
上面是当前最常见的两种部署方式,当然也可以使用k8s进行部署,大家敬请期待
