关于HA高可用部署方式,Spark提供了两种方案:
- 基于文件系统的单点恢复(Single-Node Recovery with Local File system)
主要用于开发或测试环境。为spark提供目录保存spark Application和worker的注册信息,并将他们的恢复状态写入该目录中,这时,一旦Master发生故障,就可以通过重新启动Master进 程(sbin/start-master.sh),恢复已运行的spark Application和worker的注册信息。
- 基于zookeeper的Standby Masters(Standby Masters with ZooKeeper)
用于生产模式。其基本原理是通过zookeeper来选举一个Master,其他的Master处于Standby状态。
将Standalone集群连接到同一个ZooKeeper实例并启动多个Master,利用zookeeper提供的选举和状态保存功能,可以使一个Master被选举,而其他Master处于Standby状态。如果现任Master死去,另一个Master会通过选举产生,并恢复到旧的 Master状态,然后恢复调度。整个恢复过程可能要1-2分钟。
以上高可用部署配置设计以下参数:
spark.deploy.recoveryMode
用于设置使用哪种恢复模式(FILESYSTEM|ZOOKEEPER).
使用FILESYSTEM时(文件系统单点恢复),需搭配以下参数:
spark.deploy.recoveryDirectory Spark保存恢复状态的目录
使用ZOOKEEPER时,需搭配以下参数:
spark.deploy.zookeeper.url The ZooKeeper cluster url (e.g., 192.168.1.100:2181,192.168.1.101:2181).
spark.deploy.zookeeper.dir
The directory in ZooKeeper to store recovery state (default: /spark).
修改配置最简单方式为在$SPARK_HOME/conf/spark-env.sh文件中增加
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/data/spark/recovery"
或
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=n1:2181,n2:2181,n3:2181 -Dspark.deploy.zookeeper.dir=/temp/spark"
使用zookeeper方式时的注意事项:
- 使用zookeeper方式时,切换期间新任务提交可能报错,但是已运行任务无影响。
- 任务提交指定master地址时,需使用类似如下格式:spark://n1:7077,n2:7077,n3:7077
参考资料:
http://www.cnblogs.com/hseagle/p/3673147.html
https://spark.apache.org/docs/0.9.0/spark-standalone.html#standby-masters-with-zookeeper