[Spark 2.x] - 00 初识

Spark是一款专为大规模数据处理设计的快速通用计算引擎,以其卓越的速度和易用性著称。它采用Scala语言实现,基于内存的分布式数据集优化了迭代式工作负载和交互式查询。Spark不仅在批处理速度上远超MapReduce,更能在内存中以接近实时的时间完成数据分析,尤其适用于数据挖掘、机器学习等需要迭代的算法。
摘要由CSDN通过智能技术生成

在这里插入图片描述

一、Spark概述

先看一张Hadoop生态圈、一张Hadoop架构图,即可粗略知晓Spark所处的地位、作用:
在这里插入图片描述
在这里插入图片描述
Spark,在英语中,译作:n.火花、火星;v.冒火花、触发、引发。这就解释了 Spark专为大规模数据处理而设计的快速通用的计算引擎(框架)命名由来。火花 肯定很快的!!它被标榜为“快如闪电的集群计算”、被称为“Hadoop的瑞士军刀”,拥有非凡的速度和易用性。它拥有一个繁荣的开源社区,并且是目前最活跃的Apache项目。

最早是由UC Berkeley AMP lab所开源的、建立于HDFS之上的类Hadoop MapReduce的通用的并行计算框架。

它采用Scala语言实现,使用Scala作为应用框架。Spark采用基于内存( InMemory模型)的分布式数据集,优化了迭代式的工作负载以及交互式查询。

Hadoop(MapReduce)、Spark两者之间的关系/异同:

1)解决问题的层面不一样
两者都是大数据框架,但各自存在的目的不同:

  • Hadoop:它的实质 更多是一个分布式数据基础设施
    • 将巨大的数据集分派到一个由普通计算机组成的集群中的多个节点进行存储(意味着不需要购买和维护昂贵的服务器硬件)
    • 索引和跟踪这些数据,让大数据处理和分析效率达到前所未有的高度
  • Spark:一个专门用来对那些分布式存储的大数据进行处理的工具,它并不会进行分布式数据的存储

2)两者可合可分

  • Hadoop除了提供HDFS分布式数据存储功能之外,还提供MapReduce数据处理功能。所以完全可以抛开Spark,使用Hadoop自身的MapReduce来完成数据的处理
  • 相反,Spark也不是非要依附在Hadoop身上才能生存。它必须和其他的分布式文件系统进行集成才能运作,可以选择Hadoop的HDFS,也可以选择其他的基于云的数据系统平台。

3)灾难恢复:两者的灾难恢复方式迥异,但是都很不错

  • 因为Hadoop将每次处理后的数据都写入到磁盘上,所以其天生就能很有弹性的对系统错误进行处理
  • Spark的数据对象存储在分布于数据集群中(弹性分布式数据集(RDD: Resilient Distributed Dataset))中。这些数据对象既可以放在内存,也可以放在磁盘,所以RDD同样也可以提供完成的灾难恢复功能

4)处理数据的方式不一样:Spark 数据处理速度简直是秒杀MapReduce。

  • MapReduce是分步对数据进行处理:从集群中读取数据,进行一次处理,将结果写到集群,从集群中读取更新后的数据,进行下一次的处理,将结果写到集群,等等。如果需要处理的数据和结果需求大部分情况下是静态的,且也有耐心等待批处理的完成的话,MapReduce的处理方式也是可以接受的。
  • Spark 会在内存中以接近“实时”的时间完成所有的数据分析:从集群中读取数据,完成所有必须的分析处理,将结果写回集群,完成。Spark在磁盘上的批处理速度比MapReduce快近10倍,内存中的数据分析速度则快近100倍。如果需要对流数据进行分析,如来自于工厂的传感器收集回来的数据、或需要多重数据处理的场景,那么应该使用Spark进行处理。
    在这里插入图片描述

PS:拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是:Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。实际上它是对 Hadoop 的补充。

Spark的应用场景:
实时的市场活动、在线产品推荐、网络安全分析、机器日记监控等

Spark的特点:

  • 1)基于Scala语言、Spark基于内存的计算;
  • 2)快:基于内存(立足于内存计算)。内存DAG(Directed acyclic graph,有向无环图)计算模型;
  • 3)易用:支持Scala、Java、Python;
  • 4)通用:Spark Core、Spark SQL、Spark Streaming、MLlib、Graphx
  • 5)兼容性:完全兼容Hadoop。

二、Spark诞生及主要版本发布简要

在这里插入图片描述
Spark主要开发者 Matei Zaharia

2009Spark诞生于UCBerkeley的AMP实验室
2010,Spark正式对外开源
2012-10-15,0.6.0发布,大范围的性能改进,增加了一些新特性,并对Standalone部署模式进行了简化
2013-02-27,增加了更多关键特性,例如:Python API、Spark Streaming的alpha版本等
2013-06-21,接受进入Apache孵化器
2013-12-19,0.8.1发布,支持Scala 2.9,YARN 2.2,Standalone部署模式下调度的高可用性,shuffle的优化等
2014-02-02,0.9.0发布,增加了GraphX,机器学习新特性,流式计算新特性,核心引擎优化(外部聚合、加强对YARN的支持)等
2014-05-301.0.0发布,增加了Spark SQL、MLlib、GraphX和Spark Streaming都增加了新特性并进行了优化。Spark核心引擎还增加了对安全YARN集群的支持
2015-03-13,1.3.0发布,最大亮点是新引入的DataFrame API,对于结构型的DataSet,它提供了更方便更强大的操作运算。除了DataFrame之外,还值得关注的一点是Spark SQL成为了正式版本,这意味着它将更加的稳定,更加的全面。
2015-06-11,1.4.0发布,该版本将 R API 引入 Spark,同时提升了 Spark 的核心引擎和 MLlib ,以及 Spark Streaming 的可用性
2016-07-262.0.0发布,该版本主要更新APIs,支持SQL 2003,支持R UDF ,增强其性能。300个开发者贡献了2500补丁程序
2016-12-28,2.1.0发布,这是 2.x 版本线的第二个发行版。此发行版在为Structured Streaming进入生产环境做出了重大突破,Structured Streaming现在支持了event time watermarks了,并且支持Kafka 0.10。此外,此版本更侧重于可用性,稳定性和优雅(polish),并解决了1200多个tickets
2017-07-11,2.2.0发布。这是 2.x 系列的第三个版本。此版本移除了 Structured Streaming 的实验标记(experimental tag),意味着已可以放心在线上使用;该版本的主要更新内容主要针对的是系统的可用性、稳定性以及代码润色
2018-02-28,2.3.0发布,这是 2.x 系列中的第四个版本。此版本增加了对 Structured Streaming 中的 Continuous Processing 以及全新的 Kubernetes Scheduler 后端的支持。其他主要更新包括新的 DataSource 和 Structured Streaming v2 API,以及一些 PySpark 性能增强。此外,此版本继续针对项目的可用性、稳定性进行改进,并持续润色代码
2018-11-02,2.4.0发布,带来众多主要功能、增强功能:新的调度模型(Barrier Scheduling)、添加了35个高阶函数、新增一个新的基于 Databricks 的 spark-avro 模块的原生 AVRO 数据源,等等
2019-05-07 07:57,2.4.3发布
2019-05-11,Now

三、Spark 2.x和 1.x的区别

Spark 1.x到Spark 2.x,完全是一脉相承的关系,即 Spark 2.x基本上是基于Spark 1.x进行了更多的功能和模块的扩展,以及底层性能的改良。绝对不是说,Spark 2.x彻底淘汰和替代了Spark 1.x中的组件而且实际上,对于Spark 1.x中90%以上的东西,Spark 2.x几乎都完全保留了支持和延续,并没有做任何改变。这是必须要了解的一件事情。

由于我们关注更多肯定是 Spark 2.x,而不是1.x,所以更多是了解、熟悉后者的原理、特性、适用和不适用的场景,这是重中之重!!!

Spark 2.x 区别于 1.x的 主要是:

  • 1)、统一DataFrames 和 Datasets 的API,只剩下DataSet了
  • 2)、2.x 实现了离线计算和流计算的统一,实现了Spark sql和Hive Sql操作API的统一
  • 3)、2.x 中引入了 SparkSession 的概念,它为用户提供了一个统一的切入点来使用 Spark 的各项功能,统一了旧的SQLContext与HiveContext
  • 4)、Spark Streaming基于Spark SQL(DataFrame / Dataset )构建了high-level API,使得Spark Streaming充分受益Spark SQL的易用性和性能提升
  • 5)、Spark streaming 中JavaStreamingContextFactory类 废弃
  • 6)、flatMapToPair 由reture list变为reture iterator
  • 7)、ForeachRDD 不再return null
  • 8)、更新状态的函数中,使用的Optional来自com.google.common.base,函数不能用
  • 9)、Kafka 只提供direct方式
  • 10)、增加新的引擎Tungsten执行引擎,比1.x 快10倍
  • 等等

四、Spark 架构、生态(模块)

在这里插入图片描述
整个Spark由Spark Core、Spark SQL、Spark Streaming、GraphX、MLlib组成,它们的能力都是建立在Spark Core核心引擎之上:

  • Spark Core:核心功能实现。即它实现了Spark 的基本功能:任务调度、内存管理、错误恢复、与存储系统 交互等模块。还包含了对弹性分布式数据集(resilient distributed dataset,RDD)的API 定义。
  • Spark SQL:提供SQL处理能力
  • Spark Streaming:提供流式计算处理能力
  • GraphX:提供图计算处理能力
  • MLlib:机器学习库

五、Spark 学习思维导图

根据工作所需、兴趣所取即可,不一定全都要知道、学习。生命有限,哈哈
在这里插入图片描述

参考:
官方Spark release archives

百度百科-Spark

Spark的历史与发展(目录):写得非常好

大数据-Spark的介绍:前世今生

Spark 2.0之Spark 2.x与1.x对比以及分析:分析的非常好。特别是各组件的基本原理

Spark (二) 架构详解

Spark程序架构与运行模式

Spark(二) :基本架构解析:讲得非常好

Spark 基本概念、模块和架构

Hadoop与Spark比较

Spark入门——什么是Hadoop,为什么是Spark?

Spark(一): 基本架构及原理

Spark学习之路 (一)Spark初识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值