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

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

 


免責聲明!

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



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