一. 运维
1. Master挂掉,standby重启也失效
Master默认使用512M内存,当集群中运行的任务特别多时,就会挂掉,原因是master会读取每个task的event log日志去生成Spark ui,内存不足自然会OOM,可以在master的运行日志中看到,通过HA启动的master自然也会因为这个原因失败。
解决
增加Master的内存占用,在Master节点spark-env.sh 中设置: export SPARK_DAEMON_MEMORY 10g # 根据你的实际情况
减少保存在Master内存中的作业信息 spark.ui.retainedJobs 500 # 默认都是1000
spark.ui.retainedStages 500
2. worker挂掉或假死
有时候我们还会在web ui中看到worker节点消失或处于dead状态,在该节点运行的任务则会报各种 lost worker 的错误,引发原因和上述大体相同,worker内存中保存了大量的ui信息导致gc时失去和master之间的心跳。
解决
增加Master的内存占用,在Worker节点spark-env.sh 中设置: export SPARK_DAEMON_MEMORY 2g # 根据你的实际情况
减少保存在Worker内存中的Driver,Executor信息 spark.worker.ui.retainedExecutors 200 # 默认都是1000
spark.worker.ui.retainedDrivers 200
二. 运行错误
1.shuffle FetchFailedException
错误提示
missing output location org.apache.spark.shuffle.MetadataFetchFailedException:
Missing an output location for shuffle 0
shuffle fetch faild org.apache.spark.shuffle.FetchFailedException:
Failed to connect to spark047215/192.168.47.215:50268
当前的配置为每个executor使用1core,5GRAM,启动了20个executor
解决
这种问题一般发生在有大量shuffle操作的时候,task不断的failed,然后又重执行,一直循环下去,直到application失败。
一般遇到这种问题提高executor内存即可,同时增加每个executor的cpu,这样不会减少task并行度。
spark.executor.memory 15G
spark.executor.cores 3
spark.cores.max 21
启动的execuote数量为:7个
execuoterNum = spark.cores.max/spark.executor.cores
每个executor的配置:
3core,15G RAM
消耗的内存资源为:105G RAM
15G*7=105G
可以发现使用的资源并没有提升,但是同样的任务原来的配置跑几个小时还在卡着,改了配置后几分钟就能完成。
2.Executor&Task Lost
错误提示
executor lost WARN TaskSetManager: Lost task 1.0 in stage 0.0 (TID 1, aa.local):
ExecutorLostFailure (executor lost)
task lost WARN TaskSetManager: Lost task 69.2 in stage 7.0 (TID 1145, 192.168.47.217):
java.io.IOException: Connection from /192.168.47.217:55483 closed