Spark學習筆記(三)—— Standalone模式


上篇筆記記錄了Local模式的一些內容,但是實際的應用中很少有使用Local模式的,只是為了我們方便學習和測試。真實的生產環境中,Standalone模式更加合適一點。

1、基礎概述

Standalone不是單機模式,它是集群,但是是基於Spark獨立調度器的集群,也就是說它是Spark特有的運行模式。有Client和Cluster兩種模式,主要區別在於:Driver程序的運行節點。怎么理解呢?哪里提交任務哪里啟動Driver,這個叫做Client模式;隨便找台機器啟動Driver,這個叫做Cluster模式。

說白了就是只有Spark自己負責調度自己的集群,不用什么Yarn、Mesos。那么這樣就沒有Yarn的ResourceManager 、 NodeManager和Container了,它倆對應到Spark的概念是Master、Worker和Executor。

畫了張圖,解釋Standalone運行模式:

2、安裝使用

1)修改slave文件,添加work節點:

[simon@hadoop102 conf]$ vim slaves

hadoop102
hadoop103
hadoop104

2)修改spark-env.sh文件,添加如下配置:

[simon@hadoop102 conf]$ vim spark-env.sh

SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077

3)分發spark包

[simon@hadoop102 module]$ xsync spark/

4)啟動集群

[simon@hadoop102 spark]$ sbin/start-all.sh

#查看啟動信息
hadoop103:   JAVA_HOME is not set
hadoop103: full log in /opt/module/spark/logs/spark-simon-org.apache.spark.deploy.worker.Worker-1-hadoop103.out

報了異常信息:JAVA_HOME is not set,可以在sbin目錄下的spark-config.sh 文件中加入如下配置:

export JAVA_HOME=/opt/module/jdk1.8.0_144

然后重新啟動集群:

[simon@hadoop102 spark]$ sbin/start-all.sh

#查看啟動信息
[simon@hadoop102 spark]$ jpsall
--------------------- hadoop102 -------------------------------
4755 NameNode
4900 DataNode
5704 NodeManager
6333 Master
6623 Worker
--------------------- hadoop103 -------------------------------
8342 DataNode
9079 NodeManager
10008 Worker
8893 ResourceManager
--------------------- hadoop104 -------------------------------
8882 NodeManager
8423 SecondaryNameNode
9560 Worker
8347 DataNode

可以看到Spark集群已經啟動成功了,Hadoop102是Master節點,兩外兩個是Worker節點

5)執行一一個官方案例:

[simon@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100

和local模式的區別就在於指定了master節點

執行結果:

3、JobHistoryServer配置

如果我們想看任務執行的日志信息,我們還需要配置歷史服務器

1)修改spark-default.conf文件,開啟Log:

[simon@hadoop102 conf]$ vi spark-defaults.conf
spark.eventLog.enabled           true
#directory要事先創建好
spark.eventLog.dir               hdfs://hadoop102:9000/directory  

2)在HDFS上創建文件夾

[simon@hadoop102 hadoop]$ hadoop fs –mkdir /directory

3)修改spark-env.sh文件,添加如下配置:

[simon@hadoop102 conf]$ vi spark-env.sh

export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 
-Dspark.history.retainedApplications=30 
-Dspark.history.fs.logDirectory=hdfs://hadoop102:9000/directory"

#參數描述:
spark.eventLog.dir:Application在運行過程中所有的信息均記錄在該屬性指定的路徑下; 
spark.history.ui.port=18080  WEBUI訪問的端口號為18080
spark.history.fs.logDirectory=hdfs://hadoop102:9000/directory  配置了該屬性后,在start-history-server.sh時就無需再顯式的指定路徑,Spark History Server頁面只展示該指定路徑下的信息
spark.history.retainedApplications=30指定保存Application歷史記錄的個數,如果超過這個值,舊的應用程序信息將被刪除,這個是內存中的應用數,而不是頁面上顯示的應用數。

4)分發配置文件

[simon@hadoop102 conf]$ xsync spark-defaults.conf
[simon@hadoop102 conf]$ xsync spark-env.sh

5)啟動歷史服務器

[simon@hadoop102 spark]$ sbin/start-history-server.sh

6)再次執行任務

[simon@hadoop102 spark]$ bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop102:7077 \
--executor-memory 1G \
--total-executor-cores 2 \
./examples/jars/spark-examples_2.11-2.1.1.jar \
100

7)查看歷史任務日志

hadoop102:18080

4、HA配置

Spark集群部署完了,但是有一個很大的問題,那就是 Master 節點存在單點故障,要解決此問題,就要借助 zookeeper,並且啟動至少兩個 Master 節點來實現高可靠,配置方式也比較簡單。

HA模式的整體架構圖:

可以看到依賴了Zookeeper,其實和HDFS的HA運行模式差不多,那么開始着手配置。

1)zookeeper正常安裝並啟動

[simon@hadoop102 spark]$ zk-start.sh
[simon@hadoop102 spark]$ jpsall
--------------------- hadoop102 -------------------------------
8498 HistoryServer
4755 NameNode
4900 DataNode
5704 NodeManager
6333 Master
9231 QuorumPeerMain
6623 Worker
--------------------- hadoop103 -------------------------------
8342 DataNode
9079 NodeManager
10008 Worker
10940 QuorumPeerMain
8893 ResourceManager
--------------------- hadoop104 -------------------------------
11073 QuorumPeerMain
8882 NodeManager
8423 SecondaryNameNode
9560 Worker
8347 DataNode

QuorumPeerMain就是zookeeper的進程,可以看到已經正常啟動了。

2)修改spark-env.sh文件添加如下配置:

[simon@hadoop102 conf]$ vi spark-env.sh

注釋掉如下內容:
#SPARK_MASTER_HOST=hadoop102
#SPARK_MASTER_PORT=7077
添加上如下內容:
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER 
-Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104 
-Dspark.deploy.zookeeper.dir=/spark"

3)分發配置文件

[simon@hadoop102 conf]$ xsync spark-env.sh

4)在hadoop102上啟動全部節點

[simon@hadoop102 spark]$ sbin/start-all.sh

5)在hadoop103上單獨啟動master節點

[simon@hadoop103 spark]$ sbin/start-master.sh

6)spark HA集群訪問

/opt/module/spark/bin/spark-shell \
--master spark://hadoop102:7077,hadoop103:7077 \
--executor-memory 2g \
--total-executor-cores 2

在學習測試過程中並不常用,配起來測試一下就行了。Hadoop102、Hadoop103都是master,關閉Active的master,看到Master自動切換即可。


參考資料:

[1] 李海波. 大數據技術之Spark


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM