菜单
本页目录

Spark运行中的概念名词

1. Application

  • 应用程序:用户提交的Spark应用程序,一个Application包括一个Driver进程和多个Executor进程。每个Application都独立运行,不会与其他Application共享Executor。

2. Driver

  • 驱动程序:Spark应用程序的主控节点,负责任务调度和执行。Driver包含DAG调度器和Task调度器,并通过SparkContext与集群通信。

3. Executor

  • 执行器:负责实际执行Task的工作节点。Executor在每个Spark应用的生命周期内都存在,负责执行任务和存储作业中间数据。每个Executor运行在Worker节点上。

4. SparkContext

  • Spark上下文:用户与Spark集群交互的入口。SparkContext是Driver中的主要对象,负责初始化Spark应用程序的执行环境,管理集群资源,并启动调度器。

5. Job

  • 作业:一个Job是由用户在一个Action操作(如collect()count()等)触发的。一个Job由多个Task组成,代表整个应用程序的逻辑执行单元。

6. Stage

  • 阶段:由DAGScheduler划分的多个任务集合,一个Stage代表一组可以并行执行的任务,Stage之间通过宽依赖(如shuffle)相连。

7. Task

  • 任务:Stage中的最小执行单元,每个Task负责处理RDD的一个分区。Task被分配到Executor上运行,通常与某个数据分区相关联。

8. DAG(Directed Acyclic Graph)

  • 有向无环图:DAG是表示RDD转换操作依赖关系的图结构。Spark将所有的RDD操作组织成DAG,每个节点代表一个RDD转换,边代表RDD之间的依赖关系。

9. DAGScheduler

  • DAG调度器:负责将逻辑DAG划分为多个Stage,并根据RDD之间的依赖关系(窄依赖和宽依赖)确定Stage的执行顺序。DAGScheduler决定了Stage的划分和执行顺序。

10. TaskScheduler

  • 任务调度器:负责将DAGScheduler划分出的Task分配给Executor执行,并监控Task的执行状态。TaskScheduler还负责处理任务失败的重试和调度。

11. Partition

  • 分区:RDD中的逻辑数据分块,每个分区通常对应于一个Task。分区是Spark并行处理的基础,决定了Task的并行度。

12. RDD(Resilient Distributed Dataset)

  • 弹性分布式数据集:Spark中的基本抽象,表示一个不可变的分布式数据集。RDD支持各种转换操作,并通过行动操作触发执行。

13. Transformation

  • 转换操作:RDD的惰性操作,如map()filter()flatMap()等。转换操作不会立即执行,而是构建一个DAG,直到执行行动操作时才触发计算。

14. Action

  • 行动操作:触发实际计算并返回结果的操作,如count()collect()reduce()。Action会触发所有前面RDD的Transformation执行。

15. Wide Dependency

  • 宽依赖:一个RDD的多个分区依赖于上一个RDD的多个分区,典型的宽依赖操作有reduceByKey()groupByKey()。宽依赖会触发shuffle操作,导致需要跨节点的数据传输。

16. Narrow Dependency

  • 窄依赖:一个RDD的每个分区只依赖上一个RDD的少数几个分区,常见的窄依赖操作有map()filter()。窄依赖的操作通常在同一节点内完成,不会触发shuffle

17. Shuffle

  • 洗牌操作:宽依赖操作会导致数据在不同节点间的重新分布,称为shuffleshuffle通常是昂贵的操作,会导致磁盘I/O和网络I/O。

18. Broadcast Variable

  • 广播变量:用于将只读的变量广播到集群中的每个节点,避免节点间重复发送相同的数据。广播变量在所有Task之间共享。

19. Accumulator

  • 累加器:用于在并行任务中进行累加操作。累加器是“写多读少”的变量,可以安全地在多个任务中进行累加。

20. Cluster Manager

  • 集群管理器:负责分配集群资源给Spark应用程序的调度器。Spark支持不同的集群管理器,包括Standalone、YARN、Mesos和Kubernetes。

21. Worker

  • 工作节点:集群中的计算节点,运行Executor。每个Worker节点可以运行多个Executor,接收来自Driver的任务。

22. Local Mode

  • 本地模式:Spark可以在本地单机模式下运行,方便开发和调试。local[]的配置可以指定使用几个线程来模拟集群中的Executor。

23. RDD Lineage

  • RDD血统:RDD的转换操作链。RDD是不可变的,Spark通过RDD的血统信息可以追踪其来源,并在节点故障时通过血统重新计算丢失的分区。

24. TaskSet

  • 任务集:由TaskScheduler调度的任务集合,一个TaskSet通常对应一个Stage中的所有Task。

25. Stage Dependency

  • 阶段依赖:Stage之间的依赖关系,由宽依赖决定。宽依赖的Stage之间有shuffle依赖,后续Stage必须等待前一个Stage完成。

26. Checkpointing

  • 检查点:将RDD的中间结果写入持久化存储(如HDFS),用于容错和避免重新计算。通过Checkpoint,Spark可以避免某些计算在失败后重头开始。

27. Dynamic Allocation

  • 动态资源分配:Spark的动态资源分配允许根据任务的实际负载动态增加或减少Executor数量,以提高资源利用效率。

28. Task Locality

  • 任务本地性:Spark在调度Task时,会考虑数据所在节点的物理位置。任务本地性越高,意味着Task与其处理的数据所在位置越接近,从而减少网络传输开销。

29. Speculative Execution

  • 推测执行:当某些Task执行速度过慢时,Spark会在其他节点上启动这些Task的备份副本,防止某个节点的瓶颈影响整个作业的执行时间。

30. YARN

  • Yet Another Resource Negotiator:一种资源调度框架,YARN允许Spark在Hadoop集群上运行,YARN负责管理和分配集群资源。