加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • PART1:Spark是什么
    • PART2:Spark的特点
    • PART3:Spark的生态系统
    • PART4:Spark的部署模式
    • PART5:Spark的运行架构
    • PART6:PySpark库介绍
    • PART7:快速入门PySpark
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

一文理解Spark的基本概念和工作原理

02/28 08:52
1941
阅读需 21 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

在Hadoop 1.x版本中,采用的是MRv1版本的MapReduce编程模型,包括3个部分:运行时环境(JobTracker和TaskTracker)、编程模型(MapReduce)、数据处理引擎(MapTask和ReduceTask)。但是MRv1存在以下不足:

1)可扩展性差。在运行时,JobTracker既负责资源管理,又负责任务调度,当集群繁忙时JobTracker很容易成为瓶颈,最终导致它的可扩展性问题。

2)可用性差。采用了单节点的Master,没有备用Master及选举操作,这就存在单点故障的问题,一旦Master出现故障,整个集群将不可用。

3)资源利用率低。TaskTracker使用slot来划分节点上的CPU、内存等资源,并将空闲的slot分配给Task使用,一个Task只有在获得slot后才有机会进行运行。但是一些Task并不能充分利用获得的slot,导致slot有空闲,而其他Task又无法使用这些空闲资源。

Apache为了解决MRv1中的缺陷,对Hadoop进行了升级改造及重构,就有了MRv2。MRv2重构了MRv1中的运行时环境,将原来的JobTracker拆分成集群资源调度平台(ResourceManager)、节点资源管理者(NodeManager)、任务管理者(ApplicationMaster),这就是后来Hadoop中的YARN。除

了运行时环境,编程模型和数据处理引擎变成了可插拔的,可以用其他框架模型来替换,比如Spark。

PART1:Spark是什么

官方网站表明Spark是一个用于大规模数据(Large-scala Data)分析的统一引擎(Unified Engine)。Apache Spark™是一个多语言引擎,用于在单节点机器或集群上执行数据工程、数据科学和机器学习。

Spark最早源于加州大学柏克莱分校的Matei Zaharia等人发表的一篇论文“Resilient Distributed Datasets: A Fault-Tolerant Abstraction for In-Memory Cluster Computing”。Spark借鉴了MapReduce的思想,保留了分布式并行计算的优点并改进了其明显的缺陷,对MapReduce做了大量的优化,例如减少磁盘I/O、增加并行度、避免重新计算、以及采用内存计算及灵活的内存管理策略等。Spark提出了一种弹性分布式数据集(Resilient Distributed Datasets,RDD)的概念,RDD是一种分布式内存数据抽象,使得程序员能够在大规模集群中做内存运算,并且有一定的容错方式,而这也是整个Spark的核心数据结构,Spark整个平台都围绕着RDD进行。中间数据存储在内存中提高了运行速度,并且Spark提供丰富的操作数据的API,提高了开发速度。

Spark是如何处理数据的?Spark会将HDFS中文件的每个数据块读取为RDD的一个分区(Partition),每个分区会启动一个计算任务(Task),以实现大规模数据集的并行计算,过程如图2所示。

图2.Spark如何处理数据

Spark是一款分布式内存计算的统一分析引擎,其特点就是对任意类型的数据进行自定义计算,可以计算结构化、半结构化、非结构化等各种类型的数据结构。Spark的适用面比较广,所以被称为统一的分析引擎,它同时支持使用Python、Java、Scala、R以及SQL语言开发应用程序处理数据。

PART2:Spark的特点

Spark具有运行速度快、易用性好、通用性强和随处运行等特点。

1)速度快。由于Apache Spark支持内存计算,并且通过有向无环图(DAG)执行引擎支持无环数据流,所以官方宣称其在内存中的运算速度要比Hadoop的MapReduce快100倍,在硬盘中要快10倍。Spark处理数据与MapReduce处理数据相比,有两个不同点:其一,Spark处理数据时,可以将中间处理结果数据存储到内存中;其二,Spark提供了非常丰富的算子(API),可以做到复杂任务在一个Spark程序中完成。

2)易用性好。Spark的版本已经更新到3.4.0(截至2023年4月13日),支持包括 Java、Scala、Python、R和SQL语言在内的多种语言。为了兼容Spark 2.x企业级应用场景,Spark仍然持续更新Spark 2.x版本。

3)通用性强。在Spark核心基础上,Spark还提供了包括Spark SQL、Spark Streaming、MLlib 及GraphX在内的多个工具库,可以在一个应用中无缝地使用这些工具库。

4)随处运行。Spark支持多种运行方式,包括在YARN和Mesos上支持独立集群运行模式,同时也可以运行在云Kubernetes(Spark 2.3开始支持)和云环境上。

5)批处理/流数据。可以使用首选语言(Python、SQL、Scala、Java或R)以批处理和实时流的方式统一数据处理。

6)SQL分析。执行快速、分布式的ANSI
SQL查询,用于仪表板和即席报告。运行速度比大多数数据仓库都快。

7)大规模数据科学。对PB级数据执行探索性数据分析(EDA),而无须采用缩减采样。

8)机器学习。在笔记本电脑上训练机器学习算法,并使用相同的代码扩展到数千台计算机的容错群集。

PART3:Spark的生态系统

Spark有一套自己的生态体系,以Spark为核心(Spark Core),并提供支持SQL语句操作的Spark SQL模块、支持流式计算的Spark Streaming模块、支持机器学习的MLlib模块、支持图计算的GraphX模块。在资源调度方面,Spark支持自身独立集群的资源调度、YARN及Mesos等资源调度框架。Spark的体系架构如图3所示。

图3.Spark的体系架构

1)Spark Core。包含Spark的基本功能,包含任务调度、内存管理、容错机制等,内部采用RDD数据抽象,并提供了很多API来创建和操作这些RDD。为其他组件提供底层的服务。

2)Spark SQL。用来操作结构化数据的核心组件,通过Spark SQL可以直接查询Hive、 HBase等多种外部数据源中的数据。Spark SQL能够统一处理关系表,在处理结构化数据时,开发人员无须编写MapReduce程序,直接使用SQL命令就能完成更复杂的数据查询操作。

3)Spark Streaming。Spark提供的流式计算框架,支持高吞吐量、可容错处理的实时流式数据处理,其核心原理是将流式数据分解成一系列微小的批处理作业,每个微小的批处理作业都可以使用Spark Core进行快速处理。Spark Streaming支持多种数据来源,如文件、Socket、Kafka、Kinesis等。

4)MLlib。Spark提供的关于机器学习功能的算法程序库,包括分类、回归、聚类、协同过滤算法等,还提供了模型评估、数据导入等额外的功能,开发人员只需了解一定的机器学习算法知识就能进行机器学习方面的开发,降低了学习成本。

5)GraphX。Spark提供的分布式图处理框架,拥有图计算和图挖掘算法的API接口以及丰富的功能和运算符,极大地方便了对分布式图的处理,能在海量数据上运行复杂的图算法。

PART4:Spark的部署模式

Spark提供多种部署模式,包括:

1)本地模式(单机模式)。本地模式就是以一个独立的进程,通过其内部的多个线程来模拟整个Spark运行时环境。本地模式不适合用于生产环境,仅用于本地程序开发、代码验证等。

2)独立集群模式(集群模式)。Spark中的各个角色以独立进程的形式存在,并组成Spark集群环境,这种模式下Spark自己独立管理集群的资源。

3)Spark on YARN模式(集群模式)。Spark中的各个角色运行在YARN的容器内部,并组成Spark集群环境,这种模式下Spark不再管理集群的资源,而由YARN进行集群资源管理。

4)Kubernetes模式(容器集群)。Spark中的各个角色运行在Kubernetes的容器内部,并组成Spark集群环境。

5)云服务模式(运行在云平台上)。Spark的商业版本Databricks就运行在谷歌、微软、亚马逊云服务提供商的云平台上。

PART5:Spark的运行架构

从物理部署层面上看,如果是独立集群模式部署的集群,则Spark主要包含两种类型的节点:Master节点和Worker节点。Master节点负责管理集群资源,分配Application到Worker节点,维护Worker节点、Driver和Application的状态。

Worker节点负责具体的任务运行。如果是运行在YARN环境下,则不需要Master节点和Worker节点。

从程序运行层面上看,Spark主要分为Driver和Executor。Driver充当单个Spark任务运行过程中的管理者,Executor充当单个Spark任务运行过程中的执行者。Spark中的4类角色组成了Spark的整个运行时(Runtime)环境。这些角色与YARN中的各个角色有类似的地方。

在集群资源管理层面:整个集群的管理者,在YARN中是ResourceManager,在Spark中是Master;单个节点的管理者,在YARN中是NodeManager,在Spark中是Worker。在任务执行层面:单个任务的管理者,在YARN中是ApplicationMaster,在Spark中是Driver;单个任务的执行者,在YARN中是Task,在Spark中是Executor。Spark官方提供的运行结构如下图所示。

图4.Spark的运行结构

在Spark的运行结构中涉及一些关键概念:

1)Master Node。集群中的主节点,负责集群的资源管理。

2)Worker Node。可以在集群中运行应用程序代码的任何节点。

3)Application。基于Spark构建的用户应用程序。由集群上Driver程序和Executor执行。

4)Driver程序。运行应用程序的main()函数,并创建SparkContext的过程。

5)Executor。为Worker节点上的应用程序启动的进程,用于运行任务并将数据保存在内存中或跨磁盘存储。每个Application都分配有自己的Executor。

6)Cluster Manager(集群管理者)。用于获取、管理集群上的资源,如果是独立集群模式部署的集群则是Standalone Manager,否则就是外部服务,例如Mesos、YARN、Kubernetes。

7)Job。Spark的数据抽象是RDD,RDD提供了很多算子(API),这些算子被划分为Transformation和Action算子两种类型。Transformation算子只构建程序的执行计划,但并不会执行;Action算子的作用是触发Spark程序的真正执行。为了响应Action算子,当程序中遇到一个Action算子时,Spark会提交一个Job,用来真正执行前面的一系列操作。通常一个Application会包含多个Job,Job之间按串行方式依次执行。

8)Stage。每个Job会根据Shuffle依赖划分为更小的任务集,称为Stage(阶段),Stage之间具有依赖关系及执行的先后顺序,比如MapReduce中的map stage和reduce stage。

9)Task。Stage再细分就是Task(任务),Task是发送给一个Executor的最细执行单元,RDD的每个Partition都会启动一个Task,因此每个Stage中Task的数量就是当前Stage的并行度。

PART6:PySpark库介绍

Spark是用Scala语言编写的,运行在JVM上,即Spark的任务都是以JVM的进程来运行的。Python是机器学习的首选语言,Python编写的代码运行在Python进程里面。在Python代码中想要调用Spark的API,就涉及Python进程与JVM进程之间的通信与交互,想要实现这样不同进程之间的交互,就需要用到远程过程调用(RPC)。

Py4j是一个非常有趣的RPC库,它可以在JVM进程开辟一个ServerSocket来监听客户端的连接,在Python进程端启动一个连接池连接到JVM,所有的远程调用都被封装成消息指令,通过连接池中的连接将消息指令发送到JVM远程执行。

Py4j实现了让Python自由操纵Java,借助Py4j就可以实现在Python代码中调用Spark的API,但是,每次调用Spark的API都让开发人员自己编写RPC代码,效率低下且不易使用。为了让Spark支持Python,Apache Spark社区发布了一个工具库PySpark,PySpark是Python中Apache Spark的接口。SparkContext作为Spark应用程序的入口,执行Spark应用程序会优先在Driver端创建SparkContext。

在Python Driver端,SparkContext利用Py4j启动一个JVM并创建JavaSparkContext,借助Py4j实现Python代码与JavaSparkContext的通信。Python环境下的RDD会被映射成Java环境下的PythonRDD。在Executor端,PythonRDD对象会启动一些子进程,并与这些子进程通信,以此来发送数据和执行代码。PySpark的架构如下图所示。

图5.PySpark架构

大多数数据科学家和数据分析师都熟悉Python,并使用它来实现机器学习,PySpark允许他们在大规模分布式数据集上使用自己最熟悉的语言。

以上内容节选自《PySpark大数据分析实战》

作者:伍鲜 常丽娟

PART7:快速入门PySpark

为了帮助大家快速掌握PySpark大数据分析核心技术,我们邀请中电金信软件有限公司高级软件工程师、《PySpark大数据分析实战》作者,伍鲜老师。于2月29日(周四),为大家带来免费直播分享,“程序员核心技能提升”系列直播讲座 第13讲——如何快速入门PySpark大数据分析

直播主题:程序员核心技能提升”系列直播讲座 第13讲——如何快速入门PySpark大数据分析开放时间:2024年2月29日(周四)20:00主讲老师:伍鲜课程类型:视频直播观看平台: 九州云播平台, 机械工业出版社“IT有得聊”视频号

合作媒体:SegmentFault 思否、蔻享学术、示说网、志明与数据、数据社

讲师介绍:伍鲜,中电金信软件有限公司高级软件工程师

拥有多年金融领域大数据处理实战经验,曾负责多家银行的Teradata数据仓库、FusionInsight大数据集群、阿里云大数据仓库、智能营销客户集市和客户中心建设。

撰  稿  人:计旭

责任编辑:张淑谦

审  核  人:曹新宇

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
DSC1001DL5-025.0000 1 Microchip Technology Inc OSC MEMS 25.000MHZ CMOS SMD

ECAD模型

下载ECAD模型
$2.07 查看
TLP185(SE(T 1 Toshiba America Electronic Components NPN-OUTPUT DC-INPUT OPTOCOUPLER,1-CHANNEL,3.75KV ISOLATION,SO

ECAD模型

下载ECAD模型
$0.21 查看
AT24C02D-MAHM-T 1 Microchip Technology Inc IC EEPROM 2KBIT 1MHZ 8MINIMAP

ECAD模型

下载ECAD模型
$0.6 查看

相关推荐

电子产业图谱