承接上一篇文檔《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
<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>
2. 配置Worker節點所在機器,在conf目錄中
<code>cp slaves.template slaves/<code>
修改slaves
備註:一行一個機器的主機名(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>
4.2 啟動從節點(Worker)
<code>./sbin/start-slave.sh spark://master:7070/<code>
4.3 關閉所有服務
<code>./sbin/stop-all.sh/<code>
4.5 啟動所有服務
<code>./sbin/start-all.sh/<code>
注意:啟動和關閉所有服務的前提是由ssh免秘鑰登錄
5. 簡單查看/測試
5.1 jps查看Master和Worker進程
<code>5.2 查看WEBUI界面:http://master:8080//<code>
<code>5.3 ./bin/spark-shell --help--》查看幫助命令/<code>
<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搭建完成
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>
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>
假設有三臺機器
<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應用的監控
如果運行
頁面就會變化
如果關掉shell,頁面就不存在了
<code>官網:http://spark.apache.org/docs/2.0.2/monitoring.html/<code>
給了監控方法
- 針對我們正在運行的Spark應用,可以通過WEB界面監控,默認端口號是4040,如果4040被佔用,就會依次進行端口遞增(也是有次數限制的),
<code>spark.ui.port=4050 --4051 4052/<code>
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>
(2). 修改配置文件spark-default.conf
<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>
(4). 啟動spark的job history server
<code>http:/master:18080/api/v1/applications/<code>
查看Jps
Web的地址查看,注意18080
這裡出現了一個錯誤18080可以訪問但沒有內容
先檢查Hadoop是否創建了這個目錄
檢查路徑是否有問題
檢查配置文件發現問題所在
經測試後發現:
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為
重啟服務即可訪問
在頁面裡可以查看很多信息,比如日誌配置路徑,未完成的應用等等
Api查詢應用
RESTAPI:
<code>http://master:18080/api/v1/applications/local-1533452143143/jobs/0/<code>
閱讀更多 分享電腦學習 的文章