Spark叢集的安裝
5、Spark叢集的安裝
5.1、Spark版本的選擇
三大主要版本:
Spark-0.X
Spark-1.X(主要 Spark-1.3 和 Spark-1.6)
Spark-2.X(最新 Spark-2.3)
官網首頁:http://spark.apache.org/downloads.html
我們選擇的版本:spark-2.3.0-bin-hadoop2.7.tgz
5.2、Spark編譯
自己用利用搜索引擎解決哈,小老弟。解決問題的能力,職場中也至關重要!
官網:http://spark.apache.org/docs/latest/building-spark.html
5.3、Spark依賴環境
在官網文件中有一句話:
5.4、安裝JDK
大哥,我請大神教你安裝,點一下就學會如何安裝JDK啦!:https://blog.csdn.net/u012934325/article/details/73441617/
5.5、安裝 Scala
可以看我之前的文章哦,臥槽,看了就會系列的產品:https://blog.csdn.net/qq_42246689/article/details/85061436
5.6、安裝Spark
5.6.1、Spark 分散式叢集
Spark 也是一個主從架構的分散式計算引擎。 主節點是 Master,從節點是 Worker
所以叢集規劃:
Server | Master | Worker |
hadoop02 | √ | √ |
hadoop03 | √ | |
hadoop04 | √ | |
hadoop05 | √ |
詳細安裝步驟:
1、上傳下載好的 Spark 到叢集中的一個節點,
比如是 hadoop05 put c:/spark-2.3.0-bin-hadoop2.7.tgz
2、使用之前安裝 hadoop 叢集相同的 hadoop 使用者安裝 spark 叢集,
現在規劃安裝目錄 /home/hadoop/apps/,
解壓縮排行安裝: tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -apps /home/hadoop/apps/
3、修改配置檔案 spark-env.sh 進入 SPARK_HOME 的 conf 目錄中,進行如下更改:
cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf mv spark-env.sh.template spark-env.sh 然後修改 spark-env.sh:
export JAVA_HOME=/usr/local/java/jdk1.8.0_73 export SPARK_MASTER_HOST=hadoop02 export
SPARK_MASTER_PORT=7077
4、修改配置檔案 slave 進入 SPARK_HOME 的 conf 目錄中,進行如下更改: cd /home/hadoop/apps/spark-2.3.0-bin-
hadoop2.7/conf mv slaves.template slaves 在 slaves 的最後新增所有 worker 節點的主機名 hadoop02
hadoop03
hadoop04
hadoop05
5、將 spark 安裝包 copy 到所有安裝節點
scp -r spark-2.3.0-bin-hadoop2.7 hadoop02:/home/hadoop/apps/
scp -r spark-2.3.0-bin-hadoop2.7 hadoop03:/home/hadoop/apps/
scp -r spark-2.3.0-bin-hadoop2.7 hadoop04:/home/hadoop/apps/
6、配置環境變數
vim ~/.bashrc
export SPARK_HOME=/home/hadoop/apps/spark-2.3.0-bin-hadoop2.7
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
source ~/.bashrc
千萬注意:HADOOP_HOME/sbin 和 SPARK_HOME/sbin 目錄中都包含 start-all.sh 和
stopall.sh 指令碼。所以會有衝突。所以在使用有衝突的命令等要千萬注意。
如果區分不清楚,那麼不推薦配置環境變數
7、啟動 Spark 叢集
[[email protected] ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7
[[email protected] spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh
8、驗證叢集啟動是否成功
8.1、驗證每個節點上的對應程序是否都啟動正常
8.2、驗證 Spark Web UI
開啟瀏覽器訪問:http://hadoop02:8080/
hadoop02 就是 master 所在的伺服器
8.3、測試能否執行一個 Spark 例子程式
提交一個 spark 程式:
[[email protected] ~]$ run-example
SparkPi 10 最後結果:
或者:
[[email protected] ~]$ ~/apps/spark-2.3.0-bin-hadoop2.7/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://hadoop02:7077 \
--executor-memory 512m \
--total-executor-cores 1 \
~/apps/spark-2.3.0-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.3.0.jar \ 100
--master spark://hadoop02:7077 指定 Master 的地址
--executor-memory 512m 指定每個 worker 可用記憶體為 500m
--total-executor-cores 1 指定整個叢集使用的 CPU 核數為 1 個
8.4、進入 Spark Shell 提交 wordcount 程式:
資料準備:
進入 Spark Shell: [[email protected] ~] spark-shell
執行程式:
sc.textFile("/home/hadoop/words.txt").flatMap(_.split(" ")) .map((_,1)).reduceByKey(_+_).foreach(println)
如果是 Spark-1.6.3,那麼啟動的 spark-shell 如下:
注意:
如果啟動 Spark Shell 時沒有指定 master 地址,但是也可以正常啟動 Spark Shell 和執行 Spark Shell 中的程式,其實是啟動了 Spark 的 local 模式,該模式僅在本機啟動一個程序,沒有與 叢集建立聯絡。 Spark Shell 中已經預設將 SparkContext 類初始化為物件 sc。使用者程式碼如果需要用到,則直接 應用 sc 即可。 Spark Shell 中已經預設將 Spark Session 類初始化為物件 spark。使用者程式碼如果需要用到,則 直接應用 spark 即可。
注意 Spark2 和 Spark1 的區別
5.6.2、Spark 高可用叢集
在上面的 4.6.1 中的安裝的 Spark 叢集是一個普通的分散式叢集,存在 master 節點的單點故 障問題。Hadoop 在 2.X 版本開始,已經利用 ZooKeeper 解決了單點故障問題。同樣的策略, Spark 也利用 ZooKeeper 解決 Spark 叢集的單點故障問題
叢集規劃:
Server | Master | Worker |
hadoop02 | √ | √ |
hadoop03 | √ | |
hadoop04 | √ | √ |
hadoop05 | √ |
具體步驟:
1、停止 Spark 叢集
[[email protected] ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7
[[email protected] ~]$ sbin/stop-all.sh
2、配置 ZooKeeper 叢集,並且啟動好 ZooKeeper 叢集
3、修改 SPARK_HOME/conf 目錄中的 spark-env.sh 配置檔案:
刪掉:
export SPARK_MASTER_HOST=hadoop02
增加一行:
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER - Dspark.deploy.zookeeper.url=hadoop02,hadoop03,hadoop04 -
Dspark.deploy.zookeeper.dir=/spark"
解釋:
-Dspark.deploy.recoveryMode=ZOOKEEPER
說明整個叢集狀態是通過zookeeper來維護的,整個叢集狀態的恢復也是通過zookeeper 來維護的。就是說用 zookeeper 做了 Spark 的 HA 配置,Master(Active)掛掉的話, Master(standby)要想變成 Master(Active)的話,Master(Standby)就要像 zookeeper 讀取 整個叢集狀態資訊,然後進行恢復所有 Worker 和 Driver 的狀態資訊,和所有的 Application 狀態資訊
-Dspark.deploy.zookeeper.url=hadoop2:hadoop03:hadoop04
#將所有配置了 zookeeper,並且在這臺機器上有可能做 master(Active)的機器都配置進 來(我用了 3 臺,就配置了 3 臺)
-Dspark.deploy.zookeeper.dir=/spark
這裡的 dir 和 zookeeper 配置檔案 zoo.cfg 中的 dataDir 的區別??? -Dspark.deploy.zookeeper.dir 是儲存 spark 的元資料,儲存了 spark 的作業執行狀態; zookeeper 會儲存 spark 叢集的所有的狀態資訊,包括所有的 Workers 資訊,所有的 Applactions 資訊,所有的 Driver 資訊,如果叢集
4、如果是高可用的 Hadoop 叢集,一定要把 core-site.xml 和 hdfs-site.xml 放置在 $SPARK_HOME/conf 目錄中。然後所有節點要同步
5、同步配置檔案
[[email protected] conf]$ scp -r spark-env.sh hadoop03:$PWD
[[email protected] conf]$ scp -r spark-env.sh hadoop04:$PWD
[[email protected] conf]$ scp -r spark-env.sh hadoop05:$PWD
6、啟動叢集
在 hadoop02 上執行:
[[email protected] ~]$ cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7
[[email protected] spark-2.3.0-bin-hadoop2.7]$ sbin/start-all.sh
此時,通過觀察啟動日誌,或者檢查 hadoop04 上是否包含有 master 程序等都可以得知 hadoop04 上的 master 並不會自動啟動,所以需要手動啟動 那麼在 hadoop04 執行命令進行啟動:
7、驗證高可用
這是正常情況:
Hadoop02 是 spark 叢集的 active master 節點
Hadoop04 是 spark 叢集的 standby master 節點
通過殺掉 active master 觀察是否 hadoop04 能啟動切換為 active 狀態。
結果:
5.6.3、配置 Spark HistoryServer
詳細步驟:
第一步:
cd /home/hadoop/apps/spark-2.3.0-bin-hadoop2.7/conf
cp spark-defaults.conf.template spark-defaults.conf
在檔案裡面新增如下內容:
spark.eventLog.enabled true
spark.eventLog.dir hdfs://myha01/sparklog
第二步:
在 spark-evn.sh 的檔案裡面新增如下內容:
export SPARK_HISTORY_OPTS="Dspark.history.ui.port=18080
Dspark.history.retainedApplications=30
Dspark.history.fs.logDirectory=hdfs://myha01/sparklog"
第三步:
在啟動 HistorServer 服務之前 hdfs://myha01/sparklog 目錄要提前建立
hadoop fs -mkdir -p hdfs://myha01/sparklog
第四步:啟動 Spark HistoryServer
[[email protected] ~] $SPARK_HOME/sbin/start-history-server.sh
第五步:訪問 Spark History WebUI
http://hadoop02:18080/