Spark

[TOC]

大数据的 5V 特征

  • Volume(大量):大数据的体量非常庞大,其数据量往往以亿计或更多,数据的增长速度也非常快,需要更多的存储和处理能力。
  • Velocity(高速):大数据的生成速度很快,很多数据源每秒钟会产生数千甚至数百万条数据。此外,对于实时数据处理,数据的产生和处理速度都需要非常快。
  • Variety(多样):大数据不仅包括结构化数据,还包括半结构化和非结构化数据,如文本、音频、视频、图像等,来源也十分广泛,如社交媒体、移动设备、物联网等。
  • Veracity(真实性):大数据中的数据质量千差万别,需要进行数据清洗和验证,确保数据的准确性和可信度。
  • Value(价值):大数据的价值在于能够从海量数据中发现隐藏的模式和信息,做出更好的决策,并提供更好的产品和服务。

Spark 产生背景

MapReduce存在以下局限性:

  • 仅支持Map和Reduce。数据处理每一步都需要一个Map和Reduce,而有的数据不需要整套流程
  • 处理效率低:Map中间结果需要写入磁盘,Reduce的结果需要写入HDFS;任务调度开销大;jvm频繁创建与销毁
  • Map和Reduce均需要排序,但是有的任务不需要排序
  • 不适合做迭代计算,交互式处理、流式处理

Spark 优点

Spark相较于MapReduce模型有以下优点:

  • 运行速度快:Spark使用内存计算,相比于MapReduce使用磁盘计算,Spark的速度更快。
  • 通用性强:Spark除了支持批处理外,还支持实时处理、流处理、机器学习、图计算等各种应用场景,可以满足不同需求的数据处理需求。
  • 易用性好:API丰富;支持多种编程语言;易于部署
  • 兼容性好:Spark可以与其他大数据框架集成,使用内置的资源管理器Standalone也可以读取HDFS,HBase等产品中的数据

Spark 应用场景

  • 批处理:Spark可以应用于大规模的离线批处理任务,例如数据清洗、数据分析、机器学习、图形处理等。
  • 实时处理:Spark可以应用于需要快速处理实时数据流的场景,例如网络日志分析、广告实时竞价、物联网等。
  • 交互式查询:Spark可以应用于需要快速响应用户查询的场景,例如数据仓库查询、数据可视化、BI分析等。
  • 流式处理:Spark可以应用于大规模的流式数据处理任务,例如实时计算、实时分析、实时预测等。

Spark 生态系统

  • Spark Core:Spark的核心组件,提供了分布式计算的基本功能,例如任务调度、内存管理和分布式数据处理等。
  • Spark SQL:一个基于Spark的分布式SQL查询引擎,可以将SQL查询和Spark程序结合起来,提供了SQL查询和DataFrame的API。
  • Spark Streaming:一个基于Spark的流处理引擎,支持从各种数据源接收流数据,并进行实时计算和分析。
  • MLlib:一个基于Spark的机器学习库,提供了各种机器学习算法的实现,例如分类、回归、聚类和推荐等。
  • GraphX:一个基于Spark的图形计算库,提供了图形算法的实现,例如社交网络分析、网络流分析和图像处理等。
  • SparkR:一个基于R语言的Spark API,提供了R语言的语法和函数接口,使得R语言开发者可以直接使用Spark。
  • PySpark:一个基于Python的Spark API,提供了Python的语法和函数接口,使得Python开发者可以直接使用Spark。
  • Spark Packages:一个开放的Spark插件库,提供了各种第三方组件和工具,例如Hadoop支持、数据库连接和数据可视化等。
  • Databricks:一个基于Spark的云计算平台,提供了Spark的托管服务和可视化工具,使得用户可以轻松地使用Spark进行数据处理和分析。

Spark 基本概念

  • Spark应用程序:Spark应用程序是使用Spark编写的分布式计算程序,通常由Spark上下文、RDD、转换操作和动作操作等构成。
  • Spark Driver:Spark应用程序的主进程,它负责驱动整个应用程序的执行,包括任务的调度和计算的结果收集。
  • Spark Job:Spark应用程序执行过程中的基本执行单元,一个Spark Job通常包含一组任务,这些任务可以在一个或多个分区上并行执行。
  • Stage:Stage是DAG中的基本执行单元,可以将DAG划分为多个阶段,每个阶段由一组没有shuffle依赖关系的任务组成,通常一个Stage的任务可以并行执行。
  • Task: Task是运行在执行器上的工作单元,是单个分区的最小处理流程单元。
  • DAG: 反应RDD之间的依赖关系
  • Executor: 是应用程序运行在工作节点的一个进程,负责运行任务,返回结果给驱动程序
  • TaskScheduler: 将阶段拆分成多个任务提交给工作节点运行,执行器运行的任务是由调度器分配的
  • DAGScheduler: 有向无环图可以基于DAG划分阶段,以任务集的形式提交阶段给任务调度器;最重要的任务就是计算作业和任务的依赖关系,指定调度逻辑。

Spark 应用执行基本过程

  1. 创建SparkContext:该对象向资源管理器注册,之后负责和集群资源管理器进行通信,申请资源、任务分配和运行监控等,此外还申请运行执行器进程的资源。
  2. 集群资源管理器根据预先设定的算法在资源池为执行器进程分配合适的运行资源,并启动执行器进程。运行过程中执行器心跳将发送到资源管理器上.
  3. SparkContext根据RDD之间的依赖关系构建DAG,然后提交给DAG调度器解析,将DAG拆解为多个阶段,并计算各Stage之间的依赖关系,此后交由任务集给任务调度器进行处理。执行器向SparkContext申请任务,任务调度器发放任务给执行器,同时SparkContext将程序代码发放给执行器。
  4. Task在执行器上运行,反馈执行结果给Task调度器,然后再反馈给DAG调度器。运行完毕后写入数据,SparkContext向集群资源管理器注销并释放所有资源。