图3.基于硬盘的100T数据排序对比实验
此外,众多实验表明,在处理迭代式应用上Spark比MapReduce快20多倍;计算数据分析类报表的性能提高了40多倍;Spark能够在5-7秒的延时内交互式扫描1TB数据集。
Spark运行速度如此之快,主要得益于以下两方面:一方面,Spark中的运算大多是基于内存的。Spark提出了一种分布式的内存抽象,称为弹性分布式数据集(RDD,Resilient
DistributedDatasets)。RDD支持基于工作集的应用,同时具有数据流模型的特点:自动容错、位置感知调度和可伸缩性。RDD允许用户在执行多个查询时显式地将工作集缓存在内存中,后续的查询能够重用工作集,这极大地提升了查询速度。另一方面,Spark从稳定的物理存储(如分布式文件系统)中加载记录,记录被传入由一组确定性操作构成的DAG,然后写回稳定存储。DAG数据流图能够在运行时自动实现任务调度和故障恢复。尽管非循环数据流是一种很强大的抽象方法,但仍然有些应用无法使用这种方式描述。Spark能够在多个并行操作之间重用工作数据集,适用于非循环数据流模型难以处理的应用。
特性二:易用
Spark编程非常高效、简洁,支持多种语言的API,如Java, Scala,
Python等,而且代码非常简洁。例如在基于MapReduce开发的WordCount示例程序中,用户需要重写Map类和Reduce类,虽然MapReduce类似八股文的程序编写模式极大地简化了并行程序开发过程,但是程序代码至少几十行。若基于Spark开发同样的WordCount程序,仅需下面短短的几行代