Spark技术原理介绍——分布式大数据分析统一引擎

0.主要内容

(1)Spark概述

(2)Spark架构

(3)Spark运行原理与部署方式

(4)Spark程序示例

 

1.Spark概述

1.1.Spark是什么?

(1)基于内存的分部署大数据分析统一引擎

(2)2013年的Apache社区开源项目

(3)支持Python、SQL、Scala、Java或R语言

(4)可用于迭代计算、Streaming实时计算、机器学习、SQL等

(5)特点:简单、快速、可扩展、统一

1.2.Spark的发展与现状

 Hadoop:

 

 

Spark:

 

 

1.3.Spark与Hadoop对应关系

 

主流应用组合:Spark + Yarn + HDFS

 

1.4.Spark特点之”统一“

Spark生态圈

对于不同数据存储系统进行封装,提供统一API

1.5.Spark特点只”快速“

Spark与Hadoop MapReduce比较,中间数据存放在内存中,减少磁盘IO,提高了迭代计算效率;

计算DAG图优化,减少任务间依赖;

采用pipeline管道计算模式。

Spark与Hadoop MapReduce比较,性能提升100倍以上;

磁盘100TB数据排序对比:Spark使用1/10数量极其,让计算速率提高了3倍。

 

1.6.MapReduce简介

Spark是MapReduce的继任者,但支持的操作不仅限于Map和Reduce;

MapReduce是对大数据”拆解+组合“的通用计算方法,属于分治法;

MapReduce是六大过程:Input,Split,Map,Shuffle,Reduce,Finalize

 

 

2.1.Spark组件架构

 

Spark Core:Spark基本功能,含RDD的API与操作

Spark SQL:结构化数据查询,提供HiveQL语言交互,一个数据表即为一个RDD

Spark Streaming:基于RDD的实时数据流处理

MLlib:常用机器学习算法学习库,通过对RDD操作实现

GraphX:控制图、并行图操作和计算的算法工具库

 

2.2.Spark运行架构

采用Master-Slaver分布式模型,Master为集群的控制器,Driver负责应用执行的调度控制,将Task及其以来传递给对应Executor。

 

2.3.Spark关键角色

client:

提供shell或者submit工具用于应用提交

driver:

负责应用的业务逻辑和运行规划

 

 

 

Apache Spark 已成为分布式横向扩展数据处理的事实上的标准框架。借助 Spark,组织能够使用服务器群在短时间内处理大量数据——既可以整理和转换数据,也可以分析数据并生成业务洞察力。Spark 为 ETL(提取、转换、加载)、机器学习 (ML) 和来自各种来源的海量数据集的图形处理提供了一组易于使用的 API。今天,Spark 在数百万台服务器上运行,包括本地和云端。

https://www.nvidia.com/en-us/deep-learning-ai/solutions/data-science/apache-spark-3/

3.Spark发展与现状

3.Spark与hadoop对应关系

2.Spark特点之“统一”

2.Spark特点之“快速”

2.MapReduce简介

4.Spark架构

5.Spark关键角色

 

 

6.Spark基本概念

 

RDD(Resilient Distributed Dataset)弹性分布式数据集:是一个基于分区的、只读的抽象数据集,是Spark的基本计算单元,物理上可分块分布在不同机器上。基于该抽象数据集,可以在集群中执行一系列算子操作(Tramsformation和Action)。

 

为了简化容错支持,RDD只支持粗粒度的变换,不支持集中细粒度变换,即输入数据集是immutable(或只读)的,每次运算产生新的输出,。

 

数据集显示抽象统一为RDD,便于将不同计算过程组合起来进行统一的DAG调度。

 

Hadoop MapReduce中间结果必须落盘,而Spark的RDD保存在内存中,降低加载和计算延迟。

 

定义宽窄依赖的概念,进行Stage划分,优化了DAG调度计算。

 

因为内存有限,以计算换取存储的方式,进行容错支持,根据当前RDD的父RDD以及算子来重算来进行错误恢复。

 

 

可以内存可以硬盘

 

 

 

 

在逻辑上是一个数据集,在物理上则可以分块分布在不同的机器上并发运行。RDD的数据具有不可变性(immutable)

 

也是Spark的基本计算单元,可以执行一系列算子操作(Tramsformation和Action)

存储级别

 

7.Spark-standalone运行原理

8.Spark-Yarn运行原理

9.Spark的SQL和Stream介绍

 

 

https://max.book118.com/html/2018/0117/149246250.shtm

 

 

TensorFlow和Spark MLlib有什么区别?:https://www.zhihu.com/question/48230912/answer/253846380

 

使用 Apache Spark 和 TensorFlow 进行深度学习:https://databricks.com/blog/2016/01/25/deep-learning-with-apache-spark-and-tensorflow.html

 

深入浅出Spark(1)什么是Spark:https://zhuanlan.zhihu.com/p/21587328

 

Spark shuffle时 是否会在磁盘存储?:https://ac.nowcoder.com/questionTerminal/50aeea8e405d4f90baec3060f49a3442?orderByHotValue=1&page=1&onlyReference=false
链接:https://ac.nowcoder.com/questionTerminal/50aeea8e405d4f90baec3060f49a3442?orderByHotValue=1&page=1&onlyReference=false
来源:牛客网

在Spark 0.6和0.7时,Shufle的结果都需要先存储到内存中(有可能要写入磁盘),因此对于大数据量的情况下,发
生GC和OOM的概率非常大。因此在Spark 0.8的时候,Shuffle的每个record都会直接写入磁盘,并且为下游的每个
Task都生成一个单独的文件。这样解决了Shuffle解决都需要存入内存的问题,但是又引入了另外一个问题:生成的
小文件过多,尤其在每个文件的数据量不大而文件特别多的时候,大量的随机读会非常影响性能。Spark 0.8.1为了
解决0.8中引入的问题,引入了FileConsolidation机制,在一定程度上解决了这个问题。由此可见,Hash Based
shuffle在Scalability方面的确有局限性。而Spark1.0中引入的Shuffle Pluggable Framework,为加入新的Shuffle机制
和引入第三方的Shuffle机制奠定了基础。在Spark1.1的时候,引入了Sort Based Shuffle;并且在Spark1.2.0时,
Sort Based Shuffle已经成为Shuffie的默认选项。
 
 

什么是MapReduce:https://www.zhihu.com/search?type=content&q=MapReduce

 

 

spark3.0新特性:https://www.jianshu.com/p/73896a514220,https://zhuanlan.zhihu.com/p/370197693

 

Spark架构及组件:https://www.cnblogs.com/Mayny/p/9330436.html

【最关键全面的一篇】Spark基本架构及原理: https://www.cnblogs.com/Mayny/p/9330436.html