1、kill掉某个spark任务
yarn application -kill application_1610416974403_25645
2、 拉取某个spark运行日志的命令
yarn logs -applicationId application_1610416974403_25645 > log.txt # 将某个任务的日志打印出来
3、spark-submit提交脚本:
bin/spark-submit \
--class $class_path \
--master yarn \
--deploy-mode cluster \
--name "$job_name" \
--executor-memory 4g \
--driver-memory 3g \
--num-executors 50 \
--executor-cores 4 \
--queue $queue \
--conf spark.default.parallelism= 600 \
--conf spark.yarn.executor.memoryOverhead=4G \
--conf "spark.port.maxRetries=50" \
--conf "spark.driver.maxResultSize=$maxResultSize" \
--conf spark.executor.extraJavaOptions="-Dregion.name=TJ01 -Denv.name=prod" \
--driver-java-options "-Dregion.name=TJ01 -Denv.name=prod" \
$jar_file $job_param
或者
/data/lan/3.1.4.0-315/spark3/spark-3.2.2-bin-hadoop3.2/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--conf spark.executor.memory=5g \
--conf spark.driver.memory=4g \
--conf spark.executor.cores=2 \
--conf spark.app.name=mars_schedule_217106_202311221540 \
--conf spark.port.maxRetries=50 \
--conf spark.executor.instances=50 \
--conf spark.yarn.executor.memoryOverhead=4G \
--conf spark.executor.extraJavaOptions="-Dregion.name=TJ0100 -Denv.name=prod" \
--conf spark.driver.extraJavaOptions="-Dlog4j2.formatMsgNoLookups=true" \
--queue root.P3.vc \
--class com.main.Nemesis \
/data/vc/xxxxx-2.0.0-SNAPSHOT-jar-with-dependencies.jar hit_black_ua_rule
- spark.executor.instances=50 # executor的个数,一般50~100
- spark.executor.cores=4 #每个executor的核数,一般2~4
- spark.executor.memory=10g # 每个executor分配的内存数
- spark.driver.memory=5g # 一般是2-3g
- spark.main.class=xxx # main函数所在的类
- spark.default.parallelism=600 # 默认rdd的并行度,一般是spark.executor.cores*spark.executor.memory的2~3倍左右
- spark.yarn.executor.memoryOverhead=4G # executor执行的时候,用的内存可能会超过executor-memoy,所以会为executor额外预留一部分内存。spark.yarn.executor.memoryOverhead代表了这部分内存。
问题:
- 如果spark.executor.cores和spark.executor.instances都设置了,spark.default.parallelism还需要设置吗?
需要,因为spark.executor.cores和spark.executor.instances只是设置了可用的资源,如果你不设置parallelism,默认的task也就几十个,就白白浪费了你申请的资源;
也就是说你申请到了1w块钱,但是你不说你花多少,系统默认你花的很少,剩余的钱就浪费了,你应该是全部花光甚至超额花光,这样才是最划算 - spark.yarn.executor.memoryOverhead 是必要的吗?
必要,防止内存溢出的风险;
这个参数如果没有设置,默认会有一个自动计算公式max(X*0.1,384) X是executorMemory - 一般说的并行度指的是?
对于spark,并行度就是数据的并行度
对于flink,并行度就是slot,就是最大算子的并行度 - spark的运行单元是task, 资源分配单元是executor
- task的数量是跟rdd的分区数是相关的,是跟并行度是一致的
- application并行度是executor总核数
spark.executor.cores*spark.executor.memory
的2~3倍,一般说的并行度就是数据的并行度