1. 程式人生 > 實用技巧 >Spark3.0 Standalone模式部署

Spark3.0 Standalone模式部署

之前介紹過Spark 1.6版本的部署,現在最新版本的spark為3.0.1並且已經完全相容hadoop 3.x,同樣仍然支援RDD與DataFrame兩套API,這篇文章就主要介紹一下基於Hadoop 3.x的Spark 3.0部署,首先還是官網下載安裝包,下載地址為:http://spark.apache.org/downloads.html,目前spark穩定版本有3.0.1與2.4.7兩個版本,這裡我們選擇3.0.1的版本,然後是hadoop版本目前支援2.7和3.2,這裡我們選擇3.2的版本,如下:

然後繼續點選具體的包,選擇合適的映象下載,下載後的包名為:spark-3.0.1-bin-hadoop3.2.tgz,然後上傳至伺服器準備部署,叢集環境同樣符合之前的條件:例如主機名、免密、防火牆規則等,這裡不再詳細敘述,先說一下我們當前的環境,我們有4個節點如下:

192.168.122.5 bigdata1
192.168.122.6 bigdata2
192.168.122.7 bigdata3
192.168.122.8 bigdata4

其中每個節點都搭建了hadoop hdfs的環境,方便spark使用,hadoop版本為3.2,正常搭建的時候儘量也是hdfs的datanode節點和spark worker的節點一一對應,這樣對資料傳輸也有利,如果確實無法對應,也要拷貝必要的配置檔案到spark節點,因為接下來要配置,否則spark無法連線hdfs

我們這裡計劃bigdata1部署spark的master,bigdata2~bigdata4部署spark的worker或者說是slave,同樣我們只在機器bigdata1上操作,然後配置好之後同步到其他節點再啟動服務即可,下面開始spark叢集的部署

1. 解壓安裝包並修改配置檔案

tar -xzf spark-3.0.1-bin-hadoop3.2.tgz
cd spark-3.0.1-bin-hadoop3.2

然後配置檔案都在conf目錄下,執行cd conf進入目錄,然後會看到有很多.template結尾的模板檔案,裡面寫好的被註釋的配置可以直接進行修改,我們拷貝模板檔案出來作為spark的配置:

cp slaves.template slaves
cp spark-defaults.conf.template spark-defaults.conf
cp spark-env.sh.template spark-env.sh

spark主要用到的就是上面這3個配置檔案,首先編輯slaves配置檔案,寫入我們的slaves節點如下:

bigdata2
bigdata3
bigdata4

這裡就是bigdata2~4,然後繼續配置spark-defaults.conf這個預設的配置檔案,正常只配置下面的master選項即可:

spark.master  spark://bigdata1:7077

其他配置項暫時預設即可,這個配置都是針對於spark任務級別的,比如driver、executor的記憶體,jvm引數等。

然後配置spark-env.sh,這個是最重要的配置檔案,配置全域性的spark服務級別的引數,我們這裡配置如下:

HADOOP_CONF_DIR=/opt/hadoop/etc/hadoop
SPARK_MASTER_HOST=bigdata1
SPARK_MASTER_PORT=7077
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=8
SPARK_WORKER_MEMORY=7g
#SPARK_WORKER_PORT
SPARK_WORKER_WEBUI_PORT=8081
SPARK_WORKER_DIR=/data/spark/work
SPARK_PID_DIR=/var/run

同樣我們來解釋一下這些配置項:

HADOOP_CONF_DIR:這個是hadoop配置檔案的目錄,我這安裝的位置是/opt/hadoop所以配置檔案應為/opt/hadoop/etc/hadoop,就是配置檔案直接所在的目錄

SPARK_MASTER_HOST: 這個配置spark master繫結的主機名或ip,注意不是web介面繫結的,而是master服務本身的,我這為bigdata1

SPARK_MASTER_PORT: 配置spark master監聽的埠號,預設為7077

SPARK_MASTER_WEBUI_PORT: 配置spark master web ui監聽的埠號,預設為8080,當然繫結的主機不用配置,會繫結ipv4和ipv6所有的網絡卡,這樣也方便多網絡卡環境下,web ui都可以訪問到,因此主機名無需配置

SPARK_WORKER_CORES: 配置當前spark worker程序可以使用的核心數,只有worker程序才會讀取,預設值為當前機器的物理cpu核數,叢集總的可用核數等於每個worker核數的累加

SPARK_WORKER_MEMORY: 這個是配置允許spark應用程式在當前機器上使用的記憶體總量,也是隻有worker才會讀取,如果沒配置預設值為:總記憶體-1G,比如我這裡機器記憶體為8G,那麼預設值為7G。注意這個配置項是spark的可用記憶體,而不是限制某個任務,具體任務的限制在spark-defaults.conf中的spark.executor.memory配置項設定

SPARK_WORKER_PORT: 配置worker監聽的埠,預設是隨機的,這裡通常不需要配置,隨機選擇就好

SPARK_WORKER_WEBUI_PORT: 配置worker webui監聽的埠,可以檢視worker的狀態,預設埠為8081,同樣會繫結至所有網絡卡的ip

SPARK_WORKER_DIR: 這個配置spark執行應用程式的臨時目錄,包括日誌和臨時空間,預設值為spark安裝目錄下的work目錄,這裡我們配置到專用的資料目錄中

SPARK_PID_DIR: 配置spark執行時pid存放的目錄,這個預設是在/tmp下,建議修改至/var/run,因為/tmp下的檔案長時間不用會被作業系統清理掉,這樣會造成spark停止程序時失敗的現象,其實就是pid檔案找不到的原因

通用的配置大致就是上面這些,另外在啟動spark服務時其實也可以指定某些引數或者不同的配置檔案,比如我們有多類配置spark-defaults.conf,spark-large.conf等,然後指定不同的配置檔案啟動也是可以的,具體檢視文件引數即可,這裡不再詳細敘述

現在可以同步spark的配置到其他節點了,由於其他節點還沒有spark程式,所以我們將spark程式連同配置一塊同步至其他機器的節點:

rsync -av spark-3.0.1-bin-hadoop3.2 bigdata2:/opt/
rsync -av spark-3.0.1-bin-hadoop3.2 bigdata3:/opt/
rsync -av spark-3.0.1-bin-hadoop3.2 bigdata4:/opt/

這裡我們安裝目錄直接是/opt/spark-3.0.1-bin-hadoop3.2,其他配置按照實際請款來操作即可

2. 啟動spark服務

現在我們可以啟動spark服務了,可以單獨啟動也可以批量啟動,這裡整理常用到的命令如下:

# 單獨啟動當前節點master
./sbin/start-master.sh
# 單獨啟動當前節點slave 後面寫具體master的配置
./sbin/start-slave.sh spark://bigdata1:7077
# 啟動全部的slave節點
./sbin/start-slaves.sh
# 啟動全部spark節點服務 包括master和slave
./sbin/start-all.sh 

# 單獨停止當前節點的master
./sbin/stop-master.sh 
# 單獨停止當前節點的slave 不用加引數
./sbin/stop-slave.sh
# 停止全部的slave
./sbin/stop-slaves.sh 
# 停止叢集所有的服務 包括master和slave
./sbin/stop-all.sh

另外slave節點啟動的引數可以直接執行./sbin/start-slave.sh不加任何引數檢視:

現在在各個節點執行jps可以看到master節點上存在Master程序,各slave節點上應該存在Worker程序說明啟動成功,可以訪問web ui頁面檢視叢集狀態:

這裡可以可以看到叢集全部的資源以及每個節點的資源使用情況,之後運行了任務還會看到任務;然後訪問每個slave節點的8081還可以看到每個節點上任務的執行情況,具體不再放圖片了,這樣spark叢集就基本上部署成功了。可以嘗試進入spark-shell除錯應用,執行./bin/spark-shell可以進入:

參考文件:

spark standalone配置項:https://spark.apache.org/docs/latest/spark-standalone.html

配置引數:https://spark.apache.org/docs/latest/configuration.html

以上如有不足,感謝交流指正~