zoukankan      html  css  js  c++  java
  • 大数据软件比较MapReduce和Spark

    大数据软件比较

    分布式的简单理解

    在分布式系统出现之前,只有通过不断增加单个处理机的频率和性能来缩短数据的处理时间,分布式则将一个复杂的问题切割成很多的子任务,分布到多台机器上并行处理,在保证系统稳定性的同时,最大限度提高系统的运行速度。

    MapReduce

    模型整体分析

    关于MapReduce的内容参照即将发布的博文MapReduce
    将大规模数据处理作业拆分成多个可独立运行的Map任务,分布到多个处理机上进行运行,通过shuffle机制处理并产生一定的中间结果,在通过Reduce任务混洗合并产生最终的输出文件。

    优势与不足分析

    优势分析:

    1. MapReduce编程模型使得任务执行和任务通信之间变得简单且规范,实现任务并行化,扩展性良好;
    2. 每次Map操作之后,产生的中间结果会保存在磁盘上,不会永久的留在内存中,这样减少内存的消耗,避免了内存溢出带来的数据丢失,同时可以更好的容错;
      但是这种设计会产生一定的缺点:
      一些不适合使用Map和Reduce操作来完成的问题,如处理图或者网络问题时,这些数据结构包含着各种隐性的关系:图的边、子树、节点之间的父子关系、权重等,而这些关系很难被分解为键值对在一次计算中完全表示,同时各任务依赖关系比较复杂时,会产生为了适应该处理模型对任务分解造成效率降低的情况。
      另外MapReduce的明显不足:
    3. 为了保证较好的扩展性,MapReduce任务之间相互独立,互不干扰,造成的后果是产生了大量的中间结果(这些结果保存在磁盘上)需要通过网络传输,占用网络资源,为了保证容错,所有的中间结果都保存在了磁盘上(Spark正是解决了此类问题从而提高了特定场景的效率),效率不高;2. 在MapReduce中只有等待所有的(可能在Map任务完成到一定阈值则可以开始启动Reduce任务,有待说明)Map任务结束后,Reduce任务才能进行计算,异步性差,导致资源利用率低。

    Spark

    关于Spark的内容参照即将发布的博文Spark

    计算算法

    Spark 是一种基于内存的开源计算框架,在 Spark 中,核心抽象概念就是弹性分布式数据集RDD(resilient distributed datasets) ,该抽象是分布在集群上的只读型可恢复数据集.用户可以利用 Spark 中的转换(transformation)和动作(action)对其进行操作,也可以长期保存在内存中不被回收,这样,再次使用这部分内容时,不需要再次创建此 RDD.这也是 Spark 在迭代问题中的性能表现要高于 MapReduce 的原因.RDD 通过一种血统(lineage)关系来完成容错:如果一个 RDD 丢失,那么这个丢失的RDD有充足的信息知道自己是如何从其他RDD转换而来的,这样便可以通过再次计算得到丢失的RDD.Spark 是由 Scala 语言实现的,而 Scala 是一种基于 JVM 的函数式编程语言,提供了类似DryadLINQ的编程接口.同时,Spark 还通过修改版的 Scala 解释器提供交互式编程,用户可以自由定义集群中的 RDD、函数、变量以及类.

    应用场景

    在处理迭代问题以及一些低延时问题时,Spark性能要优于MapReduce,而且在MapReduce之上做了很多改进与优化,使得在处理机器学习、图算法等迭代问题时,具有明显的优势。
    具体应用场景:
    .1. 迭代式算法:很多迭代式算法都会对相同的数据进行重复计算从而得到最优解.MapReduce 计算框架把每次迭代划分成一个或多个 MapReduce 作业(job),而每次迭代都要从磁盘重新加载数据,导致系统效率不高;而 Spark 可以把需要重复计算的数据缓存到内存中加快计算效率;
    .2. 交互式数据分析:用户经常会用 SQL 对大数据集合做临时查询(ad-hoc query).Hive 把每次查询都当作一个独立的 MapReduce 作业,并且从磁盘加载数据,有很大的延迟;而 Spark 可以把数据加载到内存中,然后重复的查询;
    .3. 流应用:即需要实时处理的应用,这类应用往往需要低延迟、高效率.

    不足之处

    Spark数据规模过大或内存不足时,会出现性能降低、数据丢失需要进行重复计算等缺点。

    MapReduce和Spark对比总结

    处理非迭代问题(如WordCount问题)时,MapReduce凭借自身的任务调度策略和shuffle机制,在中间数据传输数量以及文件数目方面性能优于Spark;
    处理迭代问题(如PageRank问题)和一些低延迟问题时,Spark可以根据数据之间的依赖关系对任务进行合理的划分,相比于MapReduce有效的减少了中间数据传输数量和同步的次数,提高了系统的运行效率。

    参考文献

    吴信东,嵇圣硙.:MapReduce 与 Spark 用于大数据分析之比较[J].软件学报,2018,29(6):1770-1791.

    本人计算机小白一枚,对编程有浓厚兴趣,在此贴出自己的计算机学习历程,还有很多不足,望多多指教! 读书后发现好多的内容与具体专业有偏差,没来得及完成,虽然“有时间我就会做...”是人生最大的谎言,但有时间我会继续搞定未完成的内容,有始有终,兴趣使然!
  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/Robin5/p/11641545.html
Copyright © 2011-2022 走看看