![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2dpZi96eG9MYWVDSTI4VDZlNzNXNlJnRFUxU0ZPeTlsT0NtblFXdVVLMkV6VXFKekMxTTQ3OE9NeWpac3JTanlCNGdxNGJ3RFJnaHZpYjNZaWF3amtWSEVXTmRRLzY0MA?x-oss-process=image/format,png)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy96eG9MYWVDSTI4UXNxeE9jbFFITnNpYXRpY3BNTjVldDdJeE91bHNDUGU0WTkydGFsU2EwN3F1WTc1dkc4NUlPUEVpYnlFY3I5cjNhcEJHMmtka3h3cVNGZy82NDA?x-oss-process=image/format,png)
来源 | Alice菌
编译 | CryptoShadow,责编 | Carol
出品 | CSDN云计算(ID:CSDNcloud)
本文为大家带来的是Spark的HA高可用环境搭建的教程。
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy96eG9MYWVDSTI4VDZlNzNXNlJnRFUxU0ZPeTlsT0NtbllzTGRUQzNTck1wVG01V3ZUVVpFamlhTlZlZkthVDg1dWJ6NXJWcmVHd29BU2NHSDVKNk9CamcvNjQw?x-oss-process=image/format,png)
原理
Spark Standalone集群是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群一样,存在着Master单点故障的问题。
如何解决这个单点故障的问题,Spark提供了两种方案:
基于文件系统的单点恢复(Single-Node Recovery with Local File System)–只能用于开发或测试环境。
基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)–可以用于生产环境。
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy96eG9MYWVDSTI4UXNxeE9jbFFITnNpYXRpY3BNTjVldDdJMnRHYWZPRGpzWUVkaWNNS0VpY3BCblBta0xsMTlVR09KS2tibVFUN3V1bVIxdTdvTGlhTVo5ZVF3LzY0MA?x-oss-process=image/format,png)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy96eG9MYWVDSTI4VDZlNzNXNlJnRFUxU0ZPeTlsT0NtblpHUU02VUhKbEV2MmhaNzJoZ3VrcVo5dFdEd0JuY0hNYVFSZmdENXhMVWJHa01jSDdtR3FxQS82NDA?x-oss-process=image/format,png)
配置HA
该HA方案使用起来很简单,首先启动一个ZooKeeper集群,然后在不同节点上启动Master,注意这些节点需要具有相同的zookeeper配置。
/export/servers/spark/sbin/stop-all.sh
vim /export/servers/spark/conf/spark-env.sh
#export SPARK_MASTER_HOST=node01
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=node01:2181,node02:2181,node03:2181
-Dspark.deploy.zookeeper.dir=/spark"
参数说明:
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy96eG9MYWVDSTI4UXNxeE9jbFFITnNpYXRpY3BNTjVldDdJOWJQbHBxSXlPWDBnaG9XbUM1MUo5ZGtibzRuSnc3NFpRVzdMWVZ5NTVhR2xBUE5QbGljRGttUS82NDA?x-oss-process=image/format,png)
scp /export/servers/spark/conf/spark-env.sh
node02:/export/servers/spark/conf/
scp /export/servers/spark/conf/spark-env.sh
node03:/export/servers/spark/conf/
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy96eG9MYWVDSTI4VDZlNzNXNlJnRFUxU0ZPeTlsT0NtbjFSa090VzRncGliVHdLUEZyWXJ1R3RBRGtBMEo3MHZpYTkzNVBOeU5KQkowVkFlQWtCa01pYTFBZy82NDA?x-oss-process=image/format,png)
启动zk集群
zkServer.sh status
zkServer.sh stop
zkServer.sh start
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy96eG9MYWVDSTI4VDZlNzNXNlJnRFUxU0ZPeTlsT0NtbjFSa090VzRncGliVHdLUEZyWXJ1R3RBRGtBMEo3MHZpYTkzNVBOeU5KQkowVkFlQWtCa01pYTFBZy82NDA?x-oss-process=image/format,png)
启动Spark集群
/export/servers/spark/sbin/start-all.sh
/export/servers/spark/sbin/start-master.sh
在普通模式下启动spark集群
只需要在主节点上执行start-all.sh 就可以了
在高可用模式下启动spark集群
先需要在任意一台主节点上执行start-all.sh
然后在另外一台主节点上单独执行start-master.sh
http://node01:8080/
http://node02:8080/
可以观察到有一台状态为StandBy
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy96eG9MYWVDSTI4UXNxeE9jbFFITnNpYXRpY3BNTjVldDdJdTBIMGxNRk5UaWFjbmtQaG1CSE5ISDNFUWU2Y3lpY1FOOElaSGtraWNzaktVQ01QZmdpY2hJZTROZy82NDA?x-oss-process=image/format,png)
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy96eG9MYWVDSTI4VDZlNzNXNlJnRFUxU0ZPeTlsT0NtblY1dnY2Z1o4SnpURUJIaWJiU1pSaHdoYW5ReGlicndWcnBoeEZ5UWxodFZpY3Z5WHJpY1JUQndaQWcvNjQw?x-oss-process=image/format,png)
测试HA
测试主备切换
在node01上使用jps查看master进程id
使用kill -9 id号强制结束该进程
稍等片刻后刷新node02的web界面发现node02为Alive
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy96eG9MYWVDSTI4UXNxeE9jbFFITnNpYXRpY3BNTjVldDdJaWNuQVpSbExKQmdWT0I5T1JPaWF0NWNnN3B2SE44M05Wb3lNeGIzR0dsallDa0k0bXZSY0dFZ3cvNjQw?x-oss-process=image/format,png)
1、集群模式启动spark-shell
/export/servers/spark/bin/spark-shell --master spark://node01:7077,node02:7077
2、运行程序
sc.textFile("hdfs://node01:8020/wordcount/input/words.txt")
.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
.saveAsTextFile("hdfs://node01:8020/wordcount/output7")
在hue中查看结果
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy96eG9MYWVDSTI4UXNxeE9jbFFITnNpYXRpY3BNTjVldDdJc3lBbUcxaE1pY3pLRmhEZVJnUk9uSFFJOW93bEF6YWtZTGN2Z2FHRG0wa3gydGtmaWI2SFE3RmcvNjQw?x-oss-process=image/format,png)
本次分享就是这样啦,欢迎评论区与我们讨论!
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy8xaFJlSGFxYWZhZkpZb0ZIN09BaG1VZFRqbzM1dnZKVHkxbFJWakcyQ3pGUDNhcmZWUkRxSTdhOFBTUzZTeDVMaWFsYUZURTFIRnUyTjRPSWhMOGpQOWcvNjQw?x-oss-process=image/format,png)
CSDNx巨杉大学联合认证学习,免费开放!“分布式数据库集训营”帮助您从零开始学习分布式数据库、分布式架构知识,现在加入活动,完成课程还将专属礼品。快来参加吧~
了解详情:http://www.sequoiadb.com/cn/university-camp
![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy96eG9MYWVDSTI4UWt0Nkl5aWNUczlSNERrWExuQXZOWVFZTFg0N2swdktyTVp0d2ljVEY5b3ZDUWljQWc5RmxUODNRZTFraWMzdXloalVVYmVickFMS2ljU3BBLzY0MA?x-oss-process=image/format,png)
推荐阅读:稳定、可扩展、模块化、简化部署过程、版本控制……一文看懂 Kubernetes 到底如何运用!
Java老矣,尚能饭否?2020 Java生态系统报告出炉
面对 MySQL 查询索引失效,程序员的六大优化技巧!
隐身术?登顶 GitHub Top1:200 行 JS 代码让画面人物瞬间消失!
Facebook最新研究:无需额外训练AI,即可加速NLP任务
耐克为何不接受加密货币付款?
真香,朕在看了!点击“阅读原文”,即可报名