1、在hadoop安裝目錄下找到yarn-site.xml配置文件,添加如下配置:
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
2、找到spark的安裝目錄,進入conf,將spark-env.sh.template複製一份,重命名爲spark-env.sh,添加如下內容:
# YARN
SPARK_CONF_DIR=/apps/spark/conf
HADOOP_CONF_DIR=/apps/hadoop/etc/hadoop
YARN_CONF_DIR=/apps/hadoop/etc/hadoop
SPARK_EXECUTOR_CORES=2
SPARK_EXECUTOR_MEMORY=2G
SPARK_DRIVER_MEMORY=2G
# spark.history.ui.port 決定history-server綁定的端口
# spark.history.fs.logDirectory 決定去什麼地方查找歷史Application的日誌
SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.retainedApplications=40 -Dspark.history.fs.logDirectory=hdfs://m.hadoop.com:9000/spark/event"
YARN_CONF_DIR是爲了告訴Spark去哪讀取yarn配置信息,與YARN的ResourceManager和NodeManager組件進行交互。
中間SPARK_XXXXX的是配置Driver和Executor的資源配置,我的虛擬機測試環境資源有限,大家可以根據集羣配置和任務大小進行調整,這裏是全局生效,每個Spark Application在提交至YARN的時候可以單獨配置。
最後一個比較重要,Spark的history-server在啓動的時候會通過它們決定綁定的端口和獲取歷史應用日誌文件的位置,非常重要,不然無法查看歷史上執行的Spark應用信息。
spark.history.fs.logDirectory需要在啓動history-server前手動創建,不然啓動會報錯
3、找到spark的安裝目錄,進入conf,將spark-defaults.conf.template複製一份,重命名爲spark-defaults.conf,添加如下內容:
# App提交至yarn後,告訴yarn當app運行完成後,查看history的網址,yarn模式下生效
spark.yarn.historyServer.address m.hadoop.com:18080
# spark.serializer org.apache.spark.serializer.KryoSerializer
# 記錄App的event log,在App運行結束後可以用來恢復Web UI界面,便於發現歷史App中存在的問題,
# history-server需要讀取該目錄日誌,與env文件中的SPARK_HISTORY_OPTS目錄保持一致
spark.eventLog.enabled true
spark.eventLog.compress true
spark.eventLog.dir hdfs://m.hadoop.com:9000/spark/event
# 用來加快spark app的啓動速度,Container從hdfs讀取jar包,不再每次從本地上傳spark/jar目錄下的所有jar包
spark.yarn.archive hdfs://m.hadoop.com:9000/spark/jars/spark2.4.3.zip
4、這時候,通過start-history-server.sh啓動start-history-server,使用http協議訪問18080端口即可看到history界面。
5、通過spark-shell --master yarn執行spark-shell,在yarn的Web界面上點擊Job的ApplicationMaster鏈接,即可查看App運行Web界面。
6、停止Spark App後,也可以在yarnWeb頁面的history鏈接訪問spark的history,重構歷史App的Web UI,分析App運行情況