1. 程式人生 > >Spark叢集的安裝

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/