认识Spark
认识Spark
叶一片一、发展历程
1.当前问题
什么要学Spark?现有的hadoop生态系统中存在的问题?
使用mapreduce进行批量离线分析;
使用hive进行历史数据的分析;
使用hbase进行实时数据的查询;
使用storm进行实时的流处理;
python做机器学习
导致:维护成本高、学习成本高Spark的出现弥补了Hadoop生态系统中的缺陷,使用spark搞定”一切“
MapReduce模型的痛点
- MR代码需要大量的样板。程序员不仅需要考虑Map和Reduce的基本操作概念,而且还需要知道MR的每个问题。
- MR模型不适合迭代处理。程序员对于分布式特性数据是不透明的,需要经常考虑优化,如Map边的reduce,Map边的join操作。
- MR的中间结果总是要持久保存,这是为了容错,但是会有很高IO操作代价,而Spark不会将这些结果持久化(RDD存在于内存中),除非用户明确指定,激活操作的管道化会大大提升速度。
- Spark - RDD抽象使我们远离传统的Map-reduce模型,给了我们的集合(分布)接口,,因此在MR中需要的很多样板操作现在变成了集合操作,例如groupBy、join、count, distinct max, min等等。它还允许我们很容易通过共享RDD之间的操作进行迭代处理。
2.Spark概述
Spark简介
- Spark是一个高速、通用大数据计算处理引擎。
- Spark最初由美国加州伯克利大学(UCBerkeley)的AMP实验室于2009年开发,是基于内存计算的大数据并行计算框架,可用于构建大型的、低延迟的数据分析应用程序。
- 2013年Spark加入Apache孵化器项目后发展迅猛,如今已成为Apache软件基金会最重要的三大分布式计算系统开源项目之一(Hadoop存储、Spark计算、Storm/Flink流计算)。
- 官方网址:http://spark.apache.org/
Spark特点
- 运行速度快:
- 基于内存计算(从表象来看)
- DAG(从深层次来看):把执行过程做成一张图,再来优化
- 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell进行交互式编程 。
- 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件。
- 应用于流式计算的Spark Streaming(如网站监控和网络监控、异常监测、网页点击、用户行为)
- 应用于即席查询(Ad-hoc)的Spark SQL(比如不同时间段,不同地区,不同接种针数的查询)
- 应用于机器学习(数据挖掘)的MLlib (比如销量预测,用户画像,商品分类)
- 应用于图处理的GraphX (如PageRank、社交网络、航行优化)
- 运行模式多样:可运行于独立的集群模式中,可运行于Hadoop中,也可运行于Amazon EC2等云环境中,并且可以访问HDFS、Cassandra、HBase、Hive等多种数据源 。
Spark概述
Spark发展过程
Spark版本发布过程
- 2009年由加州大学伯克利分校开始编写最初的源代码;
- 2012年2月发布0.6.0版本
- 2013年6月进入Apache孵化器项目(2014年2月成为Apache顶级项目)
- 2014年5月低Spark1.0.0发布
- 2016年7月Spark2.0.0正式发布
- 2020年6月Spark3.0.0正式发布
Spark应用趋势
Spark如今已吸引了国内外各大公司的注意,如腾讯、淘宝、百度、亚马逊等公司均不同程度地使用了Spark来构建大数据分析应用,并应用到实际的生产环境中
Spark与Hadoop的对比
Hadoop | Spark |
---|---|
数据存储结构:磁盘HDFS文件系统的split | 使用内存构建弹性分布式数据集RDD对数据进行运算和cache |
编程范式:Map + Reduce | DAG: Transformation + Action |
计算中间结果落到磁盘,IO及序列化、反序列化代价大 | 计算中间结果在内存中维护存取速度比磁盘高几个数量级 |
Task以进程的方式维护,需要数秒时间才能启动任务 | Task以线程的方式维护对于小数据集读取能够达到亚秒级的延迟 |
二、生态技术
Spark生态圈 >> 组成成分
Spark生态圈 >> 组件简介
(不是四大组件之一)Spark Core :用于通用分布式数据处理的引擎,包含了Spark最基本、最核心的功能和基本分布式算子。
Spark core的基本功能有任务调度、内存管理、故障恢复以及和存储系统的交互。
四大组件:
- Spark SQL : 用于分布式结构化数据的SQL查询与分析,支持SQL函数和HiveQL
- Spark Streaming :用于处理流数据的分布式流处理框架,它将数据流以时间片为单位进行分割,能够以较小的时间间隔对流初级进行处理,从严格意义上说是一个准实时处理系统。 Spark Streaming支持不同数据源导入。
- MLlib :是一个分布式机器学习库。在Spark平台上对一些常用的机器学习算法进行了分布式实现,包括:分类、回归、聚类、决策树等等。
- GraphX :是一个分布式图处理框架,在Spark上实现了大规模图计算的功能,提供了对图计算和图挖掘的各种接口。
Spark生态圈 >> 应用场景
应用场景 | 时间跨度 | 其他框架 | Spark生态系统中的组件 |
---|---|---|---|
复杂的批量数据处理 | 小时级 | MapReduce、Hive | Spark |
基于历史数据的交互式查询 | 分钟级、秒级 | Impala、Dremel、Drill | Spark SQL |
基于实时数据流的数据处理 | 毫秒、秒级 | Storm、S4 | Spark Streaming |
基于历史数据的数据挖掘 | - | Mahout | MLlib |
图结构数据的处理 | - | Pregel、Hama | GraphX |
在特定的使用场景下,Spark提供的解决方案不一定是最优,比如在实时数据流处理中,相比于Spark Streaming,Strom的实时性更强、时间切片更小,但Spark模块间的数据可以无缝结合,因此Spark生态系统可以为大数据的处理、分析提供一站式解决方案。
Spark最常见的三种应用场景
离线场景:可以以时间为维度,几年的数据集,或者以业务为维度,某个领域的大数据集等,这种数据我们一般叫做离线数据,或者冷数据。
实时场景:网站埋点、实时从前端页面传输过来的数据、业务系统或物理硬件实时传输过来的数据、硬件信号或者图像数据等,需要实时去计算处理并且返回结果的数据。
数据科学场景:能够处理来自传感器或金融系统的流数据以及机器学习任务,且Spark将数据集缓存在内存中的能力大大加快了迭代数据处理速度,使得Spark成为实现迭代的MapReduce算法的理想处理引擎。
- 保险行业:通过使用Spark的机器学习功能来处理和分析所有索赔,优化索赔报销流程。
- 医疗保健:使用Spark Core,Streaming和SQL构建病人护理系统。
- 零售业:使用Spark分析销售点数据和优惠券使用情况。
- 银行业:使用机器学习模型来预测某些金融产品的零售×××的资料。
- 科学研究:通过时间,深度,地理分析地震事件来预测未来的事件。
- 投资银行:分析日内股价以预测未来的价格走势。
- 地理空间分析:按时间和地理分析Uber旅行,以预测未来的需求和定价。
- Twitter情绪分析:分析大量的推文,以确定特定组织和产品的积极,消极或中立的情绪。航空公司:建立预测航空旅行延误的模型。
思考
- Spark的优点有那些?
- 简要说明Spark的组件及各自作用?
- 有了Spark 是不是可以替代Hadoop了?
存储替代不了 只替代了mr计算