zoukankan      html  css  js  c++  java
  • Spark的优势

    首先了解一下Mapreduce

    它最本质的两个过程就是Map和Reduce,Map的应用在于我们需要数据一对一的元素的映射转换,比如说进行截取,进行过滤,或者任何的转换操作,这些一对一的元素转换就称作是Map;Reduce主要就是元素的聚合,就是多个元素对一个元素的聚合,比如求Sum等,这就是Reduce。
    Mapreduce是Hadoop1.0的核心,Spark出现慢慢替代Mapreduce。那么为什么Mapreduce还在被使用呢?因为有很多现有的应用还依赖于它,它不是一个独立的存在,已经成为其他生态不可替代的部分,比如pig,hive等。
    尽管MapReduce极大的简化了大数据分析,但是随着大数据需求和使用模式的扩大,用户的需求也越来越多:
    1.    更复杂的多重处理需求(比如迭代计算, ML, Graph);
    2.    低延迟的交互式查询需求(比如ad-hoc query)
    而MapReduce计算模型的架构导致上述两类应用先天缓慢,用户迫切需要一种更快的计算模型,来补充MapReduce的先天不足。


        Spark的出现就弥补了这些不足,我们来了解一些Spark的优势:
    1.每一个作业独立调度,可以把所有的作业做一个图进行调度,各个作业之间相互依赖,在调度过程中一起调度,速度快。
    2.所有过程都基于内存,所以通常也将Spark称作是基于内存的迭代式运算框架。
    3.spark提供了更丰富的算子,让操作更方便。
    4.更容易的API:支持Python,Scala和Java
    其实spark里面也可以实现Mapreduce,但是这里它并不是算法,只是提供了map阶段和reduce阶段,但是在两个阶段提供了很多算法。如Map阶段的map, flatMap, filter, keyBy,Reduce阶段的reduceByKey, sortByKey, mean, gourpBy, sort等。

    为什么Spark比Map Reduced运算速度快???

    这个问题包含了很多元素在里面

    个人观点:Spark计算比MapReduce快的根本原因在于DAG计算模型。一般而言,DAG相比Hadoop的MapReduce在大多数情况下可以减少shuffle次数。

    Hadoop每次计算的结果都要保存到hdfs,然后每次计算都需要从hdfs上读书数据,磁盘上的I/O开销比较大。
    spark一次读取数据缓存在内存中,内存的数据读取比磁盘数据读取快很多。还有一点就是spark的RDD数据结构,RDD在每次transformation后并不立即执行,而且action后才执行,有进一步减少了I/O操作。
    所以spark比Hadoop运行要快,尤其是对于需要迭代的程序。

  • 相关阅读:
    HashMap源码学习
    java线程池
    MySQL的MVCC
    volatile关键字学习
    ArrayList, Vector和CopyOnWriteArrayList对比学习
    曹工说Redis源码(3)-- redis server 启动过程完整解析(中)
    曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充
    曹工杂谈:我们的应用,启动就要去其他服务拉数据,那其他服务挂了,我们就起不来了?
    程序员正确的提问方式(个人建议)
    曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果
  • 原文地址:https://www.cnblogs.com/beiyi888/p/9800718.html
Copyright © 2011-2022 走看看