Spark与MapReduce的区别及Spark运行流程

一、Spark与MapReduce的区别

MapReduce简介:

MapReduce是hadoop中的一个计算框架,具体核心是将编程抽象为map和reduce两个方法,程序员只需要编写map和reduce两个方法的具体代码就可以完成一个分布式计算操作,大大的简化了开发的难度,使开发难度减小。同时MapReduce程序是基于分布式集群运行,所以可以处理大量的数据。

  1.   正是因为MapReduce把具体编程过程抽象为map和reduce两个过程,使程序开发难度降低,其实也限制了它的表达能力,使得MapReduce表达能力有限。
  2. 每一个map阶段结束后都需要将map的结果写入到hdfs上或则本地磁盘中,每一个reduce阶段都需要从远程拷贝map阶段输出的结果,作为reduce阶段的输入数据,所以磁盘IO开销较大。
  3. 因为MapReduce启动耗时也不小,并且每次map和reduce过程都要设计到对磁盘的读写,所以MapReduce程序的延迟性较高。
  4. 因为每次的map和reduce阶段都需要进行落盘,每次运行map或reduce过程中都需要从磁盘上去读取数据,所以这样的高延迟和高IO开销计算过程并不适合于迭代计算,使用MapReduce进行迭代计算将会非常的耗资源。

Spark中其实也借鉴了MapReduce的一些思想,但是在借鉴MapReduce的优点的同时,很好的解决了MapReduce所面临的问题。

相比于MapReduce,spark主要具有如下优点:

  1. Spark的计算模式也是输入MapReduce,但不局限于map和reduce操作,还提供了多种数据集操作类型,编程模型比MapReduce更加的灵活
  2. Spark提供了内存计算,可将中间结果放到内存中,不再像MapReduce那样,每一个map或reduce阶段完成后都进行落盘操作,对于迭代计算的效率更高。
  3. Spark基于DAG(有向无环图)的任务调度机制,要优于MapReduce的迭代机制
  4. Spark将数据载入内存中以后,之后的迭代计算都可以直接使用内存中的中间结果作运算,从而避免了从磁盘中频繁的读取数据,提高运行效率。

二、Spark的工作原理

Spark工作流程图如下:

  1. spark-submit 提交了应用程序的时候,提交spark应用的机器会通过反射的方式,创建和构造一个Driver进程,Driver进程执行Application程序,
  2. Driver根据sparkConf中的配置初始化SparkContext,在SparkContext初始化的过程中会启动DAGScheduler和taskScheduler
  3. taskSheduler通过后台进程,向Master注册Application,Master接到了Application的注册请求之后,会使用自己的资源调度算法,在spark集群的worker上,通知worker为application启动多个Executor。
  4. Executor会向taskScheduler反向注册。
  5. Driver完成SparkContext初始化
  6. application程序执行到Action时,就会创建Job。并且由DAGScheduler将Job划分多个Stage,每个Stage 由TaskSet 组成
  7. DAGScheduler将TaskSet提交给taskScheduler
  8. taskScheduler把TaskSet中的task依次提交给Executor
  9. Executor在接收到task之后,会使用taskRunner来封装task(TaskRuner主要将我们编写程序,也就是我们编写的算子和函数进行拷贝和反序列化),然后,从Executor的线程池中取出一个线程来执行task。就这样Spark的每个Stage被作为TaskSet提交给Executor执行,每个Task对应一个RDD的partition,执行我们的定义的算子和函数。直到所有操作执行完为止。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值