编程语言,运行框架,运行原理等内容讲解
树图思维导图提供 Spark概述 在线思维导图免费制作,点击“编辑”按钮,可对 Spark概述 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:36a3e496fc7296b8a72f7437dde8b019
第一章 Spark概述思维导图模板大纲
了解Spark
2009年,Spark诞生于美国加利福尼亚大学伯克利分校的AMPLab(AMP实验室)最初属于研究性项目。实验室的研究人员基于Hadoop MapReduce 框架进行工作时,发现MapReduce 对于迭代和交互式计算任务的计算效率并不高。因此,研究人员研究的Spark主要是为交互式查询和迭代算法而设计的,支持内存存储和高效的容错恢复。 2010年,Spark正式开源。 2013年6月,Spark成为Apache 软件基金会的孵化器项目。2014年2月,仅仅经历8个月的时间,Spark已成为Apache软件基金会的顶级开源项目之一。同月,大数据公司 Cloudera宣称将加大对 Spark 框架的投人。 2014年5月,PivotalHadoop集成Spark全栈。同月30日,Spark1.0.0发布。 2015年,Spark增加了新的DataFrame API 和 Dataset API。 2016年,Spark2.0发布。Spark2.0与Spark1.0.0的区别主要是,Spark 2.0解决了API的兼容性问题。 2017年,SparkSummit 2017会议介绍了2017年Spark的重点开发方向是深度学习以及对流性能的改进。 而后 Spark 的发展主要是针对 Spark 的可用性、稳定性进行改进,并持续润色代码,随着 Spark 的逐渐成熟,并在社区的推动下,Spark 所提供的强大功能受到了越来越多技术团队和企业的青睐。Spark 于 2020年发布了 3.0.0版本。
了解Spark的特点
1.快速:逻辑回归算法一般需要多次迭代。分别使用 Hadoop MapReduce 和 Spark运行逻辑回归算法,Spark 的运行速度是 Hadoop MapReduce 运行速度的 100多倍,一般情况下,对于迭代次数较多的应用程序,Spark在内存中的运行速度是Hadoop MapReduce 运行速度的 100多倍,Spark在磁盘上的运行速度是 Hadoop MapReduce 运行速度的10多倍。
2.易用:Spark 支持使用 Scala、Python、Java、R 等语言快速编写应用。此外,Spark 提供超过80个高阶算子,使得编写并行应用程序变得容易。并且Spark提供Scala、Python 和R等语言的交互模式界面,使得 Spark编程的学习更加简便。
3.通用:Spark 可以与 SQL语句、实时计算及其他复杂的分析计算进行良好的结合。Spark 框架包含多个紧密集成的组件,包括SparkSQL(即席查询)、Spark Streaming(实时流处理)、Spark MLlib(机器学习库)、Spark GraphX(图计算 ),并且 Spark 支持在一个应用中同时使用这些组件。相较于Hadoop的MapReduce框架,Spark无论在性能还是在方案统一性等方面,都有着极大的优势。Spark全栈统一的解决方案非常具有吸引力,可极大地减少平台部署、开发和维护的人力和物力成本。
4.随处运行:用户可以使用 Spark 的独立集群模式运行 Spark,也可以在亚马逊弹性计算云( AmazonElastic Compute Cloud,Amazon EC2)、Hadoop YARN 资源管理器或 Apache Mesos 上运行Spark。Spark作为一个分布式计算框架,本身并没有存储功能,但是Spark 可以从 HDFS、Cassandra、HBase、Hive、Alluxio(Tachyon)等数据源中读取数据。
5.代码简洁:Spark 支持使用 Scala、Python 等语言编写代码。Scala 和 Python 的代码相对 Java 的代码而言比较简洁,在 Spark 中一般都使用 Scala或 Python 编写应用程序,这也比在MapReduce 中编写应用程序简单方便。
认识Spark生态圈
Spark 生态圈中重要组件的简要介绍如下。 1.Spark Core:Spark的核心,提供底层框架及核心支持, 2.BlinkDB:一个用于在海量数据上进行交互式SQL 查询的大规模并行查询引擎,允许用户通过权衡数据精度缩短查询响应时间,数据的精度将被控制在允许的误差范围内。 3.Spark SOL:可以执行 SQL查询,支持基本的SQL语法和 HiveQL语法,可读取的数据源包括 Hive、HDFS、关系数据库(如 MySQL)等。 4.Spark Streaming:可以进行实时数据流式计算。例如,一个网站的流量是每时每刻都有可能产生的,如果想要分析过去15分钟或1小时的流量,则可以使用 Spark Streaming组件解决这个问题。 5.MLBase:MBase是Spark生态圈的一部分,专注于机器学习领域,学习门槛较低。因此,即使是一些可能并不了解机器学习的用户也可以方便地使用MLBase。MLBase由4部分组成:MLib、ML、MLOptimizer 和 MLRuntime。6.GraphX:图计算的应用在很多情况下处理的数据量都是很庞大的。如果用户需要自行编写相关的图计算算法,并且在集群中应用,难度是非常大的。而使用Graphx即可解决这个问题,因为它内置了许多与图相关的算法,如在移动社交关系分析中可使用图计算相关算法进行处理和分析。 7.SparkR:SparkR是AMPLab发布的一个R语言开发包,使得R语言编写的程序不只可以在单机运行,也可以作为Spark的作业运行在集群上,极大地提升了R语言的数据处理能力。
Spark 架构各个组件如下。 1.客户端:用户提交作业的客户端。 2.Driver:负责运行应用程序(Application)的 main 函数并创建 SparkContext,应用程序包含 Driver 功能的代码和分布在 集群中多个节点上的 Executor 代码。 3.SparkContext:应用上下文,控制整个生命周期。 4.Cluster Manager:资源管理器,即在集群上获取资源的外部服务,目前主要有Standalone 和YARN。 Standalone 是 Spark 原生的资源管理器,由 Master 进程负责资源的分配,也可以理解为使用 Standalone 时 Cluster Manager 是 Master 进程所在节点。 YARN 是 Hadoop 集群的资源管理器,若使用 YARN 作为 Spark 程序运行的资源管理器,则由 ResourceManager 负责资源的分配。 5.Spark Worker:集群中任何可以运行应用程序的节点,运行一个或多个 Executor 进程。 6.Executor:运行在 Spark Worker上的任务(Task)执行器,Executor启动线程池运行Task,并负责将数据存在内存或磁盘上 ,每个应用程序都会申请各自的 Executor 以处理任务。 7.Task:被发送到某个 Executor 的具体任务。
了解Spark作业运行流程
Spark 有3种运行模式,即 Standalone、YARN和 Mesos。其中,在Mesos模式和 YARN 模式下,Spark 作业的运行流程类似。目前用得比较多的是Standalone 模式和 YARN 模式。
1.Standalone 模式
Standalone 模式是 Spark 自带的资源管理器。在 Standalone 模式下,Driver 既可以运行在主节点上,也可以运行在本地客户端( Client)上。当使用 spark-shell 交互式工具提交 Spark作业时,Driver 在主节点上运行;当使用 spark-submit 工具提交作业或直接在 Eclipse、Intelli]IDEA 等开发工具上使用“new SparkConf0.setMaster(spark://master:7077)”方式运行 Spark任务时,Driver 是运行在本地客户端上的。 当用 spark-shell 交互式工具提交 Spark作业时,需要执行 spark-shell 脚本,该脚本执行后会启动交互式的命令界面,供用户运行 Spark 相关命令程序。
Standalone作业运行流程的具体描述如下。 (1)当有作业被提交至 Spark集群时,SparkContext将连接至 Master,向 Master 注册并申请资源。 (2)Worker 定期发送心跳信息给 Master 并报告 Executor 状态。 (3)Master 根据 SparkContext的资源申请要求和 Worker 心跳周期内报告的信息决定在哪个 Worker 上分配资源,并在该 Worker 上获取资源,启动StandaloneExecutorBackend后台监控程序)。 (4)StandaloneExecutorBackend 向 SparkContext 注册并申请资源, (5)SparkContext 将代码发送给StandaloneExecutorBackend,并且 Spark Context 会解析代码,构建有向无环图(Directed Acyclic Graph,DAG),并提交给任务调度器(DAGScheduler ),任务调度器将该有向无环图分解成多个阶段(Stage)的有向无环图,形成1askSet,即多组任务,再将任务提交给 Task Scheduler。Task Scheduler 则负责将任务分配到相应的 Worker,最后提交给 StandaloneExecutorBackend 执行。 (6)StandaloneExecutorBackend 会建立 Executor 线程池,开始执行任务,并向Spark Context报告任务状态,直至任务完成。 (7)所有任务完成后,SparkContext向 Master 注销,释放资源。
2.YARN 模式
YARN 模式根据 Driver 在集群中的位置又分为两种,一种是 YARN-Cient模式( YARN客户端模式 ),另一种是 YARN-Cluster 模式(YARN 集群模式 )。在 YARN模式中,是不需要启动 Spark独立集群的,因此,“http://master:8080”是访问不了的。启动 YARN 客户端模式的 spark-shell。若启动 YARN 集群模式的 spark-shell,使用代码命令则会报错,不能成功启动。这其实与 YARN 集群模式和 YARN 客户端模式的作业运行流程有关。
YARN 集群模式的作业运行流程的具体描述如下。 1.客户端生成作业信息并将其提交给 ResourceManager。 2.YARN 框架的 ResourceManager 指定在某一个 NodeManager 启动 Container(Container 是资源分配和调度的基本单位),并将Application Master 进程分配给该NodeManager。 3.NodeManager 接收到 ResourceManager 的分配后,启动 Application Master 进程并初始化作业,此时 NodeManager 称为 Driver。 4.Application Master 进程向 ResourceManager 申请资源,在 ResourceManager 分配资源的同时通知其他 NodeManager 启动相应的 Executor。 5.Executor 向 NodeManager 上的 Application Master 进程注册汇报并完成相应的任务。
YARN 客户端模式的作业运行流程描述如下。 1.客户端生成作业信息并将其提交给ResourceManager。 2.YARN 框架的 ResourceManager 指定在某一个 NodeManager启动 Container,并将Application Master 分配给该 NodeManager。 3.NodeManager 接收到 ResourceManager 的分配后,启动 Application Master 并初始化作业,此时 NodeManager 就称为 Driver。 4.Application Master向ResourceManager 申请资源,在 ResourceManager 分配资源 同时通知其他 NodeManager 启动相应的 Executor。 5.Executor 向本地启动的 Application Master 注册汇报并完成相应的任务。
了解 Spark 核心数据集 RDD
弹性分布式数据集(Resilient Distributed Dataset,RDD)是 Spark中非常重要的概 念,可以简单地理解成一个提供了许多操作接口的数据集合。与一般数据集不同的 是,RDD 被划分为一到多个分区(Partition,可以对比 HDFS 的文件块的概念进行 理解),所有分区数据分布存储在不同机器的内存(Memory)或磁盘(如 HDFS)中。将 一个 Array 数组转化为一个 RDD,并将名称定义为“myRDD”,RDD数据被划分到 多个分区中,不同分区的数据实际存储在不同机器的内存或磁盘中。 RDD 支持两种类型的操作,分别为转换(Transformation)操作和行动(Action)操作 也称为转换算子和行动算子。转换操作主要是指将原始数据集加载为 RDD 数据或 将一个RDD 转换为另外一个 RDD 的操作。行动操作主要指将 RDD 存储至硬盘中 或触发转换操作执行的操作。例如,map(方法是一个转换操作,作用于 RDD上的 每一个元素,并且返回一个新的 RDD 作为结果;reduce()方法是一个行动操作,该操 作通过一些函数聚合 RDD 中的所有元素并且返回最终的结果。 常用的转换操作有 map()、filter()、flatMap()、union()、groupByKey()、 reduceByKey()等方法。 所有的转换操作都是懒惰(Lazy)操作,它们只记录需要进行的转换操作,并不会马上执行,只有遇到行动操作时才会真正启动计算过程并进行计算。例如Spark RDD转换操作和行动操作示例中,使用转换操作 textFile()方法将数据从 HDFS 加载至RDDA、RDDC中,但其实RDDA和RDDC中目前都是没有数据的,包括后续的fatMap()、map()、reduceByKey()等方法,这些操作其实都是没有执行的,读者可以理解为转换操作只做了一个计划,但是并没有具体执行,只有最后遇到行动操作saveAsSequenceFile()方法,才会触发转换操作并开始执行计算。
了解Spark核心原理
为了更加深入地了解 Spark的核心原理,需要先了解两个重要的概念,即窄依赖( NarrowDependency)和宽依赖(Wide Dependency )。
窄依赖指的是子 RDD 的一个分区只依赖于某个父 RDD 中的一个分区。 宽依赖指的是子 RDD 的每一个分区都依赖于某个父 RDD 中一个以上的分区。 理解宽、窄依赖的区别,需要先了解父 RDD(Parent RDD)和子RDD(Child RDD),map0、filter()方法上方箭头左边的 RDD 是父 RDD,而右边的 RDD是子 RDDunion()方法上方箭头左边的两个 RDD 均为右边 RDD的父 RDD,因此,union()方 法是有两个父 RDD 的。 Spark 中还有一个重要的概念,即 Stage(阶段 )。一般而言,一个作业会被划分成一定数量的 Stage,各个 Stage 之间按 照顺序执行。在 Spark 中,一个作业会被拆分成多组任务每组任务即一个 Stage。而在 Spark中有两类任务,分别是 ShuffleMapTask 和 ResultTaskShumleMapTask 的输出是 Shufle 所需的数据,ResultTask 的输出则是最终的结果。因 此Stage 是以任务的类型为依据进行划分的,Shufe 之前的所有操作属于一个 Stage,Shutil之后的操作则属于另一个 Stage。例如,“rdd.parallize(1 to 10).foreach(println)”这个操作并没有 Shufle,直接就输出了,说明任务只有一个, 即 ResultTask,Stage 也只有一个。如果是“rdd.map(x=>(x,1)).reduceByKey(_+_).foreach (println)”,因为有 reduceByKey()方法所以有一个 Shume 过程,那么 reduceByKeyO)方法之前属于一个 Stage,执行的任务类型为 shufleMapTask,而reduceByKey0)方法及最后的 foreachO)方法属于一个 Stage,直接输出结果。如果一个作业中有多 个 Shuffle 过程,那么每个 Shuffle 过程之前都属于一个 Stage。 将某一个作业划分成多个 Stage,有3个 Stage,分别是 Stage(RDDA)、Stage2(RDDC、RDDD、RDDE、RDDF )、Stage3 (包含所有 RDD)。Spark会将每一个作业分为多个不同的 Stage,而 Stage 之间的依赖关系则形成了有向无环图。Spark遇 到宽依赖则划分一个 Stage,遇到窄依赖则将这个 RDD 的操作加入该 Stage 中,由于宽依赖通常意味着 Shume 操作,因 此 Spark 会将 Shufe 操作定义为划分 Stage 的边界。因此,RDDC、RDDD、RDDE、RDDF 被构建在一个 Stage 中, RDDA 被构建在一个单独的Stage中,而RDDB和RDDG又被构建在同一个Stage中。
本章首先简单介绍了 Spark的发展历史、Spark的特点,然后介绍了Spark的生态圈和Spark 的应用场景,带领读者认识 Spark。接着详细介绍了单机模式、单机伪分布式模式和完全分布式模式下 Spark 集群的搭建过程。最后重点介绍了 Spark 的架构、Spark 的作业运行流程和 Spark 的核心数据集 RDD,为之后学习 Spark 编程奠定基础。
树图思维导图提供 Coresight功能概述 在线思维导图免费制作,点击“编辑”按钮,可对 Coresight功能概述 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:ebec87c729f18ad8d2c14f2f9af2790b
树图思维导图提供 现代教育技术概述 在线思维导图免费制作,点击“编辑”按钮,可对 现代教育技术概述 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:7206c54fea8092844bd6b268cbfb5f63