二刷大数据(二)- Spark

Spark

Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎

Hadoop区别

Spark和Hadoop是两种广泛应用于大数据处理领域的框架,它们各有特点和适用场景,主要区别可以从以下几个方面进行概述:

  1. 数据处理模型

    • Hadoop:采用批处理模型,通过其核心组件MapReduce实现数据处理。MapReduce将数据分解成多个数据块,分别在集群节点上进行并行处理,然后将结果合并。这一过程涉及磁盘I/O,包括读取输入数据、中间结果写入磁盘、最终结果写回磁盘,因此对于需要大量磁盘读写交互的复杂迭代任务,效率相对较低。

    • Spark:基于内存计算模型,利用RDD(Resilient Distributed Datasets)作为核心数据结构,能够在内存中存储和计算数据,显著减少了对磁盘的依赖。Spark支持微批处理和流处理(通过Spark Streaming),能够对数据进行快速迭代和实时分析。内存中的数据分析速度相比Hadoop的磁盘计算有数量级的提升。

  2. 执行速度与性能

    • Hadoop:由于依赖磁盘I/O,Hadoop在处理大规模数据时虽然具备良好的可扩展性和容错性,但整体执行速度相对较慢,尤其不适合需要多次迭代或实时响应的应用。

    • Spark:由于在内存中进行计算,并且优化了数据管道和任务调度,Spark在处理相同任务时通常比Hadoop快几个数量级,特别是在处理需要多次访问同一数据集的迭代算法或交互式查询时。对于需要低延迟响应的流处理应用,Spark Streaming也提供了更高的性能。

  3. 编程模型与易用性

    • Hadoop:MapReduce编程模型相对较为繁琐,需要定义map()reduce()函数,且抽象层次较低,对于复杂数据处理逻辑可能需要多步MapReduce作业链式执行。

    • Spark:提供了更高级的API和丰富的库,如Spark SQL(支持SQL查询和DataFrame API)、Spark Streaming(流处理)、MLlib(机器学习)、GraphX(图计算)。这些库提供了更直观、面向对象的编程接口,使得开发者可以使用更简洁、高层的代码来表达复杂的计算逻辑,提高了开发效率和代码可读性。

  4. 资源管理与部署

    • Hadoop:包含YARN(Yet Another Resource Negotiator)作为资源管理系统,负责集群中任务的调度与监控。Hadoop生态系统还包括HDFS(Hadoop Distributed File System)作为分布式存储系统,以及HBaseHive等其他数据存储与查询组件。

    • Spark:虽然可以独立部署,但通常与Hadoop YARN或其它资源管理系统(如Mesos、Kubernetes)配合使用,充分利用已有的集群资源。Spark可以无缝读写HDFS上的数据,并且在YARN上进行任务调度。这种兼容性使得Spark可以作为Hadoop生态的一部分,补充其在实时计算和内存处理方面的不足。

  5. 应用场景

    • Hadoop:更适合处理海量静态数据的离线批处理任务,如日志分析、历史数据挖掘、大规模ETL(Extract, Transform, Load)等,以及需要高容错性和低成本存储的场景。

    • Spark:适用于需要快速响应、多次迭代、交互式查询和实时流处理的场景,如实时推荐系统、复杂事件处理、大规模机器学习训练与预测、即席查询等。

总结来说,Hadoop和Spark在大数据处理中扮演着互补的角色。Hadoop作为分布式存储和批处理的基础架构,擅长处理大规模静态数据和离线分析任务;而Spark凭借其内存计算、高效的数据处理管道和丰富的库支持,特别适合于需要高性能、低延迟和复杂分析的应用场景。在实际项目中,两者常被结合使用,利用Hadoop进行数据存储和初步处理,再通过Spark进行深度分析和实时计算。

核心组件

Apache Spark 是一个统一的大数据处理框架,以其高效、易用和灵活的特点而广受欢迎。Spark 的组成主要包括以下几个关键模块:

  1. Spark Core

    • 核心引擎:Spark Core 提供了基本的分布式任务调度、内存管理、错误恢复、I/O 接口以及度量收集等功能,构成了整个 Spark 框架的基础。它实现了 Spark 的基本分布式计算模型,包括任务调度、数据分片(partitioning)、任务执行和结果聚合等。

    • RDD(Resilient Distributed Datasets):Spark Core 中最重要的抽象是 RDD,这是一种容错的、可以并行操作的元素集合。RDD 支持两种类型的操作:转换(transformations)和行动(actions)。转换操作创建新的 RDD,而行动操作触发实际的计算并返回结果。RDD 具有容错性,如果数据丢失,可以通过记录的 lineage(血统)信息重新计算。

  2. Spark SQL

    • 结构化数据处理:Spark SQL 扩展了 Spark Core,提供了对结构化数据(如关系型数据表)的高效处理能力。它引入了 DataFrame 和 Dataset API,允许用户使用 SQL 查询语句或者面向对象的方式操作数据。Spark SQL 还包含了 Catalyst 查询优化器,能对 SQL 查询进行高级优化,并与 Hive Metastore 兼容,支持 HiveQL 查询和元数据管理。

    • Structured Streaming:基于 Spark SQL,Structured Streaming 提供了对无界和有界数据流的统一处理接口,允许用户以类似处理静态数据的方式来编写流处理程序。Structured Streaming 强调端到端的精确一次处理语义,以及与批处理一致的 API,简化了流批一体的应用开发。

  3. Spark Streaming

    • 实时流处理:Spark Streaming 是 Spark 对实时数据处理的支持,它将实时数据流划分为一系列小的批次(微批处理),并在 Spark 的批处理引擎上进行处理。Spark Streaming 提供了高吞吐、容错机制以及与 Spark Core、Spark SQL 和 MLlib 等其他组件的无缝集成,便于构建复杂的实时分析应用。
  4. MLlib

    • 机器学习库:MLlib 是 Spark 的机器学习库,包含了大量常用的机器学习算法、实用工具和数据类型,支持分类、回归、聚类、协同过滤、降维等任务。MLlib 支持在分布式环境中高效地训练模型,并且与 Spark 的分布式数据集紧密集成,便于在大规模数据集上进行机器学习。
  5. GraphX

    • 图计算:GraphX 是 Spark 中用于图处理和图并行计算的库,提供了图数据模型、图操作(如顶点和边的变换)、图算法(如PageRank、连通分量、三角计数等)以及图形化的可视化工具。GraphX 将图抽象为顶点(Vertex)和边(Edge)的集合,并支持属性图模型,允许在顶点和边上附加任意属性。

除了以上主要模块,Spark 还包括以下组成部分:

  • 运行模式:Spark 支持多种运行模式,适应不同的部署环境,包括:

    • 本地模式:在单机上运行,用于开发和测试。
    • Standalone 模式:使用 Spark 自身提供的内置资源管理框架,在独立集群中部署。
    • Hadoop YARN:在 Hadoop 集群中运行,利用 YARN 进行资源管理和调度。
    • Apache Mesos:在 Mesos 集群中运行,实现资源共享。
    • Kubernetes:在 Kubernetes 容器平台上部署 Spark 应用。
  • 集群管理器与守护进程:Spark 集群中包含主守护程序(Driver)和辅助进程(Executor)。主守护程序负责应用程序的初始化、任务调度、结果收集等,而辅助进程负责在工作节点上执行具体任务。

  • 连接器与数据源:Spark 提供了与多种数据源(如 HDFS、Cassandra、HBase、Kafka 等)的连接器,使得 Spark 应用能够轻松访问和处理这些数据源中的数据。

综上所述,Spark 由 Spark Core、Spark SQL、Spark Streaming、MLlib 和 GraphX 等核心模块组成,支持结构化数据处理、实时流处理、机器学习和图计算等多种大数据处理场景,并能够灵活部署在不同类型的集群环境中。

运行架构

Spark运行架构中,各个组件如Master、Application、Executor、Driver等各司其职,共同协作完成大数据处理任务。以下是它们各自的分工和作用:

Master&Worker

Master是Spark集群的主控节点,类似YARN的RM,负责整个集群的资源管理和作业调度。具体职责包括:

  1. 资源管理:Master监控集群中所有可用的工作节点(Worker Nodes),了解它们的内存、CPU等资源情况,并负责这些资源的分配。

  2. 作业调度:当接收到客户端提交的Spark应用程序(Application)时,Master根据应用程序的需求和当前集群资源状况,决定在哪些Worker Node上启动Executor,并为每个Executor分配合适的资源。

  3. 监控与协调:Master持续监控作业执行状态,包括Executor的生命周期管理、任务失败后的重试等。它还接收来自Worker和Driver的定期心跳,以确保集群的稳定运行和故障检测。

  4. 服务发现:Master提供服务注册和发现功能,使得Driver能够找到并与其管理的Executors通信。

Mater和Worker都是进程,类似于ResourceManager和NodeManager,运行在某个节点上

Application (Driver)

Application是指用户提交的Spark作业,由一个Driver程序代表。Driver是应用程序的主控进程,承担以下职责:

  1. 初始化:Driver启动时,会创建一个SparkContext对象,这是与Spark集群交互的核心接口。SparkContext负责与Master节点建立连接,提交应用程序及其资源需求。

  2. 任务解析与调度:Driver解析用户编写的Spark程序(使用RDD、DataFrame、Dataset等API编写),将其转化为一系列Jobs,每个Job又进一步细分为多个Stages(基于 Shuffle 操作划分)。Driver中的DAGScheduler负责将Job分解为Stage,并提交给TaskScheduler,后者负责将Stages转化为具体的Tasks并发送到各个Executor执行。

  3. 数据分发与结果收集:Driver负责将计算所需的数据分布到各个Executor上,并在Executor执行完Tasks后收集结果。对于Shuffle操作,Driver还会协调跨Executor之间的数据交换。

  4. 故障恢复:在出现Executor故障或其他异常时,Driver负责重新调度受影响的任务,以保证作业的容错性。

Executor

Executor是Worker Node上为特定Application启动的进程,负责实际的数据处理工作。每个Executor维护一个或多个线程池,每个线程可以执行一个Task。其主要职责包括:

  1. Task执行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值