Spark环境搭建(Stand alone模式 && Stand alone HA模式)

您所在的位置:网站首页 spark主节点 Spark环境搭建(Stand alone模式 && Stand alone HA模式)

Spark环境搭建(Stand alone模式 && Stand alone HA模式)

2023-12-10 08:58| 来源: 网络整理| 查看: 265

Sand alone 架构

Standalone模式是Spark自带的一种集群模式,不同于前面本地模式启动多个进程来模拟集群的环境,Standalone模式是真实地在多个机器之间搭建Spark集群的环境,完全可以利用该模式搭建多机器集群,用于实际的大数据处理。

Stand alone 是完整的spark运行环境,其中 Master 角色以Master进程存在,worker角色以worker进程存在, Driver角色在运行时存在于Master进程内,Executor运行于Worker进程内

StandAlone集群在进程上主要有3类进程:

主节点Master进程: Master角色, 管理整个集群资源,并托管运行各个任务的Driver从节点Workers: Worker角色, 管理每个机器的资源,分配对应的资源来运行Executor(Task); 每个从节点分配资源信息给Worker管理,资源信息包含内存Memory和CPU Cores核数历史服务器HistoryServer(可选): Spark Application运行完成以后,保存事件日志数据至HDFS,启动HistoryServer可以查看应用运行相关信息。

在这里插入图片描述 对于上图有一个地方需要注意: 在 standalone 模式下, master进程和 worker进程是固定的。 开启一个任务,就会在master进程中开启一个对应的 Driver线程,然后在worker进程中开启一个或者多个 Executor线程 开启两个任务,就会在master进程中开启两个对应的 Driver线程,对应的Executor各自汇报给对应的Driver,Executor数量根据你任务情况而定。

stand alone 环境安装

node1运行: Spark的Master进程 和 1个Worker进程 node2运行: spark的1个worker进程 node3运行: spark的1个worker进程 整个集群提供: 1个master进程 和 3个worker进程

前提:在所有机器安装Python(Anaconda) 参照 单机模式下的 Anaconda安装即可,除了不解压 https://blog.csdn.net/m0_48639280/article/details/128459471 记得配置 /etc/profile /root/.bashrc 更改国内源

进入到spark的安装目录,进入conf文件夹 配置workers文件,这儿有一个前提,你/etc/hosts 文件有路由映射,要是你没有映射worker文件设置不生效 在这里插入图片描述

# 改名, 去掉后面的.template后缀 mv workers.template workers # 编辑worker文件 vim workers # 将里面的localhost删除, 追加 node1 node2 node3 到workers文件内 # 功能: 这个文件就是指示了 当前SparkStandAlone环境下, 有哪些worker

配置spark-env.sh文件

# 1. 改名 mv spark-env.sh.template spark-env.sh # 2. 编辑spark-env.sh, 在底部追加如下内容 ## 设置JAVA安装目录 JAVA_HOME=/export/server/jdk ## HADOOP软件配置文件目录,读取HDFS上文件和运行YARN集群 HADOOP_CONF_DIR=/export/server/hadoop/etc/hadoop YARN_CONF_DIR=/export/server/hadoop/etc/hadoop ## 指定spark老大Master的IP和提交任务的通信端口 # 告知Spark的master运行在哪个机器上 export SPARK_MASTER_HOST=node1 # 告知sparkmaster的通讯端口 export SPARK_MASTER_PORT=7077 # 告知spark master的 webui端口 SPARK_MASTER_WEBUI_PORT=8080 # worker cpu可用核数 SPARK_WORKER_CORES=1 # worker可用内存 SPARK_WORKER_MEMORY=1g # worker的工作通讯地址 SPARK_WORKER_PORT=7078 # worker的 webui地址 SPARK_WORKER_WEBUI_PORT=8081 ## 设置历史服务器 # 配置的意思是 将spark程序运行的历史日志 存到hdfs的/sparklog文件夹中 SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://node1:8020/sparklog/ -Dspark.history.fs.cleaner.enabled=true"

在HDFS上创建程序运行历史记录存放的文件夹: hadoop fs -mkdir /sparklog hadoop fs -chmod 777 /sparklog 修改权限方便后续操作

配置spark-defaults.conf文件

# 1. 改名 mv spark-defaults.conf.template spark-defaults.conf # 2. 修改内容, 追加如下内容 # 开启spark的日期记录功能 spark.eventLog.enabled true # 设置spark日志记录的路径 spark.eventLog.dir hdfs://node1:8020/sparklog/ # 设置spark日志是否启动压缩 spark.eventLog.compress true

配置log4j.properties 文件 [可选配置]

# 1. 改名 mv log4j.properties.template log4j.properties # 2. 修改内容 参考下图

在这里插入图片描述

将Spark安装文件夹 分发到其它的服务器上 目前这些配置只在 node1上。

scp -r spark-3.1.2-bin-hadoop3.2 node2:/export/server/ scp -r spark-3.1.2-bin-hadoop3.2 node3:/export/server/

准备步骤完成了,最后检查每台机器的: JAVA_HOME SPARK_HOME PYSPARK_PYTHON 等等 环境变量是否正常指向正确的目录

启动历史服务器,在spark安装目录下的sbin目录 start-history-server.sh 执行该脚本即可 如下图,则启动成功 在这里插入图片描述 查看历史服务器WEB UI 历史服务器的默认端口是: 18080 我们启动在node1上, 可以在浏览器打开: node1:18080来进入到历史服务器的WEB UI上。可以查看自己提交任务的执行记录。

还是这个sbin目录 通过 start-all.sh脚本启动集群 stop-all.sh 脚本关闭集群 start-master.sh start-work.sh 启动当前机器上的 master 和 worker 如下图,则启动成功 在这里插入图片描述 在这里插入图片描述 查看Master的WEB UI 默认端口master我们设置到了8080 如果端口被占用, 会顺延到8081 …;8082… 8083… 直到申请到端口为止 可以在日志中查看, 具体顺延到哪个端口上: Service 'MasterUI' could not bind on port 8080. Attempting port 8081. 在这里插入图片描述

测试

连接Stand Alone集群 在spark安装目录下:执行以下命令。前面单机模式有使用这个命令 pyspark --master local[*] 或者 pyspark --master local 这种是连接到本地模式的命令 下面是连接到stand alone 集群模式的命令 bin/pyspark --master spark://node1:7077 下图标记显示的就是我们连接到master的客户端: 在这里插入图片描述 在这里插入图片描述 http://node1:4040这个页面就是Driver提供的界面,里面可以查看任务的运行详情,你要是有多个Driver就有多个页面,端口往后顺延 4041 4042这样。

同样的, 提交完整程序到spark运行的命令: bin/spark-submit --master spark://node1:7077 运行R语言的客户端 : bin/sparkR --master spark://node1:7077

总结

在前面我们接触到了不少的监控页面,有4040,有8080,有18080,它们有何区别吗? 4040: 是一个运行的Application在运行的过程中临时绑定的端口,用以查看当前任务的状态.4040被占用会顺延到4041.4042等 4040是一个临时端口,当前程序运行完成后, 4040就会被注销哦 8080: 默认是StandAlone下, Master角色(进程)的WEB端口,用以查看当前Master(集群)的状态 18080: 默认是历史服务器的端口, 由于每个程序运行完成后,4040端口就被注销了. 在以后想回看某个程序的运行状态就可以通过历史服务器查看,历史服务器长期稳定运行,可供随时查看被记录的程序的运行过程.

Stand Alone HA模式

Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障(SPOF)的问题。 一旦Master节点宕机,就没有进程处理集群资源的规划,资源无法进行规划,那么集群就无法获得资源。

解决方式:Spark提供了两种方案 1.基于文件系统的单点恢复(Single-Node Recovery with Local File System)---------只能用于开发或测试环境。 2.基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)----可以用于生产环境。 ZooKeeper提供了一个Leader Election机制,利用这个机制可以保证虽然集群存在多个Master,但是只有一个是Active的,其他的都是Standby。当Active的Master出现故障时,另外的一个Standby Master会被选举出来。由于集群的信息,包括Worker, Driver和Application的信息都已经持久化到文件系统,因此在切换的过程中只会影响新Job的提交,对于正在进行的Job没有任何的影响。加入ZooKeeper的集群整体架构如下图所示。 在这里插入图片描述 在配置了HA模式情况下,Master在启动之后都会去 zookeeper中去注册一个临时节点,节点名字在下面配置文件中有进行配置,第一个注册的Master就是Alive状态,后面去注册的Master发现节点被注册,那么后续Master会持续监听zookeeper中的临时节点。并将自己Master设置为standby状态。 worker也会和zookeeper进行通讯,从zookeeper中获取活跃的Master,也就是配置文件中指定的节点名称,从节点中获取当前Alive的master。worker就和活跃的Master组成集群。 当Alive的master宕机,zookeeper收不到心跳包,将临时节点删除(大概需要15s左右的时间),那么之前监听的状态为standby的master和zookeeper进行通讯,谁先抢到这个临时节点创建的权限谁就从standby状态转到Alive状态。 worker发现master宕机之后,就会询问zookeeper,zookeeper会将新的Master告知worker,然后新的Master就会进行接管工作,和worker组成集群继续工作,中间这段宕机时间成为中断期,包括节点删除时间在内,大约在30s

HA模式的搭建

前提:确保Zookeeper 和 HDFS 均已经启动 默认情况下,先启动的Master就为Active Master

先在spark-env.sh中, 删除: SPARK_MASTER_HOST=node1 原因: 配置文件中固定master是谁, 那么就无法用到zk的动态切换master功能了. 在spark-env.sh中, 增加:

SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark-ha" # -Dspark.deploy.recoveryMode=ZOOKEEPER 指定HA模式 基于Zookeeper实现 # -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 指定Zookeeper的连接地址 # 这儿zookeeper也搭建了集群,要是你搭一个zookeeper就写一个地址就行了,我搭的一个 # -Dspark.deploy.zookeeper.dir=/spark-ha 指定在Zookeeper中注册临时节点的路径

将spark-env.sh 分发到每一台服务器上

scp spark-env.sh node2:/export/server/spark/conf/ scp spark-env.sh node3:/export/server/spark/conf/

停止当前StandAlone集群

sbin/stop-all.sh

启动集群:

# 在node1上 启动一个master 和全部worker sbin/start-all.sh # 注意, 下面命令在node2上执行 sbin/start-master.sh # 在node2上启动一个备用的master进程

在这里插入图片描述 在这里插入图片描述

master主备切换测试 提交一个spark任务到当前alivemaster上:

bin/spark-submit --master spark://node1:7077 /export/server/spark/examples/src/main/python/pi.py 1000

在提交成功后, 将alivemaster直接kill掉

不会影响程序运行: 在这里插入图片描述 当新的master接收集群后, 程序继续运行, 正常得到结果.

最终效果: HA模式下, 主备切换 不会影响到正在运行的程序. 最大的影响是 会让它中断大约30秒左右.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3