Spark 作为一个数据处理框架和计算引擎,被设计在所有常见的集群环境中运行, 在国内工作中主流的环境为 Yarn,不过逐渐容器式环境也慢慢流行起来。接下来,我们就分别看看不同环境下 Spark 的运行(主要是
Local
和Standalone
两种,yarn之后再介绍)。
文章目录
一、Local 模式
之前在 IDEA 中运行代码的环境我们称之为开发环境,一直在使用的模式可不是 Local 模式,不太一样。所谓的 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境
,一般用于教学,调试,演示等。
1、启动 Local 环境
在具有虚拟机上安装了Spark的基础之上,启动 spark-shell:
首先需要启动spark(开了半天的spark-shell愣是没打开,思前想后spark没启动)😅
启动目录:spark/sbin/
查看启动进程:jps
出现Worker、Master即可~
然后进入到spark/bin/
目录下启动spark-shell:./spark-shell
启动spark-shell后,出现如下的应用程序界面就行了。注意:在spark-shell默认的环境中已经创建好了Spark Context
和 Spark Session
,并且Spark Context 的默认master就是local[*].
返回顶部
2、测试
首先在虚拟机的/home/data/spark/
目录下准备一份数据,用于展示wordcount案例:
使用 spark-shell 环境 Local模式
实现编程:
启动成功后,可以输入网址进行 Web UI
监控页面访问:
返回顶部
3、提交应用程序(jar包)
File -> Project Structure -> Artifacts
,选择添加JAR
,选择从已有依赖的模块中…
添加 jar 包流程:
将生成的jar复制到虚拟机/home/data/spark/jars/
目录下:
进入到spark/bin/目录执行命令:
./spark-submit --class test01.wordCount.wordCount03 --master local[2] /home/data/spark/jars/spark-core.jar 10
1) --class 表示要执行程序的主类,此处可以更换为自己写的应用程序
2) --master local[2] 部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数量
3) spark-core.jar 运行的应用类所在的 jar 包,实际使用时,可以设定为自己打的 jar 包
4) 数字 10 表示程序的入口参数,用于设定当前应用的任务数量
报错了:Exception in thread “main“ java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: sc
,查了一下,是因为Ideal中的scala 2.12.x 版本和虚拟机上的scala 2.11.x 版本不匹配。
所以临时改动一下,将Ideal的scala版本换成 2.11.8,同时修改一下pom.xml文件,更改为2.11
刷新一下maven,重新打个包,运行一下:
又GG了~😢
许久不碰确实忘了许多细节的地方,又自己看了一下:java.net.URISyntaxException: Relative path in absolute URI: G:%5CProjects%5CIdealProject-C21%5CSpark%5Cspark-core%5Csrc%5Cmain%5Cscala%5Ctest01%5CwordCount%5Cdata
一看 G:...
明白了,jar包里的源程序中数据文件的路径没有修改,😏因为是打包到虚拟机中运行,所以它只会总虚拟机的文件系统目录去找文件。所以稍作调整:
重新打包运行:
Web UI 监控:
返回顶部
二、Standalone 模式
local 本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的集群中去执行,这里我们来看看只使用 Spark 自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark 的 Standalone 模式体现了经典的 master-slave 模式。
集群模式:
首先 linux 中需要安装有 scala,参见:【Linux】scala安装
1、解压压缩文件
将 spark-3.0.0-bin-hadoop3.2.tgz 文件上传到 Linux 并解压缩在指定位置
返回顶部
2、修改配置文件
1) 进入解压缩后路径的 conf 目录,修改 slaves.template 文件名为 slaves ,使其生效
mv slaves.template slaves
2) 修改 slaves 文件,添加 work 节点
d
linux2
linux3
3) 修改 spark-env.sh.template 文件名为 spark-env.sh
mv spark-env.sh.template spark-env.sh
4) 修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点
export JAVA_HOME=/home/java/jdk
export SCALA_HOME=/home/scala
SPARK_MASTER_HOST=d
SPARK_MASTER_PORT=7077
export SPARK_WORKER_MEMORY=1G
export SPARK_EXECUTOR_CORES=2
注意:7077 端口,相当于 hadoop3 内部通信的 8020 端口,此处的端口需要确认自己的 Hadoop 配置
5)查看主机名是否与slaves配置文件相匹配
hostname // 查看当前主机名
hostnamectl set-hostname 新的主机名 // 如果主机名与配置文件不相符,使用该命令进行修改
6)配置映射文件(IP地址与主机名的对应)
vi /etc/hosts
如果要进行这一步,则该配置文件每台机器上都需要进行配置,方便分发的时候直接使用主机名;如果不进行配置,那么分发的时候只能使用IP地址。
返回顶部
3、分发 spark-standalone 目录
// 配置过映射文件
scp -r /home/spark-standalone linux2:/home
scp -r /home/spark-standalone linux3:/home
// 没有配置过映射文件
scp -r /home/spark-standalone xxx.xxx.xxx.172:/home
scp -r /home/spark-standalone xxx.xxx.xxx.173:/home
4、启动集群
[root@d ~]# cd /home/spark-standalone/sbin/
[root@d sbin]# ./start-all.sh
如下图所示,集群的启动只需要 Master 主机 d
开启了spark,Worker 从机 linux2
、linux3
就会随之启动。
查看 Master 资源监控 Web UI 界面
http://d:8080 //WebUI界面网址
5、测试(提交应用程序jar包)
./spark-submit --class test01.wordCount.wordCount03 --master spark://d:7077 /home/data/spark/jars/spark-core-standalone.jar 10
1) --class 表示要执行程序的主类
2) --master spark://d:7077 独立部署模式,连接到 Spark 集群
3) spark-core.jar 运行类所在的 jar 包
4) 数字 10 表示程序的入口参数,用于设定当前应用的任务数量
集群运行结果:
Web UI 资源监视:
关于 Spank on YARN 模式暂时还未用到,有兴趣的可以参考托马斯先生的【十二】Spark的安装与部署详情(Local模式,Standalone模式,Spank on YARN模式),步骤讲解还是很详细的~😎,冻死了,先撤!✨✨✨