Spark(1) - spark概述

开始spark之旅啦~~~
在开始之前,我们要先搞清楚,什么是spark,我们为什么要学spark,有什么特点,然后整体了解整体spark框架模块。
好了,我们开始吧!
先给出官方地址:spark官网,学习资料很详细,对于学习者很友好
Apache Spark官方地址

1. 什么是spark

官方定义:
Apache Spark是用于 大规模数据(large-scala data)处理的 统一(unified)分析引擎。
在这里插入图片描述
Spark 最早源于一篇论文 Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing,该论文是由加州大学柏克莱分校的 Matei Zaharia 等 人发表的。论文中提出了一种弹性分布式数据集(即 RDD)的概念,原文开头对其的解释是:
在这里插入图片描述
论文下载链接
翻译过来就是: RDD 是一种分布式内存抽象,其使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式。而这也是整个Spark 的核心数据结构,Spark 整个平台都围绕着RDD进行。
在这里插入图片描述
简而言之,Spark 借鉴了 MapReduce 思想发展而来,保留了其分布式并行计算的优 点并改进了其明显的缺陷。让 中间数据存储在内存中提高了运行速度、并提供丰富的操作数据的API提高了开发速度。
在这里插入图片描述

1.1 为什么Spark框架会如此快呢?

上面简单说了一下什么是Spark,那我们是不是要考虑一下Spark为什么会快呢?

  1. 数据结构(编程模型):Spark框架核心

RDD:弹性分布式数据集,认为是列表List。
Spark 框架将要处理的数据封装到集合RDD中,调用RDD中函数处理数据 类比Scala语言中实现WordCount。
List -> flatMap、map、groupBy、reduce。
RDD 数据可以放到内存中,内存不足可以放到磁盘中。

  1. Task任务运行方式:以线程Thread方式运行

MapReduce中Task是以进程Process方式运行,而Spark Task以线程Thread方式运行。
线程Thread运行在进程Process中,启动和销毁是很快的(相对于进程来说)。

Spark VS Hadoop

类型 基础平台, 包含计算, 存储, 调度 分布式计算工具 场景 大规模数据集上的批处理 迭代计算, 交互式计算, 流计算 价格 对机器要求低, 便宜 对内存有要求, 相对较贵 编程范式 Map+Reduce, API 较为底层, 算法适应性差 RDD组成DAG有向无环图, API 较为顶层, 方便使用 数据存储结构 MapReduce中间计算结果存在HDFS磁盘上, 延迟大 RDD中间运算结果存在内存中 , 延迟小 运行方式 Task 方式维护, 任务启动慢 Task 方式维护, 任务启动快

★注意:
尽管Spark相对于Hadoop而言具有较大优势, 但Spark并不能完全替代Hadoop,Spark主要用于替代Hadoop中的MapReduce计算模型。存储依然可以使用HDFS,但是中间结果 可以存放在内存中;调度可以使用Spark内置的,也可以使用更成熟的调度系统YARN等。
实际上,Spark已经很好地融入了Hadoop生态圈,并成为其中的重要一员,它可以借 助于YARN实现资源调度管理,借助于HDFS实现分布式存储。
此外,Hadoop可以使用廉价的、异构的机器来做分布式存储与计算,但是,Spark对 硬件的要求稍高一些,对内存与CPU有一定的要求。

2. 为什么要学Spark

Spark是一个开源的类似于Hadoop MapReduce的通用的并行计算框架,Spark基于 map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Spark中的Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

Spark是MapReduce的替代方案,而且兼容HDFS、Hive,可融入Hadoop的生态系统,以弥补MapReduce的不足。
【由来】Spark 是加州大学伯克利分校AMP实验室(Algorithms Machines and People Lab)开发的通用大数据出来框架。Spark生态栈也称为BDAS,是伯克利AMP 实验室所开发的,力图在算法(Algorithms)、机器(Machines)和人(Person) 三种之间通过大规模集成来展现大数据应用的一个开源平台。AMP实验室运用大数据、云计算等各种资源以及各种灵活的技术方案,对海量数据进行分析并转化为有用的信息,让人们更好地了解世界。
Spark的发展历史,经历过几大重要阶段,如下图所示:
 Spark发展历史
Spark 是一种快速、通用、可扩展的大数据分析引擎,2009 年诞生于加州大学伯克利 分校 AMPLab,2010 年开源, 2013年6月成为Apache孵化项目,2014年2月成为 Apache 顶级项目,用 Scala进行编写项目框架。

3. Spark 四大特点

Spark 使用Scala语言进行实现,它是一种面向对、函数式编程语言,能够像操作本地 集合一样轻松的操作分布式数据集。Spark具有运行速度快、易用性好、通用性强和随处运行等特点。
在这里插入图片描述

3.1 速度快

由于Apache Spark支持内存计算,并且通过DAG(有向无环图)执行引擎支持无环数 据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。
在这里插入图片描述
哈哈哈,Logistic regression本来就不是Hadoop擅长的。

Spark处理数据与MapReduce处理数据相比,有如下两个不同点:

  • 其一:Spark处理数据时,可以将中间处理结果数据存储到内存中;

  • 其二:Spark Job调度以DAG(有向无环图)方式,并且每个任务Task执行以线程(Thread)方式,并不是像MapReduce以进程(Process)方式执行。

在这里插入图片描述
2014 年的如此Benchmark测试中,Spark 秒杀Hadoop,在使用十分之一计算资源的情况下,相同数据的排序上,Spark 比Map Reduce快3倍!
在这里插入图片描述

3.2 易于使用

在这里插入图片描述
支持多种语言,多程序员支持特别友好。

3.3 通用性强

在这里插入图片描述
在 Spark 的基础上,Spark 还提供了包括Spark SQL、Spark Streaming、MLib 及 GraphX在内的多个工具库,我们可以在一个应用中无缝地使用这些工具库。其中,Spark SQL 提供了结构化的数据处理方式,Spark Streaming 主要针对流式处理任务(重点),MLlib提供了很多有用的机器学习算法库,GraphX提供图形和图形并行化计算。
在这里插入图片描述

3.4 运行方式

Spark 支持多种运行方式,包括在 Hadoop 和 Mesos 上,也支持 Standalone的独 立运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)上。
在这里插入图片描述
对于数据源而言,Spark 支持从HDFS、HBase、Cassandra 及 Kafka 等多种途径获取数据。
在这里插入图片描述

4. Spark处理的数据存储在哪里?

  1. 文件系统

LocalFS、HDFS、Hive text、parquet、orc、json、csv

  1. 数据库RDBMs(Spark 中不存在SQOOP框架) mysql、Oracle、mssql
  2. NOSQL数据库

HBase、ES、Redis

  1. 消息对象

Kafka

5. Spark 框架模块

整个Spark 框架模块包含:Spark Coke、 Spark SQL、 Spark Streaming、 Spark GraphX、 Spark MLlib,而后四项的能力都是建立在核心引擎之上 。
在这里插入图片描述

5.1 Spark Core

实现了 Spark 的基本功能,包含RDD、任务调度、内存管理、错误恢复、与存储系统 交互等模块。

数据结构:RDD
在这里插入图片描述

5.2 Spark SQL

Spark 用来操作结构化数据的程序包。通过 Spark SQL,我们可以使用 SQL或者Apache Hive版本的SQL方言(HQL)来操作数据。Spark SQL支持多种数据源,比如hive表、Parquet以及JSON等。

数据结构:Dataset/DataFrame = RDD + Schema
在这里插入图片描述

Spark SQL官网

5.3 Spark Streaming

Spark 提供的对实时数据进行流式计算的组件。提供了用来操作数据流的 API,并且与Spark Core中的RDD API高度对应。

数据结构:DStream = Seq[RDD]
在这里插入图片描述

Spark Streaming官网

5.4 Spark MLlib

提供常见的机器学习(ML)功能的程序库。包括分类、回归、聚类、协同过滤等,还提供 了模型评估、数据导入等额外的支持功能。

数据结构:RDD或者DataFrame
在这里插入图片描述
Spark MLlib官网

5.5 Spark GraphX

Spark中用于图计算的API,性能良好,拥有丰富的功能和运算符,能在海量数据上自如地运行复杂的图算法。

数据结构:RDD或者DataFrame

在这里插入图片描述
Spark GraphX官网
在Full Stack理想的指引下,Spark 中的Spark SQL 、SparkStreaming 、MLLib 、 GraphX 几大子框架和库之间可以无缝地共享数据和操作,这不仅打造了Spark在当今大数据计算领域其他计算框架都无可匹敌的优势,而且使得Spark正在加速成为大数据处理中心首选通用计算平台。

5.6 Structured Streaming

Structured Streaming结构化流处理模块针对,流式结构化数据封装到DataFrame中进行分析。
在这里插入图片描述
Structured Streaming是建立在SparkSQL引擎之上的可伸缩和高容错的流式处理引擎,可以像操作静态数据的批量计算一样来执行流式计算。当流式数据不断的到达的过程中 Spark SQL的引擎会连续不断的执行计算并更新最终结果。简而言之,Structured Streaming 提供了快速、可伸缩、可容错、端到端精确的流处理。
Structured Streaming官网

5.7 集群管理器

Spark 设计为可以高效地在一个计算节点到数千个计算节点之间伸缩计算。为了实现这样的要求,同时获得最大灵活性,Spark 支持在各种集群管理器(Cluster Manager)上运行,包括 Hadoop YARN、Apache Mesos,以及 Spark 自带的一个简易调度器,叫作独立调度器。

代码交流 2021