spark运⾏内存异常及参数调整
主要异常信息:org.apache.spark.shuffle.MetadataFetchFailedException: Missing an output location for shuffle 0
解决⽅法:加⼤executor内存,减少executor个数,加⼤executor并发度
主要异常信息:ExecutorLostFailure (executor 3 exited caused by one of the running tasks) Reason: Container killed by YARN for exceeding memory limits. 61.0 GB of 61 GB physical memory used
解决⽅法:移除RDD缓存操作,增加该JOB的Fraction系数值,增加该job的
Overhead值
下⾯解释执⾏⼀次提交参数的解释
spark-shell --master yarn --driver-memory 5G --executor-cores 1 --queue test --num-executors 13
exited就好⽐我这个在yarn上边跑的任务:
driver是5G,这个没什么说的。
executor-cores 1 表⽰⼀个executor使⽤使⽤1个核的cpu
num-executors 13 表⽰我集开13个executor
也就是最终要占⽤14个核,因为driver也要占⼀个。
计算内存呢,⽤yarn管理的l上设置⼀个容器设置的5G内存:所以我的计算内存是executor数乘以每个容器的内存⼤⼩,也就是13*5=65G计算内存
每个节点可以起⼀个或多个Executor。
每个Executor由若⼲core组成,每个Executor的每个core⼀次只能执⾏⼀个Task。
每个Task执⾏的结果就是⽣成了⽬标RDD的⼀个partiton。
Task被执⾏的并发度 = Executor数⽬ * 每个Executor核数
⾄于partition的数⽬:
对于数据读⼊阶段,例如sc.textFile,输⼊⽂件被划分为多少InputSplit就会需要多少初始Task。
在Map阶段partition数⽬保持不变。
在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数⽬跟具体操作有关,例如repartition操作会聚合成指定分区数,还有⼀些算⼦是可配置的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论