Spark简介
Spark是基于内存计算的大数据并行计算框架。Spark于2009年诞生于加州大学伯克利分校AMPLab。目前,已经成为Apache软件基金 会旗下的顶级开源项目。Spark是相对于MapReduce上的批量计算、迭代型计算以及基于Hive的SQL查询的上百倍。
spark发展
·2009年:在加州大学伯克利分校AMPLab诞生。 ·2010年:开始开源。 ·2013年6月:成为Apache孵化器项目。 ·2014年2月:Apache顶级项目。 ·2014年2月:大数据公司Cloudera宣称加大Spark框架的投入来取代MapReduce。 ·2014年4月:大数据公司MapR投入Spark阵营,Apache Mahout放弃MapReduce,将使用Spark作为计算引擎。 ·2014年5月:Pivotal Hadoop集成Spark全栈。 ·2014年5月30日:Spark 1.0.0发布。 ·2014年6月:Spark 2014峰会在旧金山召开。 ·2014年7月:Hive on Spark项目启动。
Spark生态
Spark Core
包含任务调度、内存管理、错误恢复、与存储系统交互等模块,实现了Spark 的基本功能。还包含了对弹性分布式数据集(resilient distributed dataset,简称RDD)的API 定义。
Spark SQL
Spark SQL 是Spark 用来操作结构化数据的程序包。Spark SQL 支持多种数据源:Hive 表、Parquet 以及JSON 等。Spark SQL 还支 持开发者将SQL 和传统的RDD 编程的数据操作方式相结合。
Spark Streaming
Spark Streaming 是Spark 提供的对实时数据进行流式计算的组件。Spark Streaming 提供了用来操作数据流的API,并且与Spark Core 中的RDD API 高度对应
MLlib
MLlib是spark中一个提供常见的机器学习(ML)功能的程序库,MLlib 提供了很多种机器学习算法。
GraphX
GraphX 是用来操作图(比如社交网络的朋友关系图)的程序库,可以进行并行的图计算。
Spark优势
支持计算场景多
Spark支持复杂的计算,除了‘map’和reduce简单算子之外还有其他多种复杂的算子,更是支持sql查询,机器学习,流计算,以及图计算。
容易上手,支持多种语言
可发人员可以通过java,scala,python语言环境下来开发,Spark支持这些语言的开发,同时可以在shall中进行交互计算,查看自己想要的结果。
社区活跃度高
因其优秀的性能,已经被各个大公司所广泛应用,Yahoo、Twitter、阿里巴巴、百度、网易、英特尔等公司的生产环境中均使用了Spark。
支持多种文件系统的计算
与hadoop框架高度结合,可以读取已有的任何Hadoop数据,可以运行在hadoop数据源上,比如Hive、HBase、HDFS等等。还可以支持本地文本文件系统,以及内存中自定义的数据。Hadoop 并非Spark 的必要条件,Spark 支持任何实现了Hadoop 接口的存储系统。
可融合性强
spark可以非常方便的与其他大数据产品进行融合,可以使用hadoop的yarn或者apache mesos来进行任务调度。并且可以支持hadoop支持的所有的数据。
相对于mapreduce的优势
速度快
与Hadoop的MapReduce相比,spark基于内存上的速度要快100倍以上,基于磁盘上的速度也要快10倍以上。
中间输出结果优势
MapReduce的计算引擎通常会将中间结果的数据存入到磁盘中,Hive sql翻译成的MapReduce任务时候会有多个stage,而这些相互依赖的关联的stage之间的数据会存在所依赖的底层存储系统HDFS上。Spark会将对应的任务模型抽象为通用的有向无环图(DAG),对应的中间输出结果会直接存在内存中,而不是HDFS上,以此来加快运算的速度。 Map中间结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据; 任务调度和启动开销大;而Spark内存计算引擎,提供Cache机制来支持需要反复迭代计算或者多次数据共享,减少数据读取的IO开销
执行方式策略
MapReduce在数据Shuffle之前花费了大量的时间来排序,这个排序在许多场景下是不必要的,Spark可以避免这个排序带来的额外的开销。MapReduce不适合迭代计算(如机器学习、图计算等),交互式处理(数据挖掘) 和流式处理(点击日志分析),而Spark使用多线程池模型来减少task启动开稍,shuffle过程中避免 不必要的sort操作以及减少磁盘IO操作。
开发效率
MapReduce仅支持Map和Reduce两种操作而Spark有丰富的算子提供。而且MapReduce编程不够灵活,而Spark提供丰富的API,支持Java,Scala,Python和R四种语言且代码量比MapReduce少2~5倍。
|