建设一个网站的规划,广州网站建设咨询电话,智能建站,国内互联网公司排名2021#x1f34b;#x1f34b;大数据学习#x1f34b;#x1f34b;
#x1f525;系列专栏#xff1a; #x1f451;哲学语录: 用力所能及#xff0c;改变世界。 #x1f496;如果觉得博主的文章还不错的话#xff0c;请点赞#x1f44d;收藏⭐️留言#x1f4dd;支持一…大数据学习
系列专栏 哲学语录: 用力所能及改变世界。 如果觉得博主的文章还不错的话请点赞收藏⭐️留言支持一下博主哦 一、Spark概述 1概述 Spark是一种One Stack to rule them all的大数据计算框架期望使用一个技术堆栈就完美地解决大数据领域的各种计算任务。Apache官方对Spark的定义就是通用的大数据快速处理引擎。 Spark使用Spark RDD、Spark SQL、 Spark StreamingMLlibGraphX成功解决了大数据领城中离线批处理、交互式查询、实时流计算、机器学习与图计算等最重要的任务和问题。 Spark除了一站式的特点之外另外一个最重要的特点就是基于内存进行计算从而让它的速度可以达到MapReduce、Hive的数倍甚至数十倍 现在已经有很多大公司正在生产环境下深度地使用Spark作为大数据的计算框架包括eBay.Yahool、 BAT、网易、京东、华为、大众点评、优酷土豆、搜狗等等。Spark同时也获得了多个世界顶级IT厂商的支持包括IBM、 Intel等。 Spark是一种通用的大数据计算框架也正如传统大数据技术Hadoop的MapReduce、Hive引擎以及Storm流式实时计算引擎等 Spark包含了大数据领城常见的各种计算框架比如Spark Core用于离线计算Spark SQL用于交互式查询Spark Streaming用于实时流式计算Spark MILlib用于机器学习Spark GraphX用于图计算。 Spark主要用于大数据的计算而Hadoop以后主要用于大数据的存储比如HDFS、HiveHBase等以及资源调度Yarn。SparkHadoop的组合是未来大数据领域最热门的组合也是最有前景的组合
2Spark整体架构 3Spark特性 1spark 计算速度快
spark将每个任务构建成DAG进行计算内部的计算过程通过弹性式分布式数据集RDD在内存在进行计算相比于hadoop的mapreduce效率提升了100倍。
2易于使用
spark 提供了大量的算子开发只需调用相关api进行实现无法关注底层的实现原理。
通用的大数据解决方案
相较于以前离线任务采用mapreduce实现实时任务采用storm实现目前这些都可以通过spark来实现降低来开发的成本。同时spark 通过spark SQL降低了用户的学习使用门槛还提供了机器学习图计算引擎等。
3支持多种的资源管理模式
学习使用中可以采用local 模型进行任务的调试在正式环境中又提供了standaloneyarn等模式方便用户选择合适的资源管理模式进行适配。
4社区支持
spark 生态圈丰富迭代更新快成为大数据领域必备的计算引擎。
4Spark与MR MapReduce能够完成的各种离线批处理功能以及常见算法比如二次排序、topn等基于Spark RDD的核心编程都可以实现并且可以更好地、更容易地实现。而且基于Spark RDD编写的离线批处理程序运行速度是MapReduce的数倍速度上有非常明显的优势。 Spark相较于MapReduce速度快的最主要原因就在于MapReduce的计算模型太死板必须是map-reduce模式有时候即使完成一些诸如过滤之类的操作也必须经过map-reduce过程这样就必须经过shuffle过程。而 MapReduce的shuffle过程是最消耗性能的因为shuffle中间的过程必须基于磁盘来读写。而Spark的shuffle虽然也要基于磁盘但是其大量transformation操作比如单纯的map或者filter等操作可以直接基于内存进行pipeline操作速度性能自然大大提升。 但是Spark也有其劣势。由于Spark基于内存进行计算虽然开发容易但是真正面对大数据的时候比如一次操作针对10亿以上级别在没有进行调优的情况下可能会出现各种各样的问题比如OOM内存溢出等等。导致Spark程序可能都无法完全运行起来就报错挂掉了而MapReduce即使是运行缓慢但是至少可以慢慢运行完。 此外Spark由于是新崛起的技术新秀因此在大数据领域的完善程度肯定不如MapReduce比如基于HBase、Hive作为离线批处理程序的输入输出Spark就远没有MapReduce来的完善。实现起来非常麻烦。
5Spark Streaming与Storm Spark Streaming 与Storm都可以用于进行实时流计算。但是他们两者的区别是非常大的。其中区别之一就是Spark。 Streaming 和Storm的计算模型完全不一样Spark Streaming是基于RDD的因此需要将一小段时间内的比如1秒内的数据收集起来作为一个RDD然后再针对这个batch的数据进行处理。而Storm却可以做到每来一条数据都可以立即进行处理和计算。因此Spark Streaming实际上严格意义上来说只能称作准实时的流计算框架西Storm是真正意义上的实时计算框架。此外Storm支持的一项高级特性是Spark Streaming暂时不具备的即Storm支持在分布式流式计算程序Topolopy在运行过程中可以动态地调整并行度从而动态提高并发处理能力。而Spark Streaming是无法动态调整并行度的。 但是Spark Streaming也有其优点首先Spark Streaming由于是基于batch进行处理的因此相较于Storm基于单条数据进行处理具有数倍甚至数十倍的吞吐量。 此外Spark Streaming由于也身处于Spark生态圈内因此Spark Streaming可以与Spark Core、 Spark SQL甚至是Spark Mllib.Spark GraphX进行无缝整合。流式处理完的数据可以立即进行各种map、reduce转换操作可以立即使用sql进行查询甚至可以立即使用machine learning或者图计算算法进行处理。这种一站式的大数据处理功能和优势是Storm无法匹敌的。 因此综合上述来看通常在对实时性要求特别高而且实时数据量不稳定比如在白天有高峰期的情况下可以选择使用Storm。但是如果是对实时性要求一般允许1秒的准实时处理而且不要求动态调整并行度的话选择Spark Streaming是更好的选择。
6Spark SQL与Hive Spark SQL实际上并不能完全替代Hive,因为Hive是一种基于HDFS的数据仓库,并且提供了基于SQL模型的,针对存储了大数据的数据仓库,进行分布式交互查询的查询引擎。 严格的来说, Spark SQL能够替代的,是Hive的查询引擎,而不是Hive本身,实际上即使在生产环境下, SparkSQL也是针对Hive数据仓库中的数据进行查询, Spark本身自己是不提供存储的,自然也不可能替代Hive作为数据仓库的这个功能。 Spark SQL的一个优点,相较于Hive查询引擎来说,就是速度快,同样的SQL语句,可能使用Hive的查询引擎,由于其底层基于 MapReduce,必须经过 shuffle过程走磁盘,因此速度是非常缓慢的。很多复杂的SQL语句,在hive中执行都需要一个小时以上的时间。而 Spark SQLSpark由于其底层基于自身的基于内存的特点,因此速度达到了Hive查询引擎的数倍以上。 SQLSpark由于身处技术堆栈内,也是基于RDD来工作,因此可以与 Spark的其他组件无缝整合使用,配合起来实现许多复杂的功能。比如 Spark SQL支持可以直接针对hdfs文件执行sq语句。
二、Spark基本原理
1Spark Core
Spark Core是Spark的核心其包含如下几个部分
1spark 基础配置
sparkContext是spark应用程序的入口spark应用程序的提交和执行离不开sparkContext它隐藏了网络通信分布式部署消息通信存储体系计算存储等开发人员只需要通过sparkContext等api进行开发即可。
sparkRpc 基于netty实现分为异步和同步两种方式。事件总线主要用于sparkContext组件间的交换它属于监听者模式采用异步调用。度量系统主要用于系统的运行监控。
2spark 存储系统
它用于管理spark运行中依赖的数据存储方式和存储位置spark的存储系统优先考虑在各节点以内存的方式存储数据内存不足时将数据写入磁盘中这也是spark计算性能高的重要原因。
我们可以灵活的控制数据存储在内存还是磁盘中同时可以通过远程网络调用将结果输出到远程存储中比如hdfshbase等。
3spark 调度系统
spark 调度系统主要由DAGScheduler和TaskScheduler组成。
DAGScheduler 主要是把一个Job根据RDD间的依赖关系划分为多个Stage对于划分后的每个Stage都抽象为一个或多个Task组成的任务集并交给TaskScheduler来进行进一步的任务调度。而TaskScheduler 负责对每个具体的Task进行调度。
具体调度算法有FIFOFAIR
FIFO调度先进先出这是Spark默认的调度模式。 FAIR调度支持将作业分组到池中并为每个池设置不同的调度权重任务可以按照权重来决定执行顺序。
2Spark SQL spark sql提供了基于sql的数据处理方法使得分布式的数据集处理变的更加简单这也是spark 广泛使用的重要原因。
目前大数据相关计算引擎一个重要的评价指标就是是否支持sql这样才会降低使用者的门槛。spark sql提供了两种抽象的数据集合DataFrame和DataSet。
DataFrame 是spark Sql 对结构化数据的抽象可以简单的理解为spark中的表相比较于RDD多了数据的表结构信息(schema).DataFrame Data schema
RDD是分布式对象集合DataFrame是分布式Row的集合提供了比RDD更丰富的算子同时提升了数据的执行效率。
DataSet 是数据的分布式集合 它具有RDD强类型的优点 和Spark SQL优化后执行的优点。DataSet可以由jvm对象构建然后使用mapfilterflatmap等操作函数操作。
关于Spark SQL可以看这篇文章
https://blog.csdn.net/weixin_45366499/article/details/108749586
3Spark Streaming 这个模块主要是对流数据的处理支持流数据的可伸缩和容错处理可以与Flume和Kafka等已建立的数据源集成。Spark Streaming的实现也使用RDD抽象的概念使得在为流数据编写应用程序时更为方便。
关于Spark Streaming可以看这篇文章 https://blog.csdn.net/weixin_45366499/article/details/108816335
4Spark基本工作原理 Spark基本工作原理的理解其最主要的是要搞清楚什么是RDD以及RDD的特性。深刻理解了RDD的特性也就理解了数据在spark中是如何被处理的spark的基本工作原理
那么RDD是什么官方说法 RDD是Spark提供的核心抽象全称为Resillient Distributed Dataset即弹性分布式数据集。
最简单的理解 RDD就是源数据的抽象或者叫映射或者就代表。也就是说数据要被spark进行处理在处理之前的首要任务就是要将数据映射成RDD对于spark来说RDD才是我们处理数据的规则我只认RDD只有RDD通过我spark的计算引擎才能发挥巨大的威力
1分布式数据集 RDD是Spark提供的核心抽象全称为Resillient Distributed Dataset即弹性分布式数据集。 RDD在抽象上来说是一种元素集合包含了数据。它是被分区的分为多个分区每个分区分布在集群中的不同节点上从而让RDD中的数据可以被并行操作。
2弹性 RDD的数据默认情况下存放在内存中的但是在内存资源不足时Spark会自动将RDD数据写入磁盘。
3迭代式处理 对节点1、2、3、4上的数据进行处理完成之后可能会移动到其他的节点内存中继续处理Spark 与Mr最大的不同在与迭代式计算模型Mr分为两个阶段map和reduce两个阶段处理完了就结束了所以我们在一个job中能做的处理很有限只能在map和reduce中处理而spark计算过程可以分为n个阶段因为他是内存迭代式的我们在处理完一个阶段之后可以继续往下处理很多阶段而不是两个阶段。所以Spark相较于MR计算模型可以提供更强大的功能。
4容错性 RDD最重要的特性就是提供了容错性可以自动从节点失败中恢复过来。即如果某个节点上的RDD partition因为节点故障导致数据丢了那么RDD会自动通过自己的数据来源重新计算该partition。这一切对使用者是透明的。
三、Spark作业运行流程
1Spark作业运行流程 spark应用程序以进程集合为单位在分布式集群上运行通过driver程序的main方法创建sparkContext的对象与集群进行交互。具体运行流程如下
sparkContext向cluster Manager申请CPU内存等计算资源。cluster Manager分配应用程序执行所需要的资源在worker节点创建executor。sparkContext将程序代码和task任务发送到executor上进行执行代码可以是编译成的jar包或者python文件等。接着sparkContext会收集结果到Driver端。 2 Spark RDD迭代过程 sparkContext创建RDD对象计算RDD间的依赖关系并组成一个DAG有向无环图。 DAGScheduler将DAG划分为多个stage并将stage对应的TaskSet提交到集群的管理中心stage的划分依据是RDD中的宽窄依赖spark遇见宽依赖就会划分为一个stage每个stage中包含来一个或多个task任务避免多个stage之间消息传递产生的系统开销。 taskScheduler 通过集群管理中心为每一个task申请资源并将task提交到worker的节点上进行执行。 worker上的executor执行具体的任务。 3Yarn资源管理器介绍 spark 程序一般是运行在集群上的spark on yarn是工作或生产上用的非常多的一种运行模式。 没有yarn模式前每个分布式框架都要跑在一个集群上面比如说Hadoop要跑在一个集群上Spark用集群的时候跑在standalone上。这样的话整个集群的资源的利用率低且管理起来比较麻烦。 yarn是分布式资源管理和任务管理管理主要由ResourceManagerNodeManager和ApplicationMaster三个模块组成。 ResourceManager 主要负责集群的资源管理监控和分配。对于所有的应用它有绝对的控制权和资源管理权限。 NodeManager 负责节点的维护执行和监控task运行状况。会通过心跳的方式向ResourceManager汇报自己的资源使用情况。 yarn资源管理器的每个节点都运行着一个NodeManager是ResourceManager的代理。如果主节点的ResourceManager宕机后会连接ResourceManager的备用节点。 ApplicationMaster 负责具体应用程序的调度和资源的协调它会与ResourceManager协商进行资源申请。ResourceManager以container容器的形式将资源分配给application进行运行。同时负责任务的启停。 container 是资源的抽象它封装着每个节点上的资源信息(cpu,内存磁盘网络等)yarn将任务分配到container上运行同时该任务只能使用container描述的资源达到各个任务间资源的隔离。
4Spark程序在Yarn上执行流程 spark on yarn分为两种模式yarn-client模式和yarn—cluster模式一般线上采用的是yarn-cluster模式。
1yarn-client模式 driver在客户端本地执行这种模式可以使得spark application和客户端进行交互因为driver在客户端可以通过webUI访问driver的状态。同时Driver会与yarn集群中的Executor进行大量的通信会造成客户机网卡流量的大量增加。
2yarn-cluster模式 Yarn-Cluster主要用于生产环境中因为Driver运行在Yarn集群中某一台NodeManager中每次提交任务的Driver所在的机器都是随机的不会产生某一台机器网卡流量激增的现象缺点是任务提交后不能看到日志。只能通过yarn查看日志。
下图是yarn-cluster运行模式 client 向yarn提交应用程序包含ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等。ApplicationMaster程序启动ApplicationMaster的命令、需要在Executor中运行的程序等。ApplicationMaster向ResourceManager注册这样用户可以直接通过ResourceManage查看应用程序的运行状态。ApplicationMaster申请到资源也就是Container后便与对应的NodeManager通信启动Task。Task向ApplicationMaster汇报运行的状态和进度以让ApplicationMaster随时掌握各个任务的运行状态从而可以在任务失败时重新启动任务。应用程序运行完成后ApplicationMaster向ResourceManager申请注销并关闭自己。