Spark Standalone是Master-Slaves架构的集群模式,和大部分的Master-Slaves结构集群类似,都存在着Master单点故障问题。目前Spark提供了两种方式来解决此问题,一种是基于文件系统的故障恢复模式,这种方法适合当Master进程挂点之后,直接重启即可;另一种方式基于ZooKeeper的HA方式,类似于HDFS的NameNode的HA方案,Active Master挂掉之后,Standby Master会立即切换过去继续对外提供服务。
在spark-env.sh 中用于指定Master的HA,依赖于Zookeeper集群
#JDK安装路径
export JAVA_HOME=/usr/lib/jvm/java7
#SCALA安装路径
export SCALA_HOME=/gome/software/spark/scala-2.11.8
#主节点的IP地址
#export SPARK_MASTER_IP=192.168.88.128
#分配的内存大小
export SPARK_WORKER_MEMORY=1024m
#指定hadoop的配置文件目录
export HADOOP_CONF_DIR=/home/hadoop-2.2/etc/hadoop
#指定worker工作时分配cpu数量
export SPARK_WORKER_CORES=1
#指定spark实例,一般1个足以
export SPARK_WORKER_INSTANCES=1
#jvm操作,在spark1.0之后增加了spark-defaults.conf默认配置文件,该配置参数在默认配置在该文件中
export SPARK_JAVA_OPTS
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=node1:2181,node2:2181,node3:2181 -Dspark.deploy.zookeeper.dir=/spark"
修改spark-default .sh
spark.master spark://node1:7077,node2:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs://node1:8020/tmp/logs/spark
spark.serializer org.apache.spark.serializer.KryoSerializer
#spark.driver.memory 5g
spark.executor.extraJavaOptions -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
如果使用文件系统故障恢复模式,“spark.deploy.recoveryMode”属性对应的值为"FILESYSTEM”,且需要配置“spark.deploy.recoveryDirectory”属性,作为存储Spark的Master节点的相关信息,以便故障恢复时使用,此种模式可以结合NFS等共享文件系统,可以在当前Master进程挂掉时,在另一个节点启动Master继续提供服务。
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/home/hadoop/apps/spark-1.3.0-bin-hadoop2.3/tmp"