本文中的Spark集群包含三個節點,分別是Master,Worker1,Worker2。
1、在Master機器上安裝Zookeeper,本文安裝在/usr/etc目錄下
2、在Master機器配置Zookeeper
2.1、cp /usr/etc/zookeeper-3.4.10/conf/zoo_sample.cfg /usr/etc/zookeeper-3.4.10/conf/zoo.cfg
2.2、在安裝目錄下創建data,logs目錄:mkdir data;mkdir logs;
2.3、vi /usr/etc/zookeeper-3.4.10/conf/zoo.cfg,增加內容如下:
dataDir=/usr/etc/zookeeper-3.4.10/data dataLogDir=/usr/etc/zookeeper-3.4.10/logs server.0=Master:2888:3888 server.1=Worker1:2888:3888 server.2=Worker2:2888:3888
2.4、在創建的data目錄下創建myid文件,並修改內容為0(對應配置中的server.0)
3、拷貝安裝文件到Worker1,Worker2機器
scp -r /usr/etc/zookeeper-3.4.10 root@Worker1:/usr/etc/zookeeper-3.4.10 scp -r /usr/etc/zookeeper-3.4.10 root@Worker2:/usr/etc/zookeeper-3.4.10
3.1、修改data目錄下的myid文件,Worker1上的內容為1,Worker2上的內容為2。
4、在Master、Worker1、Worker2上配置系統環境變量:
vi /etc/profile 增加Zookeeper內容: exprot ZOOKEEPER_HOME=/usr/etc/zookeeper-3.4.10 PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SPARK_HOME/bin:$SPARK_HOME/sbin:$HIVE_HOME/bin:$SCALA_HOME/bin:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
5、在Master、Worker1、Worker2上運行Zookeeper
./bin/zkServer.sh start
運行./bin/zkServer.sh status查看運行狀態,如有問題可通過安裝目錄下的zookeeper.out日志文件排查。
成功后,運行jps,可看到QuorumPeerMain進程
6、配置Spark
vi /usr/etc/spark-2.3.0-bin-hadoop2.7/conf/spark-evn.sh
修改內容如下:
#export SPARK_MASTER_IP=Master #注釋掉該行,Spark自己管理集群的狀態
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Worker1:2181,Worker2:2181 -Dspark.deploy.zookeeper.dir=/spark" #通過Zookeeper管理集群狀態
7、測試Spark集群工作狀態
7.1、啟動集群
在Master啟動hdfs:start-dfs.sh
在Master啟動spark:/usr/etc/spark-2.3.0-bin-hadoop2.7/sbin/start-all.sh
在Worker1,Worker2分別啟動spark-master:/usr/etc/spark-2.3.0-bin-hadoop2.7/sbin/start-master.sh
在Master通過瀏覽器訪問Master:8080,Worker1:8080,Worker2:8080,Spark Master的運行狀態在Master上是 ALIVE,在Worker1,Worker2上是STANDBY
7.2、測試Master節點出故障的情況
7.2.1、在任意節點上運行spark-shell:/usr/etc/spark-2.3.0-bin-hadoop2.7/bin/spark-shell --master spark://Master:7077,Worker1:7077,Worker2:7077
7.2.2、在Master上運行/usr/etc/spark-2.3.0-bin-hadoop2.7/sbin/stop-master.sh停止Master服務,發現spark-shell控制台輸出以下內容:Connection to Master:7077 failed; waiting for master to reconnect...,過一會通過瀏覽器訪問Worker1:8080,發現此時Worker1機器上Spark Master的狀態已經變成了ALIVE。