解压缩文件
将 spark-3.0.0-bin-hadoop3.2.tgz 文件上传到 Linux 并解压缩在指定位置
tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module
cd /opt/module
改名 :
mv spark-3.0.0-bin-hadoop3.2 spark-3.0.0-standalone
修改配置文件
进入解压缩后路径的 conf 目录,修改 slaves.template 文件名为 slaves
mv slaves.template slaves
修改 slaves 文件,添加 worker 节点
vim slaves
内容 :
cpucode101
cpucode102
cpucode103
修改 spark-env.sh.template 文件名为 spark-env.sh
mv spark-env.sh.template spark-env.sh
修改 spark-env.sh 文件,添加 JAVA_HOME 环境变量和集群对应的 master 节点
vim spark-env.sh
内容 :
export JAVA_HOME=/opt/module/jdk1.8.0_212
SPARK_MASTER_HOST=cpucode101
SPARK_MASTER_PORT=7077
7077端口,相当于 Hadoop3 内部通信的 8020 端口,此处的端口需要确认自己的 Hadoop 配置
分发 spark-standalone 目录
xsync spark-standalone
启动集群
确保 Zookeeper 关闭
执行脚本命令:
./sbin/start-all.sh
查看三台服务器运行进程
jpsall
Web UI 界面
http://cpucode101:8080
提交应用
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://cpucode101:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
- –class : 执行程序的主类
- –master spark://cpucode102:7077 独立部署模式,连接到Spark集群
- spark-examples_2.12-3.0.0.jar 运行类所在的jar包
- 数字10 : 程序的入口参数,用于设定当前应用的任务数量
执行任务时,会产生多个Java进程
jpsall
执行任务时,默认采用服务器集群节点的总核数,每个节点内存 1024M
提交参数说明
bin/spark-submit \
--class <main-class>
--master <master-url> \
...
<application-jar> \
[application-arguments]
参数 | 解释 | 可选值举例 |
---|
– class | Spark程序中包含主函数的类 | | – master | Spark程序运行的模式(环境) | 模式:local[*]、spark://cpucode101: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() 方法的参数 | |
配置历史服务
当 spark-shell 停止后,就看不到历史任务的运行情况,所以要配置历史服务器记录任务运行情况
修改 spark-defaults.conf.template 文件名为 spark-defaults.conf
mv spark-defaults.conf.template spark-defaults.conf
配置日志存储路径
修改 spark-default.conf 文件
vim spark-default.conf
内容 :
spark.eventLog.enabled true
spark.eventLog.dir hdfs://cpucode101:8020/directory
需要启动 hadoop 集群,HDFS 上的 directory 目录需要提前存在
myhadoop.sh start
创建 HDFS 文件夹
hadoop fs -mkdir /directory
http://cpucode101:9870
添加日志配置
修改 spark-env.sh 文件,
vim spark-env.sh
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://cpucode101:8020/directory
-Dspark.history.retainedApplications=30"
- 参数1:WEB UI 访问的端口号为 18080
- 参数2:指定历史服务器日志存储路径
- 参数3:指定保存 Application 历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数
分发配置文件
xsync conf
重启动 Hadoop 集群
./sbin/start-all.sh
重启动历史服务
./sbin/start-history-server.sh
重新执行任务
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://cpucode101:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
查看历史服务
http://cpucode101:18080
配置高可用(HA)
当集群中只有一个 Master 节点,就存在单点故障问题
为了解决单点故障问题,需要在集群中配置多个Master节点,一旦处于活动状态的 Master 发生故障时,由备用 Master 提供服务,保证作业可以继续执行
高可用采用 Zookeeper 设置
高可用原理 :
集群规划 :
| cpucode101 | cpucode102 | cpucode103 |
---|
Spark | Master | Master | | | Zookeeper | Zookeeper | Zookeeper | | Worker | Worker | Worker |
停止集群
./sbin/stop-all.sh
启动 Zookeeper
zk.sh start
修改 spark-env.sh 文件添加如下配置
注释如下内容:
添加如下内容:
SPARK_MASTER_WEBUI_PORT=8989
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=cpucode101,cpucode102,cpucode103
-Dspark.deploy.zookeeper.dir=/spark"
分发配置文件
xsync conf/
启动集群
./sbin/start-all.sh
启动 cpucode102 的单独 Master 节点,此时 cpucode102 节点 Master 状态处于备用状态
ssh cpucode102 /opt/module/spark-3.0.0-standalone/sbin/start-master.sh
提交应用到高可用集群
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://cpucode101:7077,cpucode102:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
同时 停止 cpucode101 的 Master 资源监控进程
sudo kill -9 10397
查看 cpucode102 的Master 资源监控 Web UI,稍等一段时间后,cpucode102 节点的 Master 状态
关闭集群
./sbin/stop-all.sh
关闭 cpucode102 主
ssh cpucode102 /opt/module/spark-3.0.0-standalone/sbin/stop-master.sh
关闭历史服务 :
./sbin/stop-history-server.sh
|