spark安装与部署
spark安装与部署
小植为了防止不必要的报错,部署之前请务必从开头开始看,切勿跳过其中一个部署模式,因为每一个部署模式都是从上一个模式的配置上进行的
环境说明
hadoop-2.7.5
jdk1.8.0_181
Scala
spark-3.3.0-bin-hadoop2
下载地址:
(Local)本地部署模式
所谓的Local模式,就是不需要其他任何节点资源就可以在本地执行Spark代码的环境
将spark-3.3.0-bin-hadoop2.tgz
包上传至Linux并解压指定目录
1 | tar -zxvf spark-3.3.0-bin-hadoop2.tgz -C /export/servers |
为了方便后续操作,建议修改文件名(可忽略)
1 | cd /export/servers |
1 | mv spark-3.3.0-bin-hadoop2 spark-3.3.0 |
添加环境变量/etc/profile
:
1 | sudo vim /etc/profile |
在文件内添加以下变量
1 | export SPARK_HOME=/export/servers/spark-3.3.0 |
使用环境变量生效:
1 | source /etc/profile |
进入spark-3.3.0
执行命令 bin/spark-shel
看到这个界面表示本地启动成功
启动成功后,可以输入网址https://master:404
进行Web UI监控页面访问
(Standalone)独立部署模式
local本地模式毕竟只是用来进行练习演示的,真实工作中还是要将应用提交到对应的集群中去执行,这里我们来看看只使用Spark自身节点运行的集群模式,也就是我们所谓的独立部署(Standalone)模式。Spark的Standalone模式体现了经典的master-slave模式。
修改配置文件
进入spark
的conf
目录
1 | cd /export/servers/spark-3.3.0/conf |
修改以下配置
workers
spark-defaults.conf
spark-env.sh
这三个文件在目录里都是模板,这里我们需要各复制一份出来并删除模板后缀名.template
1 | cp workers.template workers |
修改workers
文件,删除localhost
,添加以下内容
1 | master |
注意:这里的节点,是你的分布式集群三台虚拟机的主机名
修改spark-env.sh
,添加JAVA_HOME
环境变量和对应的master节点
1 | export JAVA_HOME=/export/servers/jdk1.8.0_181 |
注意:7077端口,相当于slave2内部通信的8020端口,此处的端口需要确认自己的Hadoop配置
默认就是7077,这里我们不做改动
分发spark文件给其他节点
1 | scp -r /export/servers/spark-3.3.0 slave1:/export/servers |
将porfile
环境配置文件发给其他节点并刷新配置
1 | sudo scp -r /etc/profile slave1:/etc/profile |
1 | source /etc/profile |
启动集群
执行脚本 sbin/start-all.sh
,注意是在spark目录下
1 | sbin/start-all.sh |
查看三台服务器的进程
查看master节点上的资源监控页面web端https://master:8080
提交应用
1 | bin/spark-submit \ |
--class
表示要执行程序的主类
--master spark://master:7077
独立部署模式,连接到Spark集群
spark-examples_2.12-3.0.0.jar
运行类所在的jar包
数字10
表示程序的入口参数,用于设定当前应用的任务数量
提交参数说明
在提交应用中,一般会同时一些提交参数
1 | bin/spark-submit \ |
参数 | 解释 | 可选值举例 |
---|---|---|
–class | Spark程序中包含主函数的类 | |
–master | Spark程序运行的模式(环境) | 模式:local[*]、spark://hadoop02:7077、Yarn |
–executor-memory 1G | 指定每个executor可用内存为1G | 符合集群内存配置即可,具体情况具体分析。 |
–total-executor-cores 2 | 指定所有executor使用的cpu核数为2个 | |
–executor-cores | 指定每个executor使用的cpu核数 | |
application-jar | 打包好的应用jar,包含依赖。这个URL在集群中全局可见。 比如hdfs:// 共享存储系统,如果是file:// path,那么所有的节点的path都包含同样的jar | |
application-arguments | 传给main()方法的参数 |
配置历史服务器
叨叨一句:以下端口号为9000
的与hadoop
的core-site.xml
的配置文件中的一致的,有些人的可能是8020
,也有些人的是9000
由于spark-shell
停止掉后,集群监控master:4040
页面就看不到历史任务的运行情况,所以开发时都配置历史服务器记录任务运行情况。
修改spark-defaults.conf.template
为spark-defaults.conf
1 | cp spark-defaults.conf.template spark-defaults.conf |
修改spar-defaults.conf
文件添加日志存储路径配置
1 | spark.eventLog.enabled true |
需要启动 hadoop 集群,HDFS 上的 directory 目录需要提前存在。
1 | start-all.sh |
修改spark-env.sh
文件, 添加日志配置
1 | export SPARK_HISTORY_OPTS=" |
分发配置文件
1 | scp -r /export/servers/spark-3.3.0 slave1:/export/servers |
重新启动集群和历史服务
1 | sbin/start-all.sh |
重新执行任务
1 | bin/spark-submit \ |
查看历史服务器https://master:18080
配置高可用(HA)
在集群中配置多个Master
结点。这里的高可用采用Zookeeper
设置。
集群规划:
master | slave1 | salve2 |
---|---|---|
Master | Master | |
Zookeeper | Zookeeper | Zookeeper |
Worker | Worker | Worker |
停止集群
1 | sbin/stop-all.sh |
逐个节点启动 Zookeeper
1 | zkServer.sh start |
修改 spark-env.sh
文件添加如下配置
1 | 注释如下内容: |
分发配置文件
1 | scp -r /export/servers/spark-3.3.0 slave1:/export/servers |
启动集群
1 | sbin/start-all.sh |
查看当前结点状态:https://master:8989
启动 slave1
的单独 Master节点
,此时 slave1 节点 Master 状态处于备用状态
1 | sbin/start-master.sh |
提交应用到高可用集群
1 | bin/spark-submit \ |
如果报错,解决方法如下:
杀死master
的master进程后再执行以上命令
查看 slave1
的 Master 资源监控 Web UI,稍等一段时间后,slave1
节点的 Master 状态提升为活动状态