Spark简介
Spark是加州大学伯克利分校AMP实验室开发的大数据处理框架。Spark生态系统也被成为BDAS,力图在算法、机器、人三者之间通过大规模数据集成来展现大数据应用的一个开源平台。Spark在2013年6月进入Apache成为孵化项目,8个月或就成为Apache的顶级项目,围绕Spark推出了Spark SQL、Spark Streaming、MLlib、GraphX、SparkR等组件。(看起来想直接取代Hadoop的地位)。
Spark使用Scala语言实现。具有运行速度快、易用性好(支持多种语言)、通用性强(拥有各种组件)和随处运行(适应Hadoop、Cassandra、Hbase、S3和Tachyon)等特点。
拥有四种运行模式
- local模式
- standalone,使用spark自带的资源调度框架。
- yarn,最流行的方式,使用yarn调度
- mesos,国外用的多。
Spark比MapReduce快的原因
- spark基于内存迭代,MapReduce基于磁盘迭代。
- DAG计算模型在迭代计算上比MR有效率。
- Spark是粗粒度的资源调度,MR是细粒度的资源调度。
DAG在spark中任务调度详解
一般而言DAG会比MR在大多数情况下减少shuffle次数。如果不涉及与其他节点的数据交换,spark可以在内存中一次完成操作,也就是中间不需要落盘,减少的IO操作。
但是,如果计算中涉及到了数据交换,spark也会把shuffer的数据写进磁盘。大部分人认为spark是基于内存的计算,所以快。其实这不是主要原因。涉及到计算必然会加载数据进内存。Hadoop也如此。只不过Spark支持将反复计算的数据给Cache到内存中,减少加载耗时。所以对于需要类似迭代的算法比较在行。当然spark基于磁盘预算也比Hadoop快。因为DAG的关系,spark天生适合做批处理任务。
Spark生态系统:
Spark生态系统以Spark Core为核心,能读取各种类型的文件,利用Standalone、YARN和Mesos等资源调度管理。Spark shell和Spark submit交互式批处理、Spark Streaming实时流处理应用、Spark SQL的即时查询、采样近似查询引擎BlinkDB的权衡查询、MLbase/MLlib的机器学习、GraphX的图处理、SparkR的数学计算等等。