Spark on yarn模式的参数设置即调优
1 启动方式
- 执行命令
./spark-shell --master yarn
默认运行的是client模式。 - 执行
./spark-shell --master yarn-client
或者./spark-shell --master yarn --deploy-mode client
运行的也是client。 - 执行
./spark-shell --master yarn-cluster
或者./spark-shell --master yarn --deploy-mode cluster
运行的是cluster模式。(自己是是可行吗?后面讲解)
2 spark.yarn.jars参数
spark on yarn模式,默认情况下会读取spark本地的jar包(再jars目录下)分配到yarn的containers中,我们可以观察使用spark-shell启动时的日志:
18/04/21 09:31:45 WARN Client: Neither spark.yarn.jars nor spark.yarn.archive 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
这样每次启动会很慢,读取很多东西,可以通过spark.yarn.jars参数指定放在hdfs上;
调优
把jars目录下的jar包上传到hdfs
[[email protected] spark-2.2.0-bin-2.6.0-cdh5.7.0]$ hdfs dfs -mkdir -p /spark/jars
[[email protected] spark-2.2.0-bin-2.6.0-cdh5.7.0]$ hdfs dfs -put jars/ /spark/jars
conf目录下:
vi spark-defaults.conf
spark.yarn.jars hdfs:///spark/jars/jars/*
*注意:**hdfs:///spark/jars/jars/ 如果不加/*就会报错的。
3 简化启动spark on yarn的命令
启动spark on yarn的命令:spark-shell --master yarn --jars mysql驱动包绝对路径
感觉是不是很麻烦,可以修改conf目录下的spark-defaults.conf配置文件。
添加下面配置:
spark.executor.extraClassPath mysql驱动包绝对路径
spark.driver.extraClassPath mysql驱动包绝对路径
spark.master yarn
注意:
1. 当某个jar包啊或者某个类找不到的时候,都可以用这种方式手动指定类或jar包的路径。
2. 如果设置spark.master local[2] 即为local模式。
3. 如果不想再spark-defaults.conf配置文件文件中加入jar包,可以直接丢入jars目录下(个人感觉应该没啥区别)。
4. 一般executor,driver要同时设置吗,要不然可能报错。
4 自定义配置文件
对于3上面说的修改spark-defaults.conf大家有什么想法呢?
首相spark-defaults.conf是一个全局的配置文件,要是存在多个业务线该怎么办呢?,这时候我们可以使用--properties-file
参数可以根据不同的业务线自定义配置文件
cp spark-defaults.conf spark-yarn.conf
进行修改
执行:
spark-shell --properties-file /opt/software/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf/spark-yarn.conf
5 spark.port.maxRetries
spark对于同时运行的作业数目是有限制,该限制由参spark.port.maxRetries
决定,该参数默认值为16,表明同一时间运行的作业最多为17个我们可以更改这一数字,具体做法如下:
vi spark-default.cong 添加
spark.port.maxRetries ${业务所需要的数值}
6 自定义属性
/spark-shell --master yarn --conf spark.属性=值
注意:这里必须以spark开头,有兴趣的小伙伴可以到源码中找到答案。
7 spark.yarn.maxAppAttempts
该属性用来设置作业最大重试次数。