认识Spark

一、发展历程

1.当前问题

什么要学Spark?现有的hadoop生态系统中存在的问题?

  1. 使用mapreduce进行批量离线分析;

  2. 使用hive进行历史数据的分析;

  3. 使用hbase进行实时数据的查询;

  4. 使用storm进行实时的流处理;

  5. 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特点

  • 运行速度快: 
    1. 基于内存计算(从表象来看)
    2. DAG(从深层次来看):把执行过程做成一张图,再来优化
  • 容易使用:支持使用Scala、Java、Python和R语言进行编程,可以通过Spark Shell进行交互式编程 。
  • 通用性:Spark提供了完整而强大的技术栈,包括SQL查询、流式计算、机器学习和图算法组件。
    1. 应用于流式计算的Spark Streaming(如网站监控和网络监控、异常监测、网页点击、用户行为)
    2. 应用于即席查询(Ad-hoc)的Spark SQL(比如不同时间段,不同地区,不同接种针数的查询)
    3. 应用于机器学习(数据挖掘)的MLlib (比如销量预测,用户画像,商品分类)
    4. 应用于图处理的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情绪分析:分析大量的推文,以确定特定组织和产品的积极,消极或中立的情绪。航空公司:建立预测航空旅行延误的模型。

思考

  1. Spark的优点有那些?
  2. 简要说明Spark的组件及各自作用?
  3. 有了Spark 是不是可以替代Hadoop了?

存储替代不了 只替代了mr计算