Spark的體系結構與安裝部署
1.Spark的體系結構
官方的一張圖: 這裡的描述很籠統,只說除了互相的呼叫關係。
這是自己找的一張圖: 注意:sc物件是spark自己建立的,每次啟動spark的時候都會初始化。不需要繼續建立,是程式的入口。
2.Spark的安裝和部署
下載到本地,上傳到虛擬機器中(XShell和SecureCRT都可以),解壓
tar -zxvf spark-2.2.1-bin-hadoop2.7.tgz -C /usr/local/
2.2. Spark的安裝部署方式有以下幾種模式: Standalone YARN Mesos Amazon EC2 2.3 部署
cd /usr/local/spark-2.2.1-bin-hadoop2.7/conf
mv spark-env.sh.template spark-env.sh
mv slaves.template slaves
vi spark-env.sh
在檔案末尾新增:
export JAVA_HOME=/usr/local/jdk1.8.0_171
export SPARK_MASTER_HOST=hadoop-master
export SPARK_MASTER_PORT=7077
修改slaves檔案,新增Hadoop系統的子節點 將檔案傳送給各個子節點
scp -r spark-2.2.1 -bin-hadoop2.7 hadoop-salve02:/usr/local/
scp -r spark-2.2.1-bin-hadoop2.7 hadoop-salve03:/usr/local/
啟動Spark:在spark的安裝目錄下,sbin/start-sll.sh 注意:一定要加上sbin,不然的話系統會認為是啟動hadoop叢集的命令。 檢查是否啟動成功,可通過hadoop-master:8080訪問。
3.Spark HA 的實現
(*)基於檔案系統的單點恢復 主要用於開發或測試環境。當spark提供目錄儲存spark Application和worker的註冊資訊,並將他們的恢復狀態寫入該目錄中,這時,一旦Master發生故障,就可以通過重新啟動Master程序(sbin/start-master.sh),恢復已執行的spark Application和worker的註冊資訊。 基於檔案系統的單點恢復,主要是在spark-en.sh裡對SPARK_DAEMON_JAVA_OPTS設定 配置引數 參考值 spark.deploy.recoveryMode 設定為FILESYSTEM開啟單點恢復功能,預設值:NONE spark.deploy.recoveryDirectory Spark 儲存恢復狀態的目錄 參考: export SPARK_DAEMON_JAVA_OPTS=”-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/root/training/spark-2.2.1-bin-hadoop2.7/recovery”
測試:
1、在hadoop-master上啟動Spark叢集
2、在hadoop-master上啟動spark shell
MASTER=spark://hadoop-master:7077 spark-shell
3、在hadoop-master上停止master
stop-master.sh
4、在hadoop-master上重啟master
start-master.sh
(*)基於Zookeeper的Standby Masters 注意:前提是zookeeper能正常啟動且已經啟動!!! ZooKeeper提供了一個Leader Election機制,利用這個機制可以保證雖然叢集存在多個Master,但是隻有一個是Active的,其他的都是Standby。當Active的Master出現故障時,另外的一個Standby Master會被選舉出來。由於叢集的資訊,包括Worker, Driver和Application的資訊都已經持久化到ZooKeeper,因此在切換的過程中只會影響新Job的提交,對於正在進行的Job沒有任何的影響。 配置引數 參考值 spark.deploy.recoveryMode 設定為ZOOKEEPER開啟單點恢復功能,預設值:NONE spark.deploy.zookeeper.url ZooKeeper叢集的地址 spark.deploy.zookeeper.dir Spark資訊在ZK中的儲存目錄,預設:/spark 參考: export SPARK_DAEMON_JAVA_OPTS=”-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=bigdata12:2181,bigdata13:2181,bigdata14:2181 -Dspark.deploy.zookeeper.dir=/spark”
另外每個節點上需要將spark-env.sh檔案中的SPARK_MASTER_HOST和SPARK_MASTER_PORT刪除。
4.使用Spark Shell
spark-shell是Spark自帶的互動式Shell程式,方便使用者進行互動式程式設計,使用者可以在該命令列下用scala編寫spark程式。 (*)啟動Spark Shell:spark-shell 也可以使用以下引數: 引數說明: –master spark://hadoop-master:7077 指定Master的地址 –executor-memory 2g 指定每個worker可用記憶體為2G –total-executor-cores 2 指定整個叢集使用的cup核數為2個
例如: spark-shell –master spark://hadoop-maste:7077 –executor-memory 2g –total-executor-cores 2 (*)注意: 如果啟動spark shell時沒有指定master地址,但是也可以正常啟動spark shell和執行spark shell中的程式,其實是啟動了spark的local模式,該模式僅在本機啟動一個程序,沒有與叢集建立聯絡。