Standalone集群搭建和Spark應用監控

承接上一篇文檔《Spark詞頻前十的統計練習

Spark on standalone

類似於yarn的一個集群資源管理框架,spark自帶的

yarn

ResourceManager(進程)

管理和調度集群資源,主要包括:申請、調度、監控

NodeManager(進程)

管理當前節點的資源,以及啟動container資源:CPU和內存(CPU決定快慢,內存決定生死)

注意:一臺機器只允許有一個NodeManager


standalone

Master:(進程)

管理集群資源,主要包括:申請、調度、監控

Worker:(進程)

當前進程允許分配的資源進行管理,包括資源的管理以及executor的啟動資源:CPU和內存(CPU決定快慢,內存決定生死)

注意:一臺機器允許有多個Worker進程


Standalone集群的配置

前提:spark的本地執行環境已經配置好了

  1. 修改${SPARK_HOME}/conf/spark-env.sh
<code>SPARK_MASTER_HOST=域名和ip
SPARK_MASTER_PORT=7070
SPARK_MASTER_WEBUI_PORT=8080
SPARK_WORKER_CORES=2//指定當前機器上的每個worker進程允許分配的邏輯CPU核數
SPARK_WORKER_MEMORY=2g//指定當前機器上的每個worker允許分配的內存大小(可以認為是邏輯內存)
SPARK_WORKER_PORT=7071
SPARK_WORKER_WEBUI_PORT=8081
SPARK_WORKER_INSTANCES=2//指定當前機器上的Worker的數量/<code>
Standalone集群搭建和Spark應用監控

2. 配置Worker節點所在機器,在conf目錄中

<code>cp slaves.template slaves/<code>
Standalone集群搭建和Spark應用監控

修改slaves

Standalone集群搭建和Spark應用監控

備註:一行一個機器的主機名(Worker進程所在的機器的hostname)

3. 額外:完全分佈式配置(此處可不配置瞭解即可)

只需要在slaves文件中添加slave從節點的hostname即可(前提是ssh、hostname和ip映射等hadoop的依賴環境均已完成),然後將修改好的spark的安裝包copy到其他的slave機器上即可完成分佈式的安裝

4. 啟動服務

4.1 啟動主節點

<code>./sbin/start-master.sh/<code>
<code>訪問WEBUI:http://master:8080//<code>
Standalone集群搭建和Spark應用監控

Standalone集群搭建和Spark應用監控

4.2 啟動從節點(Worker)

<code>./sbin/start-slave.sh spark://master:7070/<code>
Standalone集群搭建和Spark應用監控

Standalone集群搭建和Spark應用監控

4.3 關閉所有服務

<code>./sbin/stop-all.sh/<code>

4.5 啟動所有服務

<code>./sbin/start-all.sh/<code>

注意:啟動和關閉所有服務的前提是由ssh免秘鑰登錄

5. 簡單查看/測試

5.1 jps查看Master和Worker進程

Standalone集群搭建和Spark應用監控

<code>5.2 查看WEBUI界面:http://master:8080//<code>
Standalone集群搭建和Spark應用監控

<code>5.3 ./bin/spark-shell --help--》查看幫助命令/<code>
Standalone集群搭建和Spark應用監控

<code>./bin/spark-shell --master spark://master:7070/<code>
<code>val result1 = sc.textFile("file:///opt/modules/spark/README.md").flatMap(_.split(" ")).filter(_.nonEmpty).map((_,1)).reduceByKey(_+_).collect/<code>

如果看到collect有結果,表示我們的standalone搭建完成

Standalone集群搭建和Spark應用監控


Spark StandAlone集群的HA配置

1. Single-Node Recovery with Local File System --基於文件系統的單節點恢復

在spark-env.sh配置

<code>SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/user/spark/tmp"/<code>
<code>spark.deploy.recoveryDirectory --> 保存恢復狀態的一個目錄/<code>
Standalone集群搭建和Spark應用監控

2. Standby Masters with ZooKeeper --基於Zookeeper的Master的HA機制

<code>SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop01:2181,hadoop02:2181,hadoop03:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"/<code>
Standalone集群搭建和Spark應用監控

假設有三臺機器


<code>hadoop01MasterSPARK_MASTER_HOST=hadoop01
hadoop02Master(standby) SPARK_MASTER_HOST=hadoop02
hadoop03SPARK_MASTER_HOST=hadoop02/<code>


啟動Master,在hadoop01上用 start-all.sh(hadoop01:8080)

再在hadoop02上面單獨啟動Master start-master.sh (自動成為StandBy的狀態hadoop02:8080)


Spark應用的監控

Standalone集群搭建和Spark應用監控

如果運行

Standalone集群搭建和Spark應用監控

頁面就會變化

Standalone集群搭建和Spark應用監控

如果關掉shell,頁面就不存在了

Standalone集群搭建和Spark應用監控

Standalone集群搭建和Spark應用監控

<code>官網:http://spark.apache.org/docs/2.0.2/monitoring.html/<code>

給了監控方法

  1. 針對我們正在運行的Spark應用,可以通過WEB界面監控,默認端口號是4040,如果4040被佔用,就會依次進行端口遞增(也是有次數限制的),
<code>spark.ui.port=4050 --4051 4052/<code>
Standalone集群搭建和Spark應用監控

Standalone集群搭建和Spark應用監控

2. 如果應用已經執行完成了,那可以spark的job history server服務來看

MapReduce的job history server

(1). 開啟日誌聚集功能

(2). 日誌上傳到HDFS的文件夾路徑

(3). 啟動mr的job history服務(讀取HDFS的日誌文件,並進行展示)

Spark的job history server

(1). 在HDFS上創建spark應用日誌存儲路徑

<code>./bin/hdfs dfs -mkdir -p /spark/history/<code>
Standalone集群搭建和Spark應用監控

(2). 修改配置文件spark-default.conf

Standalone集群搭建和Spark應用監控

<code>spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/spark /history/<code>


(3). 配置Spark的job history server

spark-env.sh

<code>SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:8020/spark/history-Dspark.history.ui.port=18080"/<code>
Standalone集群搭建和Spark應用監控

(4). 啟動spark的job history server

<code>http:/master:18080/api/v1/applications/<code>
Standalone集群搭建和Spark應用監控

查看Jps

Standalone集群搭建和Spark應用監控

Web的地址查看,注意18080

這裡出現了一個錯誤18080可以訪問但沒有內容

先檢查Hadoop是否創建了這個目錄

Standalone集群搭建和Spark應用監控

檢查路徑是否有問題

Standalone集群搭建和Spark應用監控

檢查配置文件發現問題所在

Standalone集群搭建和Spark應用監控

Standalone集群搭建和Spark應用監控

經測試後發現:

spark.eventLog.dir:Application在運行過程中所有的信息均記錄在該屬性指定的路徑下;

spark.history.fs.logDirectory:Spark History Server頁面只展示該指定路徑下的信息;

<code>比如:spark.eventLog.dir剛開始時指定的是hdfs://hadoop000:8020/directory,而後修改成hdfs://hadoop000:8020/directory2/<code>

那麼spark.history.fs.logDirectory如果指定的是hdfs://hadoop000:8020/directory,就只能顯示出該目錄下的所有Application運行的日誌信息;反之亦然。

所有這裡修改spark.eventLog.dir為

Standalone集群搭建和Spark應用監控

重啟服務即可訪問

Standalone集群搭建和Spark應用監控

在頁面裡可以查看很多信息,比如日誌配置路徑,未完成的應用等等

Standalone集群搭建和Spark應用監控

Api查詢應用

RESTAPI:

<code>http://master:18080/api/v1/applications/local-1533452143143/jobs/0/<code>


Standalone集群搭建和Spark應用監控


分享到:


相關文章: