Spark于2009年诞生于美国加州大学伯克利分校的AMP实验室,它是一个可应用于大规模数据处理的统一分析引擎。Spark不仅计算速度快,而且内置了丰富的API,使得我们能够更加容易编写程序。
Spark在2013年加入Apache孵化器项目,之后获得迅猛的发展,并于2014年正式成为Apache软件基金会的顶级项目。Spark生态系统已经发展成为一个可应用于大规模数据处理的统一分析引擎,它是基于内存计算的大数据并行计算框架,适用于各种各样的分布式平台的系统。在Spark生态圈中包含了Spark SQL、Spark Streaming、GraphX、MLlib等组件。如下图所示:
Spark Core
Spark核心组件,实现了Spark的基本功能,包含任务调度、内存管理、错误恢复、与存储系统交互等模块。Spark Core中还包含对弹性分布式数据集的API定义。
Spark SQL
用来操作结构化数据的核心组件,通过Spark SQL可直接查询Hive、HBase等多种外部数据源中的数据。Spark SQL的重要特点是能够统一处理关系表和RDD。
Spark Streaming
Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理,其核心原理是将流数据分解成一系列短小的批处理作业。
MLlib
Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能。
GraphX
Spark提供的分布式图处理框架,拥有对图计算和图挖掘算法的API接口及丰富的功能和运算符,便于对分布式图处理的需求,能在海量数据上运行复杂的图算法。
独立调度器、Yarn、Mesos
集群管理器,负责Spark框架高效地在一个到数千个节点之间进行伸缩计算的资源管理。
Spark计算框架在处理数据时,所有的中间数据都保存在内存中,从而减少磁盘读写操作,提高框架计算效率。同时Spark还兼容HDFS、Hive,可以很好地与Hadoop系统融合,从而弥补MapReduce高延迟的性能缺点。所以说,Spark是一个更加快速、高效的大数据计算平台。
速度快
根据官方数据统计得出,Spark的运行速度比Hadoop要快的多,并且Spark实现了高效的DAG执行引擎。
易用性
Spark编程支持Java、Python、Scala或R语言,并且还拥有超过80种的高级算法,除此之前,Spark还支持交互式的Shell操作。
通用性
Spark提供了统一的解决方案,适用于批处理、交互式查询(Spark SQL)、实例流处理(Spark Streaming)、机器学习(Spark MLlib)和图计算(GraphX)。
兼容性
Spark可以运行在Hadoop模式、Mesos模式、Standalone独立模式或Cloud中,并且还可以访问各种数据源,包括本地文件系统、HDFS、Cassandra、HBase和Hive等。
数据科学
数据工程师可以利用Spark进行数据分析与建模,由于Spark具有良好的易用性,数据工程师只需要具备一定的SQL语言基础、统计学、机器学习等方面的经验,以及使用Python、Matlab或者R语言的基础编程能力,就可以使用Spark进行上述工作。
数据处理
大数据工程师将Spark技术应用于广告、报表、推荐系统等业务中,在广告业务中,利用Spark系统进行应用分析、效果分析、定向优化等业务,在推荐系统业务中,利用Spark内置机器学习算法训练模型数据,进行个性化推荐及热点点击分析等业务。
Spark拥有完整而强大的技术栈,如今已吸引了国内外各大公司的研发与使用,淘宝技术团队使用Spark来解决多次迭代的机器学习算法、高计算复杂度的算法等,应用于商品推荐、社区发现等功能。
腾讯大数据精准推荐借助Spark快速迭代的优势,实现了在"数据实时采集、算法实时训练、系统实时预测”的全流程实时并行高维算法,最终成功应用于广点通投放系统上。
优酷土豆则将Spark应用于视频推荐(图计算)、广告等业务的研发与拓展,相信在将来,Spark会在更多的应用场景中发挥重要作用。
从上图可以看出,使用Hadoop MapReduce进行计算时,每次计算产生的中间结果都需要从磁盘中读取并写入,大大增加了磁盘的I/O开销。
而使用Spark进行计算时,需要先将磁盘中的数据读取到内存中,产生的数据不再写入磁盘,直接在内存中迭代处理,这样就避免了从磁盘中频繁读取数据造成的不必要开销。通过官方计算测试,Hadoop与Spark执行逻辑回归所需的时间对比,如下图所示:
从上图可以看出,Hadoop与Spark执行的所需时间相差超过100倍。
转载自:https://blog.csdn.net/u014727709/article/details/132173322
欢迎 点赞✍评论⭐收藏,欢迎指正