|NO.Z.00009|——————————|^^ 配置 ^^|——|Hadoop&Spark.V09|——|Spark.v09|sparkcore|Spark-Standalone集群模式&高可用配置&zookeeper|

一、高可用配置
### --- spark standalone集群配置说明

~~~     Spark Standalone集群是 Master-Slaves架构的集群模式,
~~~     和大部分的Master-Slaves结构集群一样,存着Master单点故障的问题。
### --- 如何解决这个问题,Spark提供了两种方案:

~~~     # 基于zookeeper的standby master:
~~~     基于zookeeper的Standby Master,适用于生产模式。
~~~     将 Spark 集群连接到Zookeeper,利用 Zookeeper 提供的选举和状态保存的功能,
~~~     一个 Master 处于Active 状态,其他 Master 处于Standby状态;
~~~     保证在ZK中的元数据主要是集群的信息,
~~~     包括:Worker,Driver和Application以及Executors的信息;
~~~     如果Active的Master挂掉了,
~~~     通过选举产生新的 Active 的 Master,然后执行状态恢复,整个恢复过程可能需要1~2分钟;
~~~     # 基于文件系统的单点故障

~~~     基于文件系统的单点恢复(Single-Node Rcovery with Local File System),
~~~     主要用于开发或者测试环境。
~~~     将 Spark Application 和 Worker 的注册信息保存在文件中,
~~~     一旦Master发生故障,就可以重新启动Master进程,将系统恢复到之前的状态
二、准备环境:zookeeper集群
### --- Zookeeper环境搭建:下载并解版本包:修改配置文件

[root@hadoop02 ~]# ls /opt/yanqi/software/zookeeper-3.4.14.tar.gz 
/opt/yanqi/software/zookeeper-3.4.14.tar.gz
 
[root@hadoop02 ~]# cd /opt/yanqi/software/
[root@hadoop02 software]# tar -zxvf zookeeper-3.4.14.tar.gz -C ../servers/
~~~     # 配置zk环境变量

[root@hadoop02 ~]# vim /etc/profile
##ZK_HOME
export ZK_HOME=/opt/yanqi/servers/zookeeper-3.4.14
export PATH=$PATH:$ZK_HOME/bin:$ZK_HOME/sbin
 
[root@hadoop02 ~]# source /etc/profile
~~~     # 准备data与log目录
~~~     # 创建zk存储数据目录
[root@hadoop02 ~]# mkdir -p /opt/yanqi/servers/zookeeper-3.4.14/data
 
~~~     # 创建zk日志文件目录
[root@hadoop02 ~]# mkdir -p /opt/yanqi/servers/zookeeper-3.4.14/data/logs
~~~     # 修改zookeeper配置文件
~~~     # 修改zk配置文件
[root@hadoop02 ~]# cd /opt/yanqi/servers/zookeeper-3.4.14/conf

~~~     # 修改文件名称
[root@hadoop02 conf]# mv zoo_sample.cfg zoo.cfg 
~~~     # 修改配置文件参数
[root@hadoop02 ~]# vim /opt/yanqi/servers/zookeeper-3.4.14/conf/zoo.cfg
 
dataDir=/opt/yanqi/servers/zookeeper-3.4.14/data           # 第12行,更新datadir
dataLogDir=/opt/yanqi/servers/zookeeper-3.4.14/data/logs   # 第13行,添加logdir

autopurge.purgeInterval=1                                  # 打开注释:ZK提供了自动清理事务日志和快照文件的功能,这个参数指定了清理频率,单位是小时
server.1=hadoop01:2888:3888                                #  增加集群配置:server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
### --- 添加myid配置并分发到其它节点

~~~     # 在zookeeper的 data 目录下创建一个 myid 文件,内容为1,这个文件就是记录每个服务器的ID
[root@hadoop02 ~]# echo 2 >/opt/yanqi/servers/zookeeper-3.4.14/data/myid
~~~     # 安装包分发并修改myid的值
~~~     # 发送到其它主机上
[root@hadoop02 ~]# rsync-script /opt/yanqi/servers/zookeeper-3.4.14
 
~~~     # 修改对应主机的myid
[root@hadoop01 ~]# echo 1 >/opt/yanqi/servers/zookeeper-3.4.14/data/myid
[root@hadoop03 ~]# echo 3 >/opt/yanqi/servers/zookeeper-3.4.14/data/myid
### --- 依次启动三个zk实例启动命令(三个节点都要执行)

[root@hadoop01 ~]# /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh start
[root@hadoop02 ~]# /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh start
[root@hadoop03 ~]# /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh start
~~~     # 查看zookeeper的启动状态

[root@hadoop01 ~]# /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh status
Mode: follower
[root@hadoop02 ~]# /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh status
Mode: follower
[root@hadoop03 ~]# /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh status
Mode: leader
### --- 创建zookeeper的启动脚本:

~~~     # 创建zookeeper集群启动脚本
[root@hadoop02 ~]# vim /opt/yanqi/servers/zookeeper-3.4.14/bin/zk-all.sh
#!/bin/sh

echo "start zookeeper server..."

if(($#==0));then

echo "no params";
exit;
fi

hosts="hadoop01 hadoop02 hadoop03"

for host in $hosts
do
ssh $host "source /etc/profile; /opt/yanqi/servers/zookeeper-3.4.14/bin/zkServer.sh $1"
done
~~~     # 使用脚本启动停止脚本zookeeper集群

[root@hadoop02 ~]# chmod +x /opt/yanqi/servers/zookeeper-3.4.14/bin/zk-all.sh
 
[root@hadoop02 ~]# ./zk-all.sh stop
[root@hadoop02 ~]# ./zk-all.sh start
 
[root@hadoop02 ~]# ./zk-all.sh status
Using config: /opt/yanqi/servers/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
Using config: /opt/yanqi/servers/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader
Using config: /opt/yanqi/servers/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower
三、spark standalone集群配置
### --- 修改 spark-env.sh 文件,并分发到集群中
[root@hadoop02 ~]# vim $SPARK_HOME/conf/spark-env.sh
# export SPARK_MASTER_HOST=hadoop02       # 注释掉这2行内容
# export SPARK_MASTER_PORT=7077           # 注释掉这2行内容

~~~     # 最后一行添加如下内容
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop01,hadoop02,hadoop03 -Dspark.deploy.zookeeper.dir=/spark"
~~~     # 发送到其它节点
~~~     spark.deploy.recoveryMode:可选值 Zookeeper、FileSystem、None
~~~     deploy.zookeeper.url:Zookeeper的URL,主机名:端口号(缺省2181)
~~~     deploy.zookeeper.dir:保存集群元数据信息的地址,在ZooKeeper中保存该信息

[root@hadoop02 ~]# rsync-script $SPARK_HOME/conf/spark-env.sh
 ### --- 启动 Spark 集群hadoop02

[root@hadoop02 ~]# stop-all-spark.sh

[root@hadoop02 ~]# start-all-spark.sh
~~~     # 查看服务进程

[root@hadoop00 ~]# jps
Hadoop01            Worker
Hadoop02    Master  Worker              # 此时master节点在Hadoop02上
Hadoop03            Worker
### --- 浏览器输入:http://hadoop02:8080/

~~~     刚开始 Master 的状态是STANDBY,稍等一会变为:RECOVERING,最终是:ALIVE
### --- 在Hadoop01上启动master服务
~~~     进入浏览器输入:http://hadoop01:8080/,此时 Master 的状态为:STANDBY

[root@hadoop01 ~]# start-master.sh
~~~     # 查看服务进程

[root@hadoop00 ~]# jps
Hadoop01    Master  Worker             # 备用master节点在Hadoop01上
Hadoop02    Master  Worker             # 此时master节点在Hadoop02上
Hadoop03            Worker
~~~     # 杀到Hadoop02上 Master 进程,再观察Hadoop01上 Master 状态,
~~~     由 STANDBY=> RECOVERING => ALIVE
~~~     进入浏览器输入:http://hadoop01:8080/,此时 Master 的状态为:STANDBY

[root@hadoop02 ~]# jps
15622 Master
15726 Worker
[root@hadoop02 ~]# kill -9 15622
### --- 停止集群状态

~~~     # 停止spark集群
[root@hadoop02 ~]# stop-all-spark.sh
~~~     # 停止zk服务
[root@hadoop02 ~]# ./zk-all.sh stop
四、小结:
### --- 小结:

~~~     配置每个worker的core、memory
~~~     运行模式:cluster、client;client缺省模式,有返回结果,适合调试;cluster与此相反
~~~     History server
~~~     高可用(ZK、Local Flile;在ZK中记录集群的状态)
[root@hadoop02 ~]# zkCli.sh
 
[zk: localhost:2181(CONNECTED) 1] ls /          # 记录的位置
[zookeeper, spark]

[zk: localhost:2181(CONNECTED) 2] ls /spark     # 选举的信息
[leader_election, master_status]

附录一:定版配置文件
### --- $HADOOP_HOME/etc/hadoop/yarn-site.xml

[root@hadoop02 ~]# vim $HADOOP_HOME/etc/hadoop/yarn-site.xml

<!-- spark-core集群配置参数
<property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
</property>
<property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
</property>
-->
### --- /opt/yanqi/servers/spark-2.4.5/conf/spark-env.sh

[root@hadoop02 ~]# vim /opt/yanqi/servers/spark-2.4.5/conf/spark-env.sh
 
export JAVA_HOME=/opt/yanqi/servers/jdk1.8.0_231
export HADOOP_HOME=/opt/yanqi/servers/hadoop-2.9.2
export HADOOP_CONF_DIR=/opt/yanqi/servers/hadoop-2.9.2/etc/hadoop
export SPARK_DIST_CLASSPATH=$(/opt/yanqi/servers/hadoop-2.9.2/bin/hadoop classpath)
#export SPARK_MASTER_HOST=hadoop02
#export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=1
export SPARK_WORKER_MEMORY=1g

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=50 -Dspark.history.fs.logDirectory=hdfs://Hadoop01:9000/spark-eventlog"
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop01,hadoop02,hadoop03 -Dspark.deploy.zookeeper.dir=/spark"
### --- /opt/yanqi/servers/spark-2.4.5/conf/spark-defaults.conf

[root@hadoop02 ~]# vim /opt/yanqi/servers/spark-2.4.5/conf/spark-defaults.conf
 
Example:
spark.master                            spark://hadoop02:7077
spark.eventLog.enabled                  true
spark.eventLog.dir                      hdfs://hadoop01:9000/spark-eventlog
spark.eventLog.compress                 true
spark.serializer                        org.apache.spark.serializer.KryoSerializer
spark.driver.memory                     512m

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(32)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示