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.

    本人计算机小白一枚,对编程有浓厚兴趣,在此贴出自己的计算机学习历程,还有很多不足,望多多指教! 读书后发现好多的内容与具体专业有偏差,没来得及完成,虽然“有时间我就会做...”是人生最大的谎言,但有时间我会继续搞定未完成的内容,有始有终,兴趣使然!
  • 相关阅读:
    进程池和线程池
    GIL和互斥锁
    GIL全局解释器锁
    线程锁
    关于迭代器的一些总结
    python在linux上的GUI无法弹出界面
    import Tkinter的时候报错
    检查字符串中的结束标记
    关于模块的使用
    python中pip的安装
  • 原文地址:https://www.cnblogs.com/Robin5/p/11641545.html
Copyright © 2011-2022 走看看