spark executor
Executor是spark任务(task)的执行单元,运行在worker上,但是不等同于worker,实际上它是一组计算资源(cpu me核心、memory)的集合。
一个worker上的memory、cpu由多个executor共同分摊。
![大数据sparkexecutor解析,第2张 大数据sparkexecutor解析,第2张](https://pic.zhixinnet.cn/2019/5/NVjU7f.png)
spark.executor.cores:顾名思义这个参数是用来指定executor的cpu内核个数,分配更多的内核意味着executor并发能力越强,能够同时执行更多的task
![大数据sparkexecutor解析,第3张 大数据sparkexecutor解析,第3张](https://pic.zhixinnet.cn/2019/5/Nz2YVb.png)
spark.cores.max:为一个application分配的最大cpu核心数,如果没有设置这个值默认为spark.deploy.defaultCores
![大数据sparkexecutor解析,第4张 大数据sparkexecutor解析,第4张](https://pic.zhixinnet.cn/2019/5/fQRfQ3.png)
spark.executor.memory:配置executor内存大小
![大数据sparkexecutor解析,第5张 大数据sparkexecutor解析,第5张](https://pic.zhixinnet.cn/2019/5/B3qium.png)
在使用过程中总结如下规律:
executor个数 = spark.max.cores / spark.executor.cores,集群的executor个数由spark.max.cores、spark.executor.cores共同决定,注意在standalone、mesos coarse-grained模式 下cores不要大于对应节点的内核数要保证每个worker上启动的executor均衡。
如果不均衡的话会造成数据倾斜,拉慢任务的整体速 度。
在运行过程中一个stask对应一个partition,配置不均衡,会导致每个节点处理的任务量不一样,因此会产生短板效应。
如果运行过程中发现GC时间变红(管理界面可以看到),应该适当调大spark.executor.memory。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)