深度解析 Spark(进阶):架构、集群运行机理与焦点组件详解 ...

打印 上一主题 下一主题

主题 991|帖子 991|积分 2973

关联阅读博客文章:深度解析SPARK的基本概念

弁言:


Apache Spark作为一种快速、通用、可扩展的大数据处置惩罚引擎,在大数据范畴中备受关注和应用。本文将深入探讨Spark的集群运行原理、焦点组件、工作原理以及分布式盘算模型,带领读者深入相识Spark技术的内在机制和运行原理。
Spark集群模式的工作原理

Spark可以以多种方式摆设在集群上,包括独立摆设、YARN模式、Mesos模式等。下面将详细先容Spark集群模式的工作原理,以Spark Standalone模式为例:
1. 架构概述
在Spark Standalone模式下,集群由一个主节点(Master)和多个工作节点(Worker)组成。主节点负责资源调度和任务分配,而工作节点负责实验任务。主节点和工作节点之间通过RPC进行通信。
2. 工作原理
2.1 主节点(Master)的工作


  • 资源管理:
    主节点负责管理集群中的资源,包括CPU、内存、实验器(Executor)等。它会周期性地向工作节点发送心跳消息,以监控工作节点的状态。
  • 任务调度:
    当有任务提交到集群时,主节点负责将任务分配给空闲的工作节点,并监控任务的实验环境。它会根据工作节点的负载环境和任务的资源需求进举措态调度,以实现资源的高效利用。
  • 高可用性:
    主节点可以配置为高可用模式,通过备用主节点来实现容错和故障转移。在主节点发生故障时,备用主节点会接管主节点的角色,确保集群的稳固运行。
2.2 工作节点(Worker)的工作


  • 资源分配:
    工作节点向主节点注册,并陈诉自身的资源环境。主节点根据工作节点的资源容量和负载环境来分配任务,并启动实验器(Executor)来实验任务。
  • 任务实验:
    工作节点启动的实验器负责实验任务,包括加载数据、实验盘算、生成效果等。实验器会在工作节点上启动一个或多个线程来并行实验任务,以提高盘算性能。
  • 心跳监测:
    工作节点定期向主节点发送心跳消息,以陈诉自身的状态和资源利用环境。主节点根据心跳消息来监控工作节点的健康状况,并根据必要进行调度和资源重分配。
3. 任务调度与实验流程

  • 用户提交任务到Spark集群。
  • 主节点吸取到任务请求,并进行资源分配和调度,将任务分配给空闲的工作节点。
  • 工作节点启动实验器,并在实验器中实验任务。
  • 实验器从存储系统(如HDFS)中加载数据,进行盘算,并将效果写回存储系统。
  • 实验器定期向主节点发送心跳消息,陈诉任务实验环境和资源利用环境。
  • 主节点根据心跳消息监控工作节点的状态,并根据必要进行任务重分配和资源调度。
集群模式概述

Spark 应用程序作为集群上独立的历程集运行,由SparkContext 主程序(称为驱动程序)中的对象进行协调。
具体来说,为了在集群上运行,SparkContext 可以毗连到多种类型的集群管理器 (Spark 自己的独立集群管理器、Mesos、YARN 或 Kubernetes),这些集群管理器跨应用程序分配资源。毗连后,Spark 会获取集群中节点上的实验程序,这些实验程序是为应用程序运行盘算和存储数据的历程。接下来,它将您的应用程序代码(由传递到 SparkContext 的 JAR 或 Python 文件定义)发送到实验器。末了,SparkContext将任务发送给实验器来运行。

关于此架构,有几个有用的事项必要注意:


  • 每个应用程序都有自己的实验程序历程,这些历程在整个应用程序的连续时间内保持运行并在多个线程中运行任务。这样做的好处是可以在调度端(每个驱动程序调度自己的任务)和实验器端(来自差别应用程序的任务在差别的 JVM 中运行)将应用程序彼此隔离。但是,这也意味着如果不将数据写入外部存储系统,则无法在差别的 Spark 应用程序(SparkContext 实例)之间共享数据。
  • Spark 对于底层集群管理器是不可知的。只要它能够获取实验程序历程,并且这些历程相互通信,纵然在也支持其他应用程序(比方Mesos/YARN/Kubernetes)的集群管理器上运行它也相对容易。
  • 驱动程序必须在其整个生命周期中侦听并接受来自其实验程序的传入毗连(比方,请参阅网络配置部门中的spark.driver.port)。因此,驱动程序必须可从工作节点进行网络寻址。
  • 由于驱动程序在集群上调度任务,因此它应该靠近工作节点运行,最幸亏同一局域网上。如果您想长途向集群发送请求,最好向驱动程序打开 RPC 并让它从附近提交操作,而不是在阔别工作节点的地方运行驱动程序。
集群管理器类型

系统现在支持多种集群管理器:


  • Standalone ——Spark 附带的一个简单的集群管理器,可以轻松设置集群。
  • Apache Mesos – 通用集群管理器,还可以运行 Hadoop MapReduce 和服务应用程序。 (已弃用)
  • Hadoop YARN – Hadoop 3 中的资源管理器。
  • Kubernetes – 一个用于自动化摆设、扩展和管理容器化应用程序的开源系统。
Spark 是如何工作的?

这是Spark架构的详细图。
泉源

看成业进入时,驱动程序将代码转换为逻辑有向无环图 (DAG)。然后,驱动程序实验某些优化,比方管道转换。
此外,它将 DAG 转换为具有阶段集的物理实验计划。同时,它在每个阶段下创建称为任务的小型实验单元。然后它网络全部任务并将其发送到集群。
它是与集群管理器对话并协商资源的驱动程序。此集群管理器代表驱动程序启动实验程序后。此时,基于数据,放置驱动程序将任务发送到集群管理器。
在实验器开始实验之前,实验器将自己注册到驱动程序中。使驱动程序拥有全部实验者的整体视图。
如今,Executors 实验 driver 分配的全部任务。同时,应用程序运行时,驱动程序监视运行的实验器。在spark架构中驱动程序调度将来的任务。
全部任务都根据数据放置来跟踪缓存数据的位置。当它调用sparkcontext的stop方法时,它会终止全部的实验器。之后,它从集群管理器中释放资源。
Spar的焦点组件


Spark 框架包括:


  • Spark Core 是该平台的底子
  • 用于交互式查询的 Spark SQL
  • 用于及时分析的 Spark Streaming
  • 用于机器学习的 Spark MLlib
  • 用于图形处置惩罚的 Spark GraphX
1. Spark Core
Spark Core是Spark生态系统的焦点模块,提供了分布式任务调度、内存管理、错误规复和与存储系统交互的功能。其主要特性包括:


  • RDD(Resilient Distributed Dataset):
    RDD是Spark中最基本的抽象,代表一个不可变、可分区、可以并行操作的数据集。RDD可以通过读取外部数据源(如HDFS、HBase、本地文件等)或在其他RDD上进行操作来创建。
  • 分布式任务调度:
    Spark Core利用基于DAG(有向无环图)的任务调度模型来实验盘算任务。它将用户程序转换为DAG图,根据依靠关系并行实验任务。
  • 内存盘算:
    Spark Core充分利用内存盘算技术,将中间数据存储在内存中,从而大大提高了盘算速率。此外,Spark还提供了可配置的内存管理机制,利用户可以根据应用程序的特点进行调优。
2.Spark Streaming
Spark Streaming是Spark提供的用于及时流数据处置惩罚的组件,可以实现对连续不停的数据流进行及时盘算和分析。Spark Streaming 是焦点 Spark API 的扩展,可实现实时数据流的可扩展、高吞吐量、容错流处置惩罚。数据可以从许多泉源(如 Kafka、Kinesis 或 TCP 套接字)获取,并且可以利用用高级函数(如 map、reduce、join 和 window)表示的复杂算法进行处置惩罚。末了,处置惩罚后的数据可以推送到文件系统、数据库和及时仪表板。事实上,您可以将Spark的 机器学习和 图处置惩罚算法应用在数据流上。

在内部,它的工作原理如下。 Spark Streaming吸取及时输入数据流,并将数据分成批次,然后由Spark引擎处置惩罚以批次生成最终效果流。

Spark Streaming 提供了称为离散流或DStream的高级抽象,它表示连续的数据流。 DStream 可以通过来自 Kafka 和 Kinesis 等源的输入数据流创建,也可以通过在其他 DStream 上应用高级操作来创建。在内部,DStream 表示为RDD序列 。
其主要特性包括:


  • 微批处置惩罚:
    Spark Streaming将及时数据流分成小批次进行处置惩罚,每个批次的数据都可以作为一个RDD进行处置惩罚。这种微批处置惩罚的方式既包管了低延迟,又兼顾了高吞吐量。
  • 容错性:
    Spark Streaming具有与Spark Core相同的容错性,能够在节点故障时进行数据规复和任务重启,包管数据处置惩罚的可靠性。
建议结合阅读官方文档以加深对 Spark Streaming的明白。
Spark 流编程指南
3.Spark SQL
Spark SQL 是 Spark 生态系统中的一个组件,用于结构化数据的处置惩罚和分析。它提供了 SQL 查询、DataFrame API、集成外部数据源等功能,利用户可以利用标准的 SQL 语句或编程接口来处置惩罚大规模的结构化数据。下面将详细睁开 Spark SQL 的特点、组成部门以及应用场景。
特点


  • 结构化数据处置惩罚
    Spark SQL 专注于结构化数据的处置惩罚,支持将数据加载为 DataFrame,并提供了丰富的操作和转换,如选择、过滤、聚合、毗连等。
  • SQL 查询支持
    Spark SQL 提供了对标准 SQL 查询语句的支持,用户可以直接在 Spark 中实验 SQL 查询,对数据进行查询、筛选、聚合等操作,无需编写复杂的代码。
  • DataFrame API
    除了 SQL 查询之外,Spark SQL 还提供了 DataFrame API,利用户可以利用类似于 Pandas 的编程接口来操作数据。DataFrame API 提供了丰富的函数和操作,可以完成各种数据处置惩罚任务。
  • 外部数据源集成
    Spark SQL 支持与多种外部数据源的集成,包括 HDFS、Hive、JDBC、Parquet、Avro 等。用户可以轻松地从这些数据源中读取数据,并进行处置惩罚和分析。
组成部门


  • Catalyst 查询优化器:
    Catalyst 是 Spark SQL 中的查询优化器,负责将 SQL 查询转换为实用于 Spark 的实验计划,并对实验计划进行优化。它采用了基于规则和代价模型的优化策略,可以大大提高查询性能。
  • Tungsten 实验引擎:
    Tungsten 是 Spark SQL 中的实验引擎,负责实验查询计划并进行数据处置惩罚。它采用了基于内存的列存储和代码生成技术,可以大大提高数据处置惩罚的速率和服从。
  • Hive 兼容性:
    Spark SQL 兼容 Hive,可以直接读取 Hive 表并实验 HiveQL 查询。它还支持将 Hive UDF(User Defined Function)注册为 Spark SQL 函数,从而实现更丰富的数据处置惩罚功能。
4.MLlib(机器学习库)
MLlib是Spark生态系统中的机器学习库,提供了丰富的机器学习算法和工具,可以用于数据挖掘、预测分析、分类、聚类等任务。MLlib的设计目标是实现可扩展性、易用性和高性能,使得用户能够在大规模数据集上进行高效的机器学习盘算。
特性


  • 可扩展性
    MLlib采用了分布式并行盘算模型,可以在大规模数据集上进行高效的机器学习盘算。它利用了Spark的RDD(Resilient Distributed Dataset)数据抽象和并行盘算引擎,实现了对数据的分布式处置惩罚和算法的并行实验,从而能够处置惩罚PB级别的数据集。
  • 易用性
    MLlib提供了简单易用的API,使得用户可以轻松地构建和调解机器学习模型。它提供了丰富的机器学习算法和工具,并支持常见的数据格式,如RDD、DataFrame等,同时也提供了丰富的文档和示例,帮助用户快速上手息争决问题。
  • 高性能
    MLlib的底层实现采用了高效的并行盘算算法和数据结构,能够充分利用集群的盘算资源,并通过优化算法和数据处置惩罚流程来提高盘算性能。此外,MLlib还支持在内存中进行盘算,可以大大提高盘算速率。
主要组成部门


  • 分类与回归
    MLlib提供了一系列的分类和回归算法,包括逻辑回归、决定树、随机森林、梯度提拔树等。这些算法可以用于解决分类和回归问题,如预测用户点击率、预测房价等。
  • 聚类
    MLlib提供了多种聚类算法,如K均值、高斯混合模型等。这些算法可以用于将数据集分别成若干个种别,并找出种别之间的相似性和差异性。
  • 协同过滤
    MLlib提供了基于协同过滤的保举算法,如瓜代最小二乘法(ALS)等。这些算法可以用于构建保举系统,预测用户对商品的喜好程度,从而实现个性化保举。
  • 降维与特征提取
    MLlib提供了多种降维和特征提取算法,如主身分分析(PCA)、奇特值分解(SVD)等。这些算法可以用于减少数据维度、提取数据特征,从而简化模型和提高盘算服从。
  • 模型评估与调优
    MLlib提供了多种模型评估和调优的工具,如交叉验证、网格搜索等。这些工具可以帮助用户评估模型的性能、选择符合的参数,并优化模型的预测本事。
5.GraphX(图盘算库)

GraphX 是 Spark 中用于图和图并行盘算的新组件。在较高层面上,GraphX通过引入新的图抽象来扩展 Spark RDD:一个具有附加到每个顶点和边的属性的有向多重图。为了支持图盘算,GraphX 公开了一组基本运算符(比方subgraph、joinVertices和 aggregateMessages)以及Pregel API 的优化变体。此外,GraphX 还包罗越来越多的图形算法和 构建器,以简化图形分析任务。
特点


  • 高级抽象
    GraphX 提供了一种高级抽象的方式来表示图数据,将图抽象为顶点和边的集合,并支持属性的附加。用户可以通过简单的 API 来构建和操作图数据,而无需关注底层的数据结构和实现细节。
  • 并行盘算
    GraphX 利用 Spark 的分布式盘算模型来实现图的并行盘算,可以在大规模数据集上高效地进行图算法的盘算。它将图分别成多个分区,并利用并行盘算技术来加速盘算过程,提高盘算性能。
  • 容错性
    GraphX 具有与 Spark Core 相同的容错性,能够在节点故障时进行数据规复和任务重启,包管图盘算的可靠性。它利用 RDD 的弹性特性和日记记录来实现容错机制,确保盘算的正确性和一致性。
组成部门


  • 图抽象
    GraphX 将图抽象为顶点(Vertex)和边(Edge)的集合,每个顶点和边都可以附加属性。用户可以通过构建顶点和边的集合来创建图对象,并对图进行操作和转换。
  • 图操作
    GraphX 提供了丰富的图操作和转换,如图的毗连、过滤、映射、聚合等。用户可以利用这些操作来对图进行数据处置惩罚和分析,如查找最短路径、盘算图的连通分量等。
  • 图算法
    GraphX 实现了多种常见的图算法,如 PageRank、图搜索、最短路径算法等。用户可以直接调用这些算法来解决图相干的问题,而无需自己实现复杂的算法逻辑。
建议结合阅读官方文档以加深对 GraphX 的明白。
GraphX 编程指南

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表