spark-submit 任务提交

spark-submit \
--class sparksql.Oracle_Sqs_Hive \
--master yarn \
--deploy-mode cluster \
/home/spark/333.jar

 

几个重要的参数说明:

(1)executor_cores*num_executors
表示能够并行执行Task的数目不宜太小或太大!一般不超过总队列 cores 的 25%,比如队列总 cores 400,最大不要超过100,最小不建议低于40,除非日志量很小。
(2)executor_cores
不宜为1!否则 work 进程中线程数过少,一般 2~4 为宜。
(3)executor_memory
一般 6~10g 为宜,最大不超过20G,否则会导致GC代价过高,或资源浪费严重。
(4)driver-memory
driver 不做任何计算和存储,只是下发任务与yarn资源管理器和task交互,除非你是 spark-shell,否则一般 1-2g
增加每个executor的内存量,增加了内存量以后,对性能的提升,有三点:
(5)如果需要对RDD进行cache,那么更多的内存,就可以缓存更多的数据,将更少的数据写入磁盘,
甚至不写入磁盘。减少了磁盘IO。
(6)对于shuffle操作,reduce端,会需要内存来存放拉取的数据并进行聚合。如果内存不够,也会写入磁盘。
如果给executor分配更多内存以后,就有更少的数据,需要写入磁盘,甚至不需要写入磁盘。减少了磁盘IO,提升了性能。
(7)对于task的执行,可能会创建很多对象.如果内存比较小,可能会频繁导致JVM堆内存满了,然后频繁GC,垃圾回收 ,minor GC和full GC.(速度很慢).内存加大以后,带来更少的GC,垃圾回收,避免了速度变慢,性能提升。

spark提交参数的设置非常的重要,如果设置的不合理,会影响性能,所以大家要根据具体的情况适当的调整参数的配置有助于提高程序执行的性能

--conf spark.executor.userClassPathFirst=true
--conf spark.driver.userClassPathFirst=true
设置自己上传的jar包在executor和driver上优先级高于集群自己jar包,俩个参数都要配

 

spark-submit 详细参数说明

参数名

参数说明

--master

 master 的地址,提交任务到哪里执行,例如 spark://host:port,  yarn,  local

--deploy-mode

 在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client

--class

 应用程序的主类(包名+类名),仅针对 java 或 scala 应用

--name

 应用程序的名称

--jars

 用逗号分隔的本地 jar 包,设置后,这些 jar 将包含在 driver 和 executor 的 classpath 下

--packages

 包含在driver 和executor 的 classpath 中的 jar 的 maven 坐标

--exclude-packages

 为了避免冲突 而指定不包含的 package

--repositories

 远程 repository

--conf PROP=VALUE

 指定 spark 配置属性的值,

例如 -conf spark.executor.extraJavaOptions="-XX:MaxPermSize=256m"

 


spark.executor.userClassPathFirst=true实验性)当在executor中加载类时,是否用户添加的jar比Spark自己的jar优先级高。这个属性可以降低Spark依赖和用户依赖的冲突。它现在还是一个实验性的特征。
spark.driver.userClassPathFirst=true实验性)当在driver中加载类时,是否用户添加的jar比Spark自己的jar, 优先级高。这个属性可以降低Spark依赖和用户依赖的冲突。它现在还是一个实验性的特征。


 

--properties-file

 加载的配置文件,默认为 conf/spark-defaults.conf

--driver-memory

 Driver内存,默认 1G

--driver-java-options

 传给 driver 的额外的 Java 选项

--driver-library-path

 传给 driver 的额外的库路径

--driver-class-path

 传给 driver 的额外的类路径

--driver-cores

 Driver 的核数,默认是1。在 yarn 或者 standalone 下使用

--executor-memory

 每个 executor 的内存,默认是1G

--total-executor-cores

 所有 executor 总共的核数。仅仅在 mesos 或者 standalone 下使用

--num-executors

 启动的 executor 数量。默认为2。在 yarn 下使用

--executor-cores

 每个 executor 的核数。在yarn或者standalone下使用

--files

用逗号隔开的文件列表,会放置在每个 executor 工作目录中

注意: 本人博客只提供参考,可能会有书写不规范情况等问题,不要复制粘贴。可结合其他网站学习