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的特点就是分区,容错,d性。。。
那么spark的task是在executor中执行的,task是并发的,也就是说我们给少了core可以触发并发,
但是executor是并行的,每个executor分布在不同的NM(yanr模式)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)