Spark
Spark 是加州大学伯克利分校 AMP(Algorithms,Machines,People)实验室开发的通用内存并行计算框架。
Spark 在 2013 年 6 月进入 Apache 成为孵化项目,8 个月后成为 Apache 顶级项目。
Spark 以其先进的设计理念,迅速成为社区的热门项目,围绕着 Spark 推出了 SparkSQL、SparkStreaming、MLlib 和 GraphX 等组件,逐渐形成大数据处理一站式解决平台。
Spark相对于Hadoop的优势
Hadoop的MapReduce虽然适合海量数据的处理,但是本身也有着不小的缺陷:
- MapReduce表达能力有限。MapReduce的计算都要转换成Map和Reduce两个操作,不适用于所有的计算场合。
- I/O开销成本大。MapReduce要求每个步骤间的数据都要序列化到磁盘,这使得运算的速度大幅降低,I/O开销成本大,不适合交互分析和机器学习。
- 计算延迟高。一些比较复杂的工作需要将多个MapReduce任务串行运行,这种需要等到前一个任务完全结束才能启动下一个任务的方式计算延迟太高。
Spark 是借鉴了 Hadoop MapReduce 技术发展而来的,继承了其分布式并行计算的优点并改进了 MapReduce 明显的缺陷。
Spark 使用 Scala 语言进行实现,它是一种面向对象的函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集。它具有运行速度快、易用性好、通用性强和随处运行等特点,具体优势如下。
- Spark提供了内存计算,可以将MapReduce必须写入磁盘的中间结果放到内存中。Spark通过支持有向无环图(DAG)的分布式并行计算的编程框架,减少了迭代过程中数据需要写入磁盘的需求,大大提高了计算效率。
- Spark 为我们提供了一个全面、统一的框架,用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求。
- Spark 的计算模式也属于 MapReduce 类型,但提供的操作不仅包括 Map 和 Reduce,还提供了包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort、PartionBy 等多种转换操作,以及 Count、Collect、Reduce、Lookup、Save 等行为操作。
- Spark 基于 DAG 的任务调度执行机制比 Hadoop MapReduce 的迭代执行机制更优越。
Spark 各个处理结点之间的通信模型不再像 Hadoop 一样只有 Shuffle 一种模式,程序开发者可以使用 DAG 开发复杂的多步数据管道,控制中间结果的存储、分区等。
Spark的适用场景
- 复杂的批量处理
偏重点是处理海量数据的能力,对处理速度可忍受,通常的时间可能是在数十分钟到数小时。 - 基于历史数据的交互式查询
通常的时间在数十秒到数十分钟之间。 - 基于实时数据流的数据处理
通常在数百毫秒到数秒之间。
参考:http://c.biancheng.net/view/3642.html