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 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