问题复现
我们这里直接用spark-shell测试,spark-submit底层也是调用的spark-shell
[hadoop@hadoop001 bin]$ ./spark-shell --master yarn --name wuzhou --deploy-mode client
我们每次在执行提交作业的脚本时,都会出现上图所示的场景;可以看出spark.yarn.jars、sparl.yarn.archive都没有配置,我们看下官网的说明
http://spark.apache.org/docs/latest/running-on-yarn.html
官网的意思:如果spark.yarn.jars或者sparl.yarn.archive这2个属性没有设置的话,spark会把$SPARK_HOME/jars下的jar包打包,然后上传到分布式缓存,也就是hdfs
解决方法
下面是官网的说明
http://spark.apache.org/docs/latest/running-on-yarn.html
先创建hdfs目录
[hadoop@hadoop001 bin]$ hdfs dfs -mkdir /spark-yarn-jars
然后把$SPARK_HOME/jars上传到此目录
[hadoop@hadoop001 bin]$ hdfs dfs -put ${SPARK_HOME}/jars/*.jar /spark-yarn-jars
配置spark-defaults.conf文件
[hadoop@hadoop001 bin]$ vi ${SPARK_HOME}/conf/spark-defaults.conf
//添加如下的配置
spark.yarn.jars hdfs://hadoop001:9000/spark-yarn-jars/*.jar
重新执行spark on yarn,会发现不会再上传jars,这样执行效率会高点