一、Spark是什么?
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,可用来构建大型的、低延迟的数据分析应用程序。
Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,
Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。
与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
二、Spark和Hadoop的关系
Spark是Hadoop MapReduce的一个替代品而不是Hadoop的替代品,其意图并非是替代Hadoop,而是为了提供一个管理不同的大数据用例和需求的全面且统一的解决方案
可以在 Hadoop 文件系统中并行运行,通过名为 Mesos 的第三方集群框架可以支持此行为。
1、Hadoop实现了分布式存储,并提供了MR算法
但Hadoop的MR算法偏底层,复杂数据处理过程中反复落盘,分步执行,降低了性能。
为了处理不同的大数据用例,还需要集成多种不同的工具(如用于机器学习的Mahout和流数据处理的Storm)
2、Spark只实现分布式计算,外接各种分布式存储,包括hadoop。
允许程序开发者使用有向无环图(DAG)开发复杂的多步数据管道,支持跨有向无环图的内存数据共享,以便不同的作业可以共同处理同一个数据
运行在现有的Hadoop分布式文件系统基础之上(HDFS)提供额外的增强功能,支持Hadoop v1集群或Hadoop v2 YARN集群甚至Apache Mesos。
Spark中间运算结果可以不落盘,同样复杂的业务逻辑处理更快一些。
Spark可以作为MapReduce的替代,架构在hdfs上。
3、Spark可以做流式处理
如果你需要对流数据进行分析,比如那些来自于工厂的传感器收集回来的数据,又或者说你的应用是需要多重数据处理的,那么你也许更应该使用Spark进行处理。
大部分机器学习算法都是需要多重数据处理的。
此外,通常会用到Spark的应用场景有以下方面:实时的市场活动,在线产品推荐,网络安全分析,机器日记监控等。
三、Spark的优点:
1、Spark为我们提供了一个全面、统一的框架用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理。
2、Spark可以将Hadoop集群中的应用在内存中的运行速度提升100倍,甚至能够将应用在磁盘上的运行速度提升10倍。
3、Spark让开发者可以快速的用Java、Scala或Python编写程序。它本身自带了一个超过80个高阶操作符集合。而且还可以用它在shell中以交互式地查询数据。
4、Spark 是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、流数据,机器学习和图表数据处理等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。
Spark 提供了大量的库,包括SQL、DataFrames、MLlib、GraphX、Spark Streaming。 开发者可以在同一个应用程序中无缝组合使用这些库。
开发者可以在一个数据管道用例中单独使用某一能力或者将这些能力结合在一起使用。
5、Spark 支持 Hadoop YARN,Apache Mesos,及其自带的独立集群管理器