🟠Spark的发展历史:Spark最初由美国加州伯克利大学(UCBerkeley)的AMP(Algorithms, Machines and People)实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。Spark在诞生之初属于研究性项目,其诸多核心理念均源自学术研究论文。2013年,Spark加入Apache孵化器项目后,开始获得迅猛的发展,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(即Hadoop、Spark、Storm)。
🟠 Spark的特点:
1️⃣运行速度快。Spark使用DAG(有向无环图)执行引擎支持循环数据流与内存计算,基于内存的执行速度可比Hadoop MapReduce快上百倍;而基于磁盘的执行速度也能快十倍。这是因为Spark处理数据时可以将中间处理结果数据存储到内存中,并且其Job调度以DAG方式进行,每个任务Task的执行为线程方式,而非MapReduce的进程方式执行。
2️⃣易用性高。Spark支持包括Scala、Java、Python和R语言在内的多种语言进行编程,简洁的API设计有助于用户轻松构建并行程序,并且提供了超过80种高级操作符。
3️⃣通用性强。Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件等,这些组件可以无缝整合在同一个应用中,足以应对复杂的计算场景。此外,它还可以用于批处理、交互式查询、实时流处理等不同类型的处理需求。
4️⃣运行模式多样。Spark可运行于独立的集群模式中,或者运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源。这使得Spark可以与其他的开源产品进行良好的融合,降低了使用的门槛。
5️⃣容错性高。Spark引进了弹性分布式数据集RDD的抽象,它是分布在一组节点中的只读对象集合,如果数据集一部分丢失,则可以根据“血统”对它们进行重建。另外,在RDD计算时可以通CheckPoint来实现容错。
6️⃣代码简洁。Spark支持Scala.python等语言编写代码。这两种语言相比Java较简洁。
🔴 Spark与MapReduce的区别
▶️spark与mapreduce的区别主要体现在以下几个方面:
1️⃣编程模型和API。Spark提供了丰富的API,包括Scala、Java、Python等,而MapReduce主要使用Java编程语言。Spark的API更加灵活和强大,适合于现代大数据处理的需要。
2️⃣数据处理方式。Spark将数据存储在内存中进行处理,而MapReduce将数据存储在磁盘上。Spark这种内存计算方式使得它在处理迭代计算和交互式查询等工作负载时通常比MapReduce更高效。
3️⃣容错性和持久性。Spark具有较高的容错性,它支持DAG图的分布式并行计算,并通过弹性分布式数据集(RDD)的概念来处理数据丢失的情况。4️⃣Spark还支持检查点机制,以实现计算过程中的容错。而MapReduce依赖于HDFS分布式存储框架来实现数据的分布式存储和处理。
5️⃣执行模型。Spark采用基于DAG有向无环图(DAG)的执行模型,可以合并多个任务为更少的阶段,减少磁盘读写开销,从而提高执行效率。而MapReduce的计算模型是批处理的,每次任务处理都需要从磁盘读取数据,处理完成后将结果写回磁盘。
6️⃣支持的数据类型。Spark支持处理结构化数据、半结构化数据和非结构化数据,而MapReduce主要用于处理结构化数据。
7️⃣扩展性和通用性。Spark具有更好的扩展性,可以方便地与其他数据处理框架和工具集成,而MapReduce通常需要与其他框架配合使用。
🟠综上所述,Spark在内存计算、迭代运算、容错性、执行模型、数据类型支持以及扩展性方面优于MapReduce,适合于现代大数据处理的需要。