解決Spark on YARN時大量jar亂飛的情況

目錄

一、問題重現

二、解決方法

三、結果驗證


一、問題重現

使用Spark on YARN運行自帶的SparkPi作業

spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
/opt/app/spark-2.4.5-bin-2.6.0-cdh5.16.2/examples/jars/spark-examples_2.12-2.4.5.jar \
2

輸出日誌

WARN yarn.Client: Neither spark.yarn.jars nor spark.yarn.archive is set, falling back to uploading libraries under SPARK_HOME.
INFO yarn.Client: Uploading resource file:/tmp/spark-a7f4a566-9d21-43cf-8388-41698316838e/__spark_libs__855332709144911684.zip -> hdfs://mycluster/user/root/.sparkStaging/application_1588347637771_0011/__spark_libs__855332709144911684.zip
INFO yarn.Client: Uploading resource file:/tmp/spark-a7f4a566-9d21-43cf-8388-41698316838e/__spark_conf__9173892461601825482.zip -> hdfs://mycluster/user/root/.sparkStaging/application_1588347637771_0011/__spark_conf__.zip

提示我們既沒有設置spark.yarn.archive也沒有設置spark.yarn.jars,所以spark自己把所有jar包打成zip包上傳到hdfs上(用完後又刪掉了)

我們查看這兩個文件大小

hadoop fs -du -s -h hdfs://mycluster/user/root/.sparkStaging/application_1588347637771_0011/__spark_libs__855332709144911684.zip
246.6 M  739.7 M  hdfs://mycluster/user/root/.sparkStaging/application_1588347637771_0011/__spark_libs__855332709144911684.zip

hadoop fs -du -s -h hdfs://mycluster/user/root/.sparkStaging/application_1588347637771_0011/__spark_conf__.zip
228.7 K  686.0 K  hdfs://mycluster/user/root/.sparkStaging/application_1588347637771_0011/__spark_conf__.zip

二、解決方法

日誌都已經提示,那我們就幫下spark,替它把sparkjar包上傳到hdfs上。

1、把spark/jars下的jar包打成zip包(打包目的:防止小文件過多,影響hdfs)

#此方式不行,把jars目錄打進去了,spark找不到jar包。
zip -r sparkjars.zip jars/*
# 使用此方式直接在jars下打。
cd jars
zip sparkjars.zip *.jar

2、上傳到hdfs

hadoop fs -put sparkjars.zip /lib

3、在spark-default配置中指定jar包的地址

vi spark-default.conf

#spark.yarn.jars                    hdfs://mycluster/lib/spark-yarn-jars/*.jar
spark.yarn.archive                  hdfs://mycluster/lib/sparkjars.zip

需要注意的是,

1)如果打成zip包,一定要是用spark.yarn.archive。

2)如果使用spark.yarn.jars參數,後面用zip是不行的,需要把所有jar包直接傳到hdfs上,這種方式不推薦,小文件太多,系統提供這個參數應該是針對單一jar包用的,就不用再解壓了。

3)一開沒注意,使用spark.yarn.jars+zip作業運行不成功。其實看名字的話,也猜出來了。

三、結果驗證

重新運行項目,查看日誌

INFO yarn.Client: Source and destination file systems are the same. Not copying hdfs://mycluster/lib/sparkjars.zip

可以發現spark已經從我們配置的目錄讀取了jar包

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章