Spark是一个计算框架,是MapReduce的替代方案,而且兼容HDFS、Hive等分布式存储层,可以融入Hadoop生态系统,一笔不缺失MapReduce的不足。
Spark VS MapReduce
1. 中间输出结果
基于MapReduce的计算引擎通常会将中间结果输出到磁盘上,进行存储和容错。出于任务管道承接的考虑,当一些查询翻译到MapReduce任务时,往往会产生多个Stage,而这些串行的Stage又依赖于底层文件系统(如HDFS)来存储每一个Stage的输出结果。
Spark将执行模型抽象为通用的有向无环图执行计划(DAG),这可以将多个Stage的任务串联或并行执行,无须将Stage中间的结果输出到HDFS中。【类似的引擎包括Dryad、Tez】
2. 数据格式和内存布局
由于MapReduce Schema on Read处理方式会引起较大的处理开销。Spark抽象出分布式内存存储结构弹性分布式数据集RDD,进行数据的存储。RDD能支持粗粒度写操作,但对于读取操作,RDD可以精确到每一条记录,这使得RDD可以用来作为分布式索引。
Spark的特性是能够控制数据在不同节点上的分区,用户可以自定义分区策略,如Hash分区等。【Shark和Spark SQL在Spark的基础上实现了列存储和列存储压缩】
3. 执行策略