前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spark VS MapReduce 浅谈

Spark VS MapReduce 浅谈

作者头像
solve
发布2019-12-26 17:33:56
3780
发布2019-12-26 17:33:56
举报
文章被收录于专栏:大数据技术栈大数据技术栈

计算速度

计算的速度是取决于计算机本身的计算能力的。 并且目前来看,所有的计算机计算都是基于内存的(如果有不是的,请原谅我的孤陋寡闻...), 也就是说 MR 和 Spark 是没有区别的。

Shuffle

我们都知道,不管是Spark 还是 MR, 其理论依据都是 一篇名为 MapReduce 的论文 那么对于 Map 和 Reduce 两个阶段,其都是会产生 Shuffle 的, 而Shuffle会使得数据落地到磁盘, 相比于内存计算,磁盘的读写一般是要慢很多的, 当然不要抬杠说一些非常复杂的计算逻辑噢~~~ 所以 Shuffle 也是影响速度的一个重要因素

Shuffle 方式或者说算法,其实二者差别也不大, 因为理论依据一样,所以理论上, 二者在这一块基本不会拉开差距,

计算模型

上面说了看似废话的两点, 但是还是得要说明,防止一些先入为主的错误观念。 那就是Spark的计算模型 DAG, 下面我们以Spark的视角来看DAG的优势。

编程更简单方便

因为DAG的存在, 是的 Spark 编程比MR方便快捷, 也更加的简单了, 在我看来这也是从MR转Spark的一个非常重要的一点, 谁也不会否认,用了Spark,真的不想再去编程MR了。

具体更好的控制力

因为DAG的存在, 使得我们可以把 各种业务 任意组合, 好处是显而易见的:

  • 业务上的任务更加清晰了, 维护成本更低了, 而 MR 则是一个一个的Job,完全是分开的, 要维护一个正常的业务开发, 那是真的不那么简单,
  • 而对于Spark而言, 因为任务都是在一个 Application 里面, 所以在计算方面,资源分配方面, 都有了更大的可操作空间, 比如说:Cache 算子的出现, 如果没有DAG,你根本无法使用类似这样的算子。 而MR要做类似Cache之类的优化是非常困难的, 当然,这里可以说,虽然难, 如果你是大佬,你也是可以进行优化的, 优化的效果,理论上也是可以让二者在运行速度上没差, 但是我估计,没人会愿意去做这种吃力吃力才讨好的事情吧。
  • Shuffle的次数会更少, 还是是因为任务都是在一个 Application 里面, Spark很容易可以根据任务流来进行Shuffle的规划, 而MR则完全依赖于用户, 这就导致MR的不可控, 虽然如果你是一个优秀的开发者, 噢~不是,应该是大神的开发者, 你也可以优化的没有一丝差异。

这里先额外提一句就是: 如果是团队开发,那队友都是水平参差不齐的, 很难做好优化工作, 就算是一个大神开发, 因为业务的多变,不当维护很难, 面对一些场景,可能不得不舍弃一些优化, 所以,不要想着MR能做到和Spark一样的水平, 那只是理想的国度,基本不存在的。

资源调度

这里不得不提一下的是: MR的资源调度是细粒度调度的, 也就是说,他每个Job都要经历一次资源的申请到释放, 并且其执行的 Task 任务也是基于JVM 进程的。

而Sarpk则是粗粒度的资源调度, 其一个Application 只会进行一次资源申请, 在没有执行完所有任务,他是不会释放资源的, 并且其Task执行是基于更加轻量级的线程, 当我们处理数据的Task很多的时候, 这个节省的时间也是不可忽视的。

结束语

该文其实主要是以 DAG计算模型为主, 这也是在笔者看来Spark对于MR最重要的改变, 因为DAG的存在才有后来各种各样比MR高效的优化, 这里可能挖的其实还不够深, 如果有兴趣,欢迎你来进行补充和讨论。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 计算速度
  • Shuffle
  • 计算模型
    • 编程更简单方便
      • 具体更好的控制力
        • 资源调度
        • 结束语
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档