https://blog.csdn.net/guohecang/article/details/52088117 Spark配置参数详解
一.yarn模式下一个示例:
./bin/spark-submit \ --master yarn-cluster \ --num-executors 100 \ --executor-memory 6G \ --executor-cores 4 \ --driver-memory 1G \ --conf spark.default.parallelism=1000 \ --conf spark.storage.memoryFraction=0.5 \ --conf spark.shuffle.memoryFraction=0.3 \
二.参数说明:
1.在公司使用最多的 spark on yarn模式
2.num-executors:
①用于设置Spark作业要用多少个Executor进程来执行.
②Driver在向YARN集群管理器申请资源时会按照这个设置来在集群的各个工作节点上启动相应数量的Executor进程,过大浪费,过小导致任务运行速度慢或者无法启动
3.executor-cores:
①用于设置Executor进程的CPU core数量.这个参数决定了每个Executor进程并行执行task线程的能力.因为每个CPU core同一时间只能执行一个task线程,因此每个Executor进程的CPU core数量越多,越能够快速地执行完分配给自己的所有task线程
②
4.driver-memory:
①用于设置Driver进程的内存
②如果需要使用collect算子将RDD的数据全部拉取到Driver上进行处理,那么必须确保Driver的内存足够大,否则会出现OOM内存溢出的问题
5.spark.default.parallelism:
①用于设置stage的默认task数量
②建议设置该参数为num-executors * executor-cores的2~3倍
6.spark.storage.memoryFraction:
①用于设置RDD持久化数据在Executor内存中能占的比例,默认是0.6
②如果Spark作业中,有较多的RDD持久化操作,值适当提高一些,保证持久化的数据能够容纳在内存中。避免内存不够缓存所有的数据,导致数据只能写入磁盘中,降低了性能
7.spark.shuffle.memoryFraction:
①用于设置shuffle过程中一个task拉取到上个stage的task的输出后,进行聚合操作时能够使用的Executor内存的比例,默认是0.2
②shuffle操作在进行聚合时,如果发现使用的内存超出了这个值(默认20%)的限制,那么多余的数据就会溢写到磁盘文件中去,此时就会极大地降低性能
三.示例:
source /test1/test2/test.sh source $localroot/scripts/$config appPid=0 start_process(){ spark-submit --master yarn-cluster \ --name apple.banana\ --principal $principal \ --keytab $keytab \ --num-executors 4 \ --executor-cores 2 \ --executor-memory 8G \ --driver-memory 8G \ --conf spark.locality.wait=10 \ --conf spark.kryoserializer.buffer.max=500MB \ --conf spark.serializer="org.apache.spark.serializer.KryoSerializer" \ --conf spark.streaming.backpressure.enabled=true \ --conf spark.task.maxFailures=8 \ --conf spark.streaming.kafka.maxRatePerPartition=1000 \ --conf spark.driver.maxResultSize=5g \ --conf spark.driver.extraClassPath=$localroot/config \ --conf spark.executor.userClassPathFirst=true \ --conf spark.yarn.executor.memoryOverhead=4g \ --conf spark.executor.extraJavaOptions="test" \ --conf spark.yarn.cluster.driver.extraJavaOptions="test" \ --files $localroot/config/test.properties,\ $localroot/config/test1.txt,\ $localroot/config/test2.txt,\ $localroot/config/test3.txt \ --class com.peanut.test \ --jars $SPARK_HOME/jars/streamingClient010/kafka_2.10-0.10.0.0.jar,\ $SPARK_HOME/jars/streamingClient010/kafka-clients-0.10.0.0.jar,\ $SPARK_HOME/jars/streamingClient010/spark-streaming-kafka-0-10_2.11-2.1.0.jar,\ $localroot/lib/test1.jar,\ $localroot/lib/test2.jar,\ $localroot/lib/test3.jar \ $jarpath \ $args1 \ $args2 \ $args3 & appPid=$! } start_process echo "pid is" echo $appPid exit