注:圖片如果損壞,點擊文章鏈接:https://www.toutiao.com/i6815920501530034696/
承接上一篇文檔《Spark詞頻前十的統計練習》
Spark on standalone
類似於yarn的一個集羣資源管理框架,spark自帶的
yarn
ResourceManager(進程)
管理和調度集羣資源,主要包括:申請、調度、監控
NodeManager(進程)
管理當前節點的資源,以及啓動container資源:CPU和內存(CPU決定快慢,內存決定生死)
注意:一臺機器只允許有一個NodeManager
standalone
Master:(進程)
管理集羣資源,主要包括:申請、調度、監控
Worker:(進程)
當前進程允許分配的資源進行管理,包括資源的管理以及executor的啓動資源:CPU和內存(CPU決定快慢,內存決定生死)
注意:一臺機器允許有多個Worker進程
Standalone集羣的配置
前提:spark的本地執行環境已經配置好了
- 修改${SPARK_HOME}/conf/spark-env.sh
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的數量
2. 配置Worker節點所在機器,在conf目錄中
cp slaves.template slaves
修改slaves
備註:一行一個機器的主機名(Worker進程所在的機器的hostname)
3. 額外:完全分佈式配置(此處可不配置瞭解即可)
只需要在slaves文件中添加slave從節點的hostname即可(前提是ssh、hostname和ip映射等hadoop的依賴環境均已完成),然後將修改好的spark的安裝包copy到其他的slave機器上即可完成分佈式的安裝
4. 啓動服務
4.1 啓動主節點
./sbin/start-master.sh
訪問WEBUI:http://master:8080/
4.2 啓動從節點(Worker)
./sbin/start-slave.sh spark://master:7070
4.3 關閉所有服務
./sbin/stop-all.sh
4.5 啓動所有服務
./sbin/start-all.sh
注意:啓動和關閉所有服務的前提是由ssh免祕鑰登錄
5. 簡單查看/測試
5.1 jps查看Master和Worker進程
5.2 查看WEBUI界面:http://master:8080/
5.3 ./bin/spark-shell --help--》查看幫助命令
./bin/spark-shell --master spark://master:7070
val result1 = sc.textFile("file:///opt/modules/spark/README.md").flatMap(_.split(" ")).filter(_.nonEmpty).map((_,1)).reduceByKey(_+_).collect
如果看到collect有結果,表示我們的standalone搭建完成
Spark StandAlone集羣的HA配置
1. Single-Node Recovery with Local File System --基於文件系統的單節點恢復
在spark-env.sh配置
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=FILESYSTEM -Dspark.deploy.recoveryDirectory=/user/spark/tmp"
spark.deploy.recoveryDirectory --> 保存恢復狀態的一個目錄
2. Standby Masters with ZooKeeper --基於Zookeeper的Master的HA機制
SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=hadoop01:2181,hadoop02:2181,hadoop03:2181 -Dspark.deploy.zookeeper.dir=/spark-ha"
假設有三臺機器
hadoop01MasterSPARK_MASTER_HOST=hadoop01
hadoop02Master(standby) SPARK_MASTER_HOST=hadoop02
hadoop03SPARK_MASTER_HOST=hadoop02
啓動Master,在hadoop01上用 start-all.sh(hadoop01:8080)
再在hadoop02上面單獨啓動Master start-master.sh (自動成爲StandBy的狀態hadoop02:8080)
Spark應用的監控
如果運行
頁面就會變化
如果關掉shell,頁面就不存在了
官網:http://spark.apache.org/docs/2.0.2/monitoring.html
給了監控方法
- 針對我們正在運行的Spark應用,可以通過WEB界面監控,默認端口號是4040,如果4040被佔用,就會依次進行端口遞增(也是有次數限制的),
spark.ui.port=4050 --4051 4052
2. 如果應用已經執行完成了,那可以spark的job history server服務來看
MapReduce的job history server
(1). 開啓日誌聚集功能
(2). 日誌上傳到HDFS的文件夾路徑
(3). 啓動mr的job history服務(讀取HDFS的日誌文件,並進行展示)
Spark的job history server
(1). 在HDFS上創建spark應用日誌存儲路徑
./bin/hdfs dfs -mkdir -p /spark/history
(2). 修改配置文件spark-default.conf
spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/spark /history
(3). 配置Spark的job history server
spark-env.sh
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://master:8020/spark/history-Dspark.history.ui.port=18080"
(4). 啓動spark的job history server
http:/master:18080/api/v1/applications
查看Jps
Web的地址查看,注意18080
這裏出現了一個錯誤18080可以訪問但沒有內容
先檢查Hadoop是否創建了這個目錄
檢查路徑是否有問題
檢查配置文件發現問題所在
經測試後發現:
spark.eventLog.dir:Application在運行過程中所有的信息均記錄在該屬性指定的路徑下;
spark.history.fs.logDirectory:Spark History Server頁面只展示該指定路徑下的信息;
比如:spark.eventLog.dir剛開始時指定的是hdfs://hadoop000:8020/directory,而後修改成hdfs://hadoop000:8020/directory2
那麼spark.history.fs.logDirectory如果指定的是hdfs://hadoop000:8020/directory,就只能顯示出該目錄下的所有Application運行的日誌信息;反之亦然。
所有這裏修改spark.eventLog.dir爲
重啓服務即可訪問
在頁面裏可以查看很多信息,比如日誌配置路徑,未完成的應用等等
Api查詢應用
RESTAPI:
http://master:18080/api/v1/applications/local-1533452143143/jobs/0