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支持各种转换操作,并通过行动操作触发执行。
- 转换操作: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
- 洗牌操作:宽依赖操作会导致数据在不同节点间的重新分布,称为
shuffle
。shuffle
通常是昂贵的操作,会导致磁盘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负责管理和分配集群资源。