城乡建设部网站甘红刚,中国建设银行网站登录不了,西昌网站开发公司,wordpress thems默认情况下#xff0c;standalone cluster manager对于worker节点的失败是具有容错性的#xff08;迄今为止#xff0c;Spark自身而言对于丢失部分计算工作是有容错性的#xff0c;它会将丢失的计算工作迁移到其他worker节点上执行#xff09;。然而#xff0c;调度器是依…默认情况下standalone cluster manager对于worker节点的失败是具有容错性的迄今为止Spark自身而言对于丢失部分计算工作是有容错性的它会将丢失的计算工作迁移到其他worker节点上执行。然而调度器是依托于master进程来做出调度决策的这就会造成单点故障如果master挂掉了就没法提交新的应用程序了。为了解决这个问题spark提供了两种高可用性方案分别是基于zookeeper的HA方案以及基于文件系统的HA方案。 基于zookeeper的HA方案
概述
使用zookeeper来提供leader选举以及一些状态存储你可以在集群中启动多个master进程让它们连接到zookeeper实例。其中一个master进程会被选举为leader其他的master会被指定为standby模式。如果当前的leader master进程挂掉了其他的standby master会被选举从而恢复旧master的状态。并且恢复作业调度。整个恢复过程从leader master挂掉开始计算大概会花费1~2分钟。要注意的是这只会推迟调度新的应用程序master挂掉之前就运行的应用程序是不被影响的。
配置
如果要启用这个恢复模式需要在spark-env.sh文件中设置SPARK_DAEMON_JAVA_OPTS选项 spark.deploy.recoveryMode 设置为ZOOKEEPER来启用standby master恢复模式默认为NONEspark.deploy.zookeeper.url zookeeper集群url举例来说192.168.0.103:2181,192.168.0.104:2181spark.deploy.zookeeper.dir zookeeper中用来存储恢复状态的目录默认是/spark 备注如果在集群中启动了多个master节点但是没有正确配置master去使用zookeepermaster在挂掉进行恢复时是会失败的 因为没法发现其他master并且都会认为自己是leader。这会导致集群的状态不是健康的因为所有master都会自顾自地去调度。
细节
在启动一个zookeeper集群之后启用高可用性是很直接的。简单地在多个节点上启动多个master进程并且给它们相同的zookeeper 配置zookeeper url和目录。master就可以被动态加入master集群并可以在任何时间被移除掉。
为了调度新的应用程序或者向集群中添加worker节点它们需要知道当前leader master的ip地址。这可以通过传递一个master列表来完成。举例来说我们可以将我们的SparkContext连接的地址指向spark://host1:port1,host2:port2。这就会导致你的 SparkContext尝试去注册所有的master如果host1挂掉了那么配置还是正确的因为会找到新的leader master也就是host2。
对于注册一个master和普通的操作这是一个重要的区别。当一个应用程序启动的时候或者worker需要被找到并且注册到当前的leader master的时候。一旦它成功注册了就被保存在zookeeper中了。如果故障发生了new leader master会去联系所有的之前注册过的应用程序和worker并且通知它们master的改变。这样的话它们甚至在启动的时候都不需要知道new master的存在。
正是由于这个属性new master可以在任何时间被创建并且我们唯一需要担心的一件事情就是新的应用程序和worker可以找到并且注册到master。一旦注册上去之后我们就不用担心它了。
实验
1、将192.168.2.15机器上的spark集群先停止 ./sbin/stop-all.sh 2、修改机器上的spark-env.sh文件在其中加入上述三个属性 export SPARK_DAEMON_JAVA_OPTS”-Dspark.deploy.recoveryModeZOOKEEPER -Dspark.deploy.zookeeper.url192.168.2.15:2181,192.168.2.16:2181 -Dspark.deploy.zookeeper.dir/spark” 3、启动集群 在192.168.2.15上直接用启动集群./sbin/start-all.sh
4、在192.168.2.16上部署spark安装包并启动一个master进程
安装scala 2.11.4
1、将课程提供的scala-2.11.4.tgz使用WinSCP拷贝到/usr/local/src目录下。 2、对scala-2.11.4.tgz进行解压缩tar -zxvf scala-2.11.4.tgz 3、对scala目录进行重命名mv scala-2.11.4 scala 4、配置scala相关的环境变量 vi ~/.bashrc export SCALA_HOME/usr/local/scala export PATH$SCALA_HOME/bin source ~/.bashrc 5、查看scala是否安装成功scala -version
安装spark客户端
1、将spark-1.5.1-bin-hadoop2.4.tgz使用WinSCP上传到/usr/local/src目录下。 2、解压缩spark包tar -zxvf spark-1.5.1-bin-hadoop2.4.tgz。 3、重命名spark目录mv spark-1.5.1-bin-hadoop2.4 spark 4、修改spark环境变量 vi ~/.bashrc export SPARK_HOME/usr/local/spark export PATHSPARKHOME/binexportCLASSPATH.:SPARKHOME/binexportCLASSPATH.:SPARK_HOME/bin
export CLASSPATH=.:CLASSPATH:JAVAHOME/lib:JAVAHOME/lib:JAVA_HOME/lib:JAVA_HOME/jre/lib source ~/.bashrc
修改spark-env.sh文件
1、cd /usr/local/spark/conf 2、cp spark-env.sh.template spark-env.sh 3、vi spark-env.sh export JAVA_HOME/usr/java/latest export SCALA_HOME/usr/local/scala export HADOOP_HOME/usr/local/hadoop export HADOOP_CONF_DIR/usr/local/hadoop/etc/hadoop export SPARK_MASTER_IP192.168.2.16 export SPARK_DAEMON_MEMORY100m export SPARK_DAEMON_JAVA_OPTS”-Dspark.deploy.recoveryModeZOOKEEPER -Dspark.deploy.zookeeper.url192.168.2.15:2181,192.168.2.16:2181 -Dspark.deploy.zookeeper.dir/spark”
在192.168.2.16上单独启动一个standby master进程./sbin/start-master.sh
4、提交应用程序 将master地址修改为192.168.2.15:7077,192.168.2.16:7078
5、杀掉原先的leader master等到standby master接管集群 再次提交应用程序
6、再次手动启动原来的leader master死掉
问题
1、集群中包含两个节点在192.168.2.15上配置了master和worker 在192.168.2.16上配置了worker 但是在15集群上 ./sbin/start-all.sh 在16 集群上不启动 worker 原因在 在conf中的slaves.template 没有重命名重命名为slaves 即可 slaves中: A Spark Worker will be started on each of the machines listed below. Spark1 Spark2 2、在15 上直接启动 ./sbin/start-all.sh 在16 上 ./sbin/start-master.sh 3、此时在文本上查看 192.168.2.158088 192.168.2.16:8088 查看一个为standby 一个为alive 将aliver 的jps kill-9 杀死掉 大概一分钟之后 standby将变为aliver状态此时基于zookeeper的主备机切换完成
~