一。认识Spark
1.Spark的发展历史
Spark从诞生到正式版本的发布,经历的时间较短。2017年以后Spark的发展主要针对Spark的可能性,稳定性进行改进,并持续润色代码。随着Spark的逐渐成熟,并在社区的推动下,Spark所提供的强大功能受到了越来越多技术团队和企业的青睐。Spark于2020年发布了3.0.0版本。
2.什么是Spark
spark网址: http://spark.apachecn.org/docs/cn/2.2.0/index.html
Spark是一种快速、通用、可扩展的大数据分析引擎,其中包含SparkSQL、Spark Streaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。
3.Spark的特点
Spark作为新一代轻量级大数据处理平台,具有快速,易用,通用,随处运行,代码简洁等特点。
快速
一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的10多倍
MapReduce是基于磁盘运行的而Spark是基于内存
易用
Spark支持使用Scala、Python、Java及R语言快速编写应用。同时Spark提供超过80个高阶算子,使得编写并行应用程序变得容易,并且可以在Scala、Python或R的交互模式下使用Spark。
通用
Spark可以与SQL、Streaming及复杂的分析良好结合。Spark还有一系列的高级工具,包括Spark SQL、MLlib(机器学习库)、GraphX(图计算)和Spark Streaming(流计算),并且支持在一个应用中同时使用这些组件
随处运行
用户可以使用Spark的独立集群模式运行Spark,也可以在EC2(亚马逊弹性计算云)、Hadoop YARN或者Apache Mesos上运行Spark。并且可以从HDFS、Cassandra、HBase、Hive、Tachyon和任何分布式文件系统读取数据
代码简洁
4.什么是结构化数据什么是非结构化数据
结构化数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。简单来说就是数据库。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。所以,结构化数据的存储和排列是很有规律的
非结构化数据是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表现的数据。包括所有格式的办公文档、文本、图片、各类报表、图像和音频/视频等。非结构化数据其格式非常多样,标准也是多样性的。
两者的概念并不难区分,如果用一份Excel报表来理解,这份文件本身是非结构化数据,而里面内容则是结构化数据
5认识Spark的生态圈
Spark的核心,提供底层框架及核心支持。
一个用于在海量数据上进行交互式SQL查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。
可以执行SQL查询,支持基本的SQL语法和HiveQL语法,可读取的数据源包括Hive、HDFS、关系数据库(如MySQL)等。
可以进行实时数据流式计算
是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。MLBace由四部分组成:MLlib,MLI,ML Optimizer和MLRuntime。
二.了解Spark运行结构与原理
1.了解Spark架构
用户提交作业的客户端。
运行Application的main()函数并创建SparkContext。
整个应用的上下文,控制应用的生命周期
资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone(Spark原生的资源管理器)和YARN(Hadoop集群的资源管理器)。
集群中任何可以运行应用程序的节点,运行一个或多个Executor进程
执行器,在Spark Worker上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executor。
被发送到某个Executor的具体任务
2.了解Spark作业运行流程
Standalone模式
standalone模式是单节点模式也就是说是一种独立的模式或者本地模式
yarn模式
由图可看出启动Application Master的客户端可以立即关闭,不必持续到Application的执行周期结束。
在yarn集群模式下,Spark Driver运行在Application Master中,Application Master负责向yarn申请资源,并监督作业的运行状况。用户提交了作业后,即可关闭客户端,作业将继续在了yarn上运行,因此yarn集群模式不适合运行交互性强的作业,更适用于实际的生产环境。在yarn客户端模式下,Application Master只负责向yarn申请资源并将其交给Executor,客户端会直接与Container通信进行作业的调度,因此,yarn客户端模式适用于交互和调试,可以快速的看到应用程序的输出信息。
3.了解Spark核心数据集PDD
PDD的特性
高效的容错性
现有容错机制:数据复制或者记录日志RDD具有天生的容错性:血缘关系,重新计算丢失分区,无需回滚系统,重算过程在不同节点之间并行,只记录粗粒度的操作
中间结果持久化到内存,数据在内存中的多个RDD操作直接按进行传递,避免了不必要的读写磁盘开销
存放的数据可以是JAVA对象,避免了不必要的对象序列化和反序列化
转换算子和行动算子
Spark RDD转换和操作示例
宽依赖与窄依赖
父RDD的一个分区只被一个子RDD的一个分区所使用就是窄依赖,否则就是宽依赖
PDD Stage的划分
stage:
(1)一个Job可划分为多个Stage,Stage代表Job执行的阶段
(2)有关联的Stage之间是串行执行的,也就是上一个阶段执行完毕才能执行下一个Stage
(3)Stage的划分根据是否有Shuffle(RDD宽依赖,也叫Shuffle依赖)划分的,一个Job的Stage数等于Shuffle数+1
Task:
一个Stage可以划分多个Task,一个Stage的Task的总数等于这个Stage中最后一个RDD的分区数量