Spark3.0.1各種集群模式搭建及spark on yarn日志配置


對於spark前來圍觀的小伙伴應該都有所了解,也是現在比較流行的計算框架,基本上是有點規模的公司標配,所以如果有時間也可以補一下短板。

簡單來說Spark作為准實時大數據計算引擎,Spark的運行需要依賴資源調度和任務管理,Spark自帶了standalone模式資源調度和任務管理工具,運行在其他資源管理和任務調度平台上,如Yarn、Mesos、Kubernates容器等。

spark的搭建和Hadoop差不多,稍微簡單點,本文針對下面幾種部署方式進行詳細描述:

  • Local:多用於本地測試,如在eclipse,idea中寫程序測試等。

  • Standalone:Standalone是Spark自帶的一個資源調度框架,它支持完全分布式。

  • Yarn:Hadoop生態圈里面的一個資源調度框架,Spark也是可以基於Yarn來計算的。

了解一個框架最直接的方式首先要拿來玩玩,玩之前要先搭建,廢話少說,進入正題,搭建spark集群。

一、環境准備

   搭建環境:CentOS7+jdk8+Hadoop2.10.1+Spark3.0.1

  1. 機器准備,由於已經搭建過Hadoop,spark集群也是使用相同集群(個人電腦資源有限),可以參照Hadoop搭建博客:centos7中搭建hadoop2.10高可用集群
  2. 需要安裝jdk1.8、Scala2.12.12、hadoop2.10.1、spark3.0.1,其中jdk1.8和Hadoop2.10也都已經安裝完成,這里只介紹Scala和spark環境配置
  3. 機器免密登錄,也在Hadoop部署時做過,可以參照Hadoop搭建博客:centos7中搭建hadoop2.10高可用集群
  4. 下載Scala2.12.12(https://www.scala-lang.org/download/2.12.12.html)、下載spark3.0.1(http://spark.apache.org/downloads.html)

二、配置環境變量

  1.配置Scala環境  

tar -zxvf scala-2.12.12.tgz -C /opt/soft/
cd /opt/soft
ln -s scala-2.12.12 scala

vim /etc/profile
添加環境變量

 #SCALA
 export SCALA_HOME=/opt/soft/scala
 export PATH=$PATH:$SCALA_HOME/bin

 source /etc/profile

測試是否正常

 

 

 正常

  2.配置spark環境變量

  由於各個部署方式都需要該步驟,在此單獨配置,各個部署方式不再配置

tar -zxvf spark-3.0.1-bin-hadoop2.7.tgz -C /opt/soft
cd /opt/soft
ln -s spark-3.0.1-bin-hadoop2.7 spark
vim /etc/profile
添加環境變量

 #spark
 export SPARK_HOME=/opt/soft/spark
 export PATH=$PATH:$SPARK_HOME/bin

 source /etc/profile

 

三、搭建步驟

  1.本地Local模式

   上述已經解壓配置好spark環境變量,本地模式不需要配置其他配置文件,可以直接使用,很簡單吧,先測試一下運行樣例:

cd /opt/soft/spark/bin

run-example SparkPi 10

 

 可以計算出結果

  測試spark-shell

spark-shell

 

 啟動成功,說明Local模式部署成功

  2.Standalone模式

  1>修改Spark的配置文件spark-env.sh

cd /opt/soft/spark/conf
cp spark-env.sh.template spark-env.sh
vim spark-env.sh

添加如下配置:

# 主節點機器名稱
export SPARK_MASTER_HOST=s141
# 默認端口號為7077
export SPARK_MASTER_PORT=7077

  2>修改配置文件slaves(從節點配置)

cd /opt/soft/spark/conf
cp slaves.template slaves
vim slaves

刪除原有節點,添加從節點主機如下配置:

s142
s143
s144
s145

  3>將spark目錄發送到其他機器,可以使用scp一個一個機器復制,這里使用的是自己寫的批量復制腳本xrsync.sh(hadoop批量命令腳本xrsync.sh傳輸腳本

xrsync.sh spark-3.0.1-bin-hadoop2.7

 

   4>在各個機器中建立spark軟連接,可以進入各個機器的/opt/soft目錄

 ln -s /opt/soft/spark-3.0.1-bin-hadoop2.7 /opt/soft/spark

  這里使用的是批量執行命令腳本xcall.sh(hadoop批量命令腳本xcall.sh及jps找不到命令解決

xcall.sh ln -s /opt/soft/spark-3.0.1-bin-hadoop2.7 /opt/soft/spark

 

   5>啟動spark集群

cd /opt/soft/spark/sbin

可以單獨啟動master和slave
./start-master.sh
./start-slaves.sh spark://s141:7077

也可以一鍵啟動master和slave
./start-all.sh

 

 可以看到master和worker進程已經啟動成功

  6>查看集群資源頁面(webUI:http://192.168.30.141:8080/),如果8080端口查不到可以看一下master啟動日志,可能是8081端口

 

 

 

   7>進入集群shell驗證

cd /opt/soft/spark/bin
./spark-shell –master spark://s141:7077

 

 也是正常的,說明Standalone模式部署成功

  3.yarn集群模式

  1>修改配置文件spark-env.sh

  在Standalone模式下搭建yarn集群模式很簡單,只需要在spark-env.sh配置文件加入如下內容即可。

# 添加hadoop的配置目錄
export HADOOP_CONF_DIR=/opt/soft/hadoop/etc/hadoop

  將spark-env.sh分發到各個機器

 

   4>啟動spark集群

  先啟動Hadoop的yarn集群

start-yarn.sh

  再啟動spark集群,和Standalone模式一樣有兩種方式

cd /opt/soft/spark/sbin

可以單獨啟動master和slave
./start-master.sh
./start-slaves.sh spark://s141:7077

也可以一鍵啟動master和slave
./start-all.sh

 

   查看master和worker進程正常 

  5>查看集群資源頁面(webUI:http://192.168.30.141:8080/),如果8080端口查不到可以看一下master啟動日志,可能是8081端口

 

   6>進入集群shell驗證

cd /opt/soft/spark/bin
./spark-shell –master yarn

啟動也正常 

  7>spark的歷史服務器集成yarn

  修改Hadoop的mapred-site.xml,將下面配置直接追加到最后,s141改成自己的機器即可

    <!--Spark Yarn-->
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>s141:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>s141:19888</value>
    </property>

由於虛擬機資源有限,在運行時會因為使用內存超出分配值殺死而失敗,需要修改hadoop的/hadoop/etc/hadoop/yarn-site.xml配置文件,然后分發

<!--是否啟動一個線程檢查每個任務正使用的物理內存量,如果任務超出分配值,則直接將其殺掉,默認是true -->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
</property>

<!--是否啟動一個線程檢查每個任務正使用的虛擬內存量,如果任務超出分配值,則直接將其殺掉,默認是true -->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<!-- 是否開啟聚合日志 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!--允許第三方程序,例如spark將Job的日志,提交給Hadoop的歷史服務 -->
<property>
<name>yarn.log.server.url</name>
<value>http://s141:19888/jobhistory/logs</value>
</property>
<!-- 配置日志過期時間,單位秒 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>

將上述修改的配置文件分發到其他機器

另外在spark conf目錄下建立對Hadoop配置文件core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml的軟連接,這里使用的是批量創建軟連接

xcall.sh ln -s /opt/soft/hadoop/etc/hadoop/core-site.xml /opt/soft/spark/conf/core-site.xml
xcall.sh ln -s /opt/soft/hadoop/etc/hadoop/hdfs-site.xml /opt/soft/spark/conf/hdfs-site.xml xcall.sh ln -s /opt/soft/hadoop/etc/hadoop/yarn-site.xml /opt/soft/spark/conf/yarn-site.xml xcall.sh ln -s /opt/soft/hadoop/etc/hadoop/mapred-site.xml /opt/soft/spark/conf/mapred-site.xml

 

 啟動Hadoop歷史服務器

# 啟動Hadoop 歷史服務器
mr-jobhistory-daemon.sh start historyserver

  

修改spark-defaults.conf.template文件名為spark-defaults.conf

spark.eventLog.enabled           true
#HDFS的節點和端口和目錄(HDFS上的目錄需要提前存在)
spark.eventLog.dir               hdfs://mycluster/spark/logs
#spark的歷史服務器,在spark所在節點,端口18080
spark.yarn.historyServer.address=192.168.30.141:18080
spark.history.ui.port=18080

  修改spark-env.sh文件,配置日志存儲路徑

#spark的歷史服務器
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080 
-Dspark.history.fs.logDirectory=hdfs://mycluster/spark/logs 
-Dspark.history.retainedApplications=30"

  啟動spark歷史服務器,在s141集群上執行如下命令:

sbin/start-history-server.sh

 

  8>測試官方demo

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
./examples/jars/spark-examples_2.12-3.0.1.jar \
10

查看yarn調度UI界面:http://192.168.30.141:8088/

 spark任務

 

 spark各階段執行耗時詳情

 

 

 spark執行狀態及日志查看

日志信息

 

 

 

啟動流程:

# 啟動HDFS
start-all.sh
# 啟動Hadoop 歷史服務器
mr-jobhistory-daemon.sh start historyserver

# 啟動Spark 集群
sbin/start-all.sh
# 啟動Spark 歷史服務器
sbin/start-history-server.sh

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM