Spark的一个经典问题(1个Core5个Executor和5个Core1个Executor有什么区别)

Spark的一个经典问题(1个Core5个Executor和5个Core1个Executor有什么区别)

一、问题分析

1.1先思考两个问题

1个Core VS 5个Core 有什么区别?在spark中如何用到Core

1个Executor VS 5个Executor 有什么区别?在spark中如何使用Executor?

1.2再思考两个问题

什么是IO密集?

什么是计算密集?

二、上述两种方式 如何选择

案例1

数据量10亿条,什么逻辑运算都不做处理,只是写到hdfs中,该选择哪种方式?

逻辑运算很少,说明不需要很多的Core,但是数据量很大,要写到hdfs中,io就成为了本案例的瓶颈,这种场景属于IO密集

那么就应该选择 1个core5个executor

这里举一个形象的例子,一个牧羊人把十万只羊赶到10公里外的羊圈,一次可以赶1万只,要赶十次,如果牧羊人可以一次赶十个一万只(十万只),那么就需要赶一次!

案例2

数据量1千条,逻辑运算超级复杂,该选择哪种方式?

逻辑运算超级复杂,如果想要加快计算,那么就需要更多的资源,cpu就成了本案例的瓶颈,这种场景属于计算密集

那么就应该选择1个core5个executor

这里举一个形象的例子,一个牧羊人给十万只羊剪羊毛,十万个牧羊人给十万只羊剪羊毛

三、从Spark任务提交流程说起

我们提交spark任务的时候一般是:

spark-submit 
--master yarn 
--deploy-mode cluster 
--class com.leqee.sparkstream.stream.DMLStreaming 
--driver-cores 1 
--driver-memory 1G 
--num-executors 2 
--executor-cores 3 
--executor-memory 4G 
--name StreamA
--queue stream 
--conf "spark.executor.memoryOverhead=2G" 
xxx.jar

那么这里面我们就要明确几个参数

executor-cores 这个是每个executor申请的core

num-executor 这个任务一共申请的executor个数

四、涉及到的RDD原理

根据上述有一个问题

那么我们的task哪里去了?

spark 中task是根据分区来决定的,那么分区是怎么来的呢?

RDD的特点就是分区,容错,弹性。。。

那么spark的task是在executor中执行的,task是并发的,也就是说我们给少了core可以触发并发,

但是executor是并行的,每个executor分布在不同的NM(yanr模式)

上一篇:Windows 下 MySQL 简单定时自动备份、删除过期备份


下一篇:explorer.exe占用CPU100%