Spark2.1.0之模块设计
在阅读本文之前,读者最好已经阅读了《Spark2.1.0之初识Spark》和《Spark2.1.0之基础知识》两篇文章。本文将主要介绍Spark2.1.0版本中的模块设计以及各个模块的功能和特点。
模块设计
整个Spark主要由以下模块组成:
- Spark Core:Spark的核心功能实现,包括:基础设施、SparkContext(Application通过SparkContext提交)、Spark执行环境(SparkEnv)、存储体系、调度系统、计算引擎、部署模式、任务提交与执行等。
- Spark SQL:提供SQL处理能力,便于熟悉关系型数据库操作的工程师进行交互查询。此外,还为熟悉Hive开发的用户提供了对Hive SQL的支持。
- Spark Streaming:提供流式计算处理能力,目前支持ApacheKafka、Apache Flume、Amazon Kinesis和简单的TCP套接字等数据源。在早期的Spark版本中还自带对Twitter、MQTT、ZeroMQ等的支持,现在用户想要支持这些工具必须自己开发实现。此外,Spark Streaming还提供窗口操作用于对一定周期内的流数据进行处理。
- GraphX:基于图论,实现的支持分布式的图计算处理框架。GraphX的基础是点、边等图论的理论。GraphX 基于图计算的Pregel模型提供了多种多样的Pregel API,这些Pregel API可以解决图计算中的常见问题。
- MLlib:Spark提供的机器学习库。MLlib提供了机器学习相关的统计、分类、回归等领域的多种算法实现。其一致的API接口大大降低了用户的学习成本。
Spark SQL、Spark Streaming、GraphX、MLlib的能力都是建立在核心引擎之上,如图2-4。
图2-4 Spark各模块依赖关系
Spark核心功能
Spark Core中提供了Spark最基础与最核心的功能,主要包括:
- 基础设施:在Spark中有很多基础设施,被Spark中的各种组件广泛使用。这些基础设施包括Spark配置(SparkConf)、Spark内置的Rpc框架(在早期Spark版本中Spark使用的是Akka)、事件总线(ListenerBus)、度量系统。SparkConf用于管理Spark应用程序的各种配置信息。Spark内置的Rpc框架使用Netty实现,有同步和异步的多种实现,Spark各个组件间的通信都依赖于此Rpc框架。如果说Rpc框架是跨机器节点不同组件间的通信设施,那么事件总线就是SparkContext内部各个组件间使用事件——监听器模式异步调用的实现。度量系统由Spark中的多种度量源(Source)和多种度量输出(Sink)构成,完成对整个Spark集群中各个组件运行期状态的监控。
- SparkContext:通常而言,用户开发的Spark应用程序(Application)的提交与执行都离不开SparkContext的支持。在正式提交Application之前,首先需要初始化SparkContext。SparkContext隐藏了网络通信、分布式部署、消息通信、存储体系、计算引擎、度量系统、文件服务、Web UI等内容,应用程序开发者只需要使用SparkContext提供的API完成功能开发。
- SparkEnv:Spark执行环境(SparkEnv)是Spark中的Task运行所必须的组件。SparkEnv内部封装了Rpc环境(RpcEnv)、序列化管理器、广播管理器(BroadcastManager)、map任务输出跟踪器(MapOutputTracker)、存储体系、度量系统(MetricsSystem)、输出提交协调器(OutputCommitCoordinator)等Task运行所需的各种组件。
- 存储体系:Spark优先考虑使用各节点的内存作为存储,当内存不足时才会考虑使用磁盘,这极大地减少了磁盘I/O,提升了任务执行的效率,使得Spark适用于实时计算、迭代计算、流式计算等场景。在实际场景中,有些Task是存储密集型的,有些则是计算密集型的,所以有时候会造成存储空间很空闲,而计算空间的资源又很紧张。Spark的内存存储空间与执行存储空间之间的边界可以是“软”边界,因此资源紧张的一方可以借用另一方的空间,这既可以有效利用资源,又可以提高Task的执行效率。此外,Spark的内存空间还提供了Tungsten的实现,直接操作操作系统的内存。由于Tungsten省去了在堆内分配Java对象,因此能更加有效的利用系统的内存资源,并且因为直接操作系统内存,空间的分配和释放也更迅速。在Spark早期版本还使用了以内存为中心的高容错的分布式文件系统Alluxio(Tachyon)供用户进行选择。Alluxio能够为Spark提供可靠的内存级的文件共享服务。
- 调度系统:调度系统主要由DAGScheduler和TaskScheduler组成,它们都内置在SparkContext中。DAGScheduler负责创建Job、将DAG中的RDD划分到不同的Stage、给Stage创建对应的Task、批量提交Task等功能。TaskScheduler负责按照FIFO或者FAIR等调度算法对批量Task进行调度;为Task分配资源;将Task发送到集群管理器分配给当前应用的Executor上由Executor负责执行等工作。现如今,Spark增加了SparkSession和DataFrame等新的API,SparkSession底层实际依然依赖于SparkContext。
- 计算引擎:计算引擎由内存管理器(MemoryManager)、Tungsten、任务内存管理器(TaskMemoryManager)、Task、外部排序器(ExternalSorter)、Shuffle管理器(ShuffleManager)等组成。MemoryManager除了对存储体系中的存储内存提供支持和管理,还外计算引擎中的执行内存提供支持和管理。Tungsten除用于存储外,也可以用于计算或执行。TaskMemoryManager对分配给单个Task的内存资源进行更细粒度的管理和控制。ExternalSorter用于在map端或reduce端对ShuffleMapTask计算得到的中间结果进行排序、聚合等操作。ShuffleManager用于将各个分区对应的ShuffleMapTask产生的中间结果持久化到磁盘,并在reduce端按照分区远程拉取ShuffleMapTask产生的中间结果。
Spark扩展功能
为了扩大应用范围,Spark陆续增加了一些扩展功能,主要包括:
- Spark SQL:由于SQL具有普及率高、学习成本低等特点,为了扩大Spark的应用面,因此增加了对SQL及Hive的支持。Spark SQL的过程可以总结为:首先使用SQL语句解析器(SqlParser)将SQL转换为语法树(Tree),并且使用规则执行器(RuleExecutor)将一系列规则(Rule)应用到语法树,最终生成物理执行计划并执行的过程。其中,规则包括语法分析器(Analyzer)和优化器(Optimizer)。Hive的执行过程与SQL类似。
- Spark Streaming:Spark Streaming与Apache Storm类似,也用于流式计算。SparkStreaming支持Kafka、Flume、Kinesis和简单的TCP套接字等多种数据输入源。输入流接收器(Receiver)负责接入数据,是接入数据流的接口规范。Dstream是Spark Streaming中所有数据流的抽象,Dstream可以被组织为DStreamGraph。Dstream本质上由一系列连续的RDD组成。
- GraphX:Spark提供的分布式图计算框架。GraphX主要遵循整体同步并行计算模式(Bulk Synchronous Parallell,简称BSP)下的Pregel模型实现。GraphX提供了对图的抽象Graph,Graph由顶点(Vertex)、边(Edge)及继承了Edge的EdgeTriplet(添加了srcAttr和dstAttr用来保存源顶点和目的顶点的属性)三种结构组成。GraphX目前已经封装了最短路径、网页排名、连接组件、三角关系统计等算法的实现,用户可以选择使用。
- MLlib:Spark提供的机器学习框架。机器学习是一门涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多领域的交叉学科。MLlib目前已经提供了基础统计、分类、回归、决策树、随机森林、朴素贝叶斯、保序回归、协同过滤、聚类、维数缩减、特征提取与转型、频繁模式挖掘、预言模型标记语言、管道等多种数理统计、概率论、数据挖掘方面的数学算法。
关于《Spark内核设计的艺术 架构设计与实现》
经过近一年的准备,基于Spark2.1.0版本的《 Spark内核设计的艺术 架构设计与实现》一书现已出版发行,图书如图:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里专家分享:企业级大数据轻量云实践
本文根据井诚老师于第九届中国数据库技术大会(DTCC 2018)的现场演讲《把大象装进冰箱 企业级大数据轻量云的实践》内容整理而成。 讲师介绍: 井诚,阿里巴巴技术专家,2004年毕业于哈尔滨工业大学,有着多年的商业IT软件系统与互联网行业的研发、测试与交付经验。目前服务于阿里集团计算平台事业部,主要从事大数据云服务工程化方面的工作。 分享大纲 1. 源起:阿里的象群们; 2. 轻量化过程中遇到的挑战; 3. 解决之道:切割象群; 4. 未来之路 一、阿里的象群们 首先给大家简要介绍一下阿里的象群,阿里的大数据服务比较多样、丰富,第一块就是我们的大数据计算服务MaxCompute,MaxCompute是用来做离线计算和处理的,第二块就是一个分析型的数据库,大概就是一个online或者MPP的数据库,然后第三块也是业内比较常见的流计算引擎,第四块就是数据通道服务DataHub,第五块就是阿里最著名的数据中台DataWorks。阿里的象群主要由这五块服务组成。 以下是这些服务在功能特性方面分别对应的开源界的一些生态的小伙伴,有些对比不一定恰当。最后一块DataWorks比较特殊,它是一个数...
- 下一篇
八年磨一剑,阿里云ApsaraDB for HBase2.0正式上线
一、HBase2.0和阿里云的前世今生 福利:国际顶级盛会HBaseCon Asia 2018将于8月在北京举行,目前正免费开放申请中,点击了解更多详情 ApsaraDBforHBase2.0于2018年6月6日即将正式发布上线啦! ApsaraDBforHBase2.0是基于社区HBase2.0稳定版的升级,也是阿里HBase多年的实践经验和技术积累的持续延伸,全面解决了旧版本碰到的核心问题,并做了很多优化改进,附加HBase2.0开源新特性,可以说是HBase生态里的一个里程碑。 HBase在2007年开始发布第一个“可用”版,2010年成为Apache的顶级项目,阿里巴巴集团也在2010当年就开始研究,于2011年就已经开始把HBase投入生产环境使用,并成为阿里集团主要的存储系
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8安装Docker,最新的服务器搭配容器使用
- 设置Eclipse缩进为4个空格,增强代码规范