Spark on yarn模式的参数设置即调优

时间:2025-05-15 07:38:42
1 启动方式
  1. 执行命令./spark-shell --master yarn默认运行的是client模式。
  2. 执行./spark-shell --master yarn-client或者./spark-shell --master yarn --deploy-mode client运行的也是client。
  3. 执行./spark-shell --master yarn-cluster或者./spark-shell --master yarn --deploy-mode cluster运行的是cluster模式。(自己是是可行吗?后面讲解)
2 参数

spark on yarn模式,默认情况下会读取spark本地的jar包(再jars目录下)分配到yarn的containers中,我们可以观察使用spark-shell启动时的日志:

18/04/21 09:31:45 WARN Client: Neither  nor  is set, falling back to uploading libraries under SPARK_HOME.
18/04/21 09:32:04 INFO Client: Uploading resource file:/tmp/spark-a02aba59-216a-4f48-90ad-1feac7ef3ca3/__spark_libs__1710985531662084339.zip -> hdfs://192.168.137.130:9000/user/hadoop/.sparkStaging/application_1524244764594_0002/__spark_libs__1710985531662084339.zip
18/04/21 09:32:11 INFO Client: Uploading resource file:/tmp/spark-a02aba59-216a-4f48-90ad-1feac7ef3ca3/__spark_conf__9148717454674942843.zip -> hdfs://192.168.137.130:9000/user/hadoop/.sparkStaging/application_1524244764594_0002/__spark_conf__.zip

这样每次启动会很慢,读取很多东西,可以通过参数指定放在hdfs上;
调优

官网提供了一个参数默认是没有设置的,我们看看官网给我们的解释:

默认情况下会把Spark中的jars目录里面的jar包通过本地上传,但是这样不能达到一个公用的效果每次提交job都要去从本地上传,所有我们可以设置全局的把它放置在一个公用的地方这样每次应用程序运行时都不需要分发它。例如,要指向HDFS上的jar,请将此配置设置为hdfs:/// some / path。 可以共用。
把jars目录下的jar包上传到hdfs
[hadoop@hadoop spark-2.2.0-bin-2.6.0-cdh5.7.0]$ hdfs dfs -mkdir -p /spark/jars
[hadoop@hadoop spark-2.2.0-bin-2.6.0-cdh5.7.0]$ hdfs dfs -put jars/ /spark/jars

conf目录下:
vi 
  hdfs:///spark/jars/jars/*

注意: hdfs:///spark/jars/jars/* 如果不加/*就会报错的。

3 简化启动spark on yarn的命令

启动spark on yarn的命令:spark-shell --master yarn --jars mysql驱动包绝对路径
感觉是不是很麻烦,可以修改conf目录下的配置文件。

官方参数:所有参数我们都可以去官网查找,其实最全的还是在源码中我们的SparkSubmitArguments这个类。有兴趣的同学可以去源码中看看。

添加下面配置:
  mysql驱动包绝对路径
  mysql驱动包绝对路径
 yarn

这里executor和driver都要加,因为我们通过--jars设置的话,默认是给我们加到executor和driver,所以都要同时加,否则会把找不到驱动的错误

注意:

  1. 当某个jar包啊或者某个类找不到的时候,都可以用这种方式手动指定类或jar包的路径。
  2. 如果设置 local[2] 即为local模式。
  3. 如果不想再配置文件文件中加入jar包,可以直接丢入jars目录下(个人感觉应该没啥区别)。
  4. 某些版本可能存在问题,一般executor,driver要同时设置,要不然可能报错。
4 自定义配置文件

对于3上面说的修改大家有什么想法呢?
首相是一个全局的配置文件,要是存在多个业务线该怎么办呢?,这时候我们可以使用--properties-file参数可以根据不同的业务线自定义配置文件,如果没有设置该参数那么就通过这个配置文件中去查找。(实现原理就是scala中的默认参数default)

cp  
进行修改

执行:
spark-shell --properties-file /opt/software/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/
5

spark对于同时运行的作业数目是有限制,该限制由参决定,该参数默认值为16,表明同一时间运行的作业最多为17个我们可以更改这一数字,具体做法如下:

vi   添加
  ${业务所需要的数值}
6 自定义属性
/spark-shell --master yarn --conf spark.属性=值

注意: 这里必须以spark开头,有兴趣的小伙伴可以到源码中找到答案。

7

该属性用来设置作业最大重试次数。默认情况应该是偏小的适当放大