Spark笔记
一、Spark基础部分
part1 Spark的基础概念
1、Spark的介绍
Apache Spark 是一个快速的,通用的集群计算系统。它对 Java,Scala,Python 和 R 提供了的高层 API,并有一个经优化的支持通用执行图计算的引擎。它还支持一组丰富的高级工具,包括用于 SQL 和结构化数据处理的 Spark SQL,用于机器学习的MLlib,用于图计算的 GraphX和流处理Spark Streaming。
2、Spark的基本结构和执行过程
基本结构与作用:
主从架构:
Spark也是主从结构即一个Master节点和多个Worker节点,其中Master运行Driver进程(部分调度模式Driver也运行在Worker上),Worker运行Executor进程。
Master的作用:监听Worker,接受客户端提交的Application。
Worker的作用:定期发送心跳给Master,运行Executor进程。
Spark的核心进程结构及其作用:
- Driver:
- 创建Spark的SparkCntext上下文
- 划分RDD创建DAG
- 与Spark其他组件协调资源
- 生成并分发task到executor
- Cluster Manager
- 集群资源调度器,包括Yarn、Mesos
- Executor
- 执行分配的task任务
执行过程:
(详细的任务调度过程—>https://blog.youkuaiyun.com/qq_40407889/article/details/117752273)
- 当任务提交时,由Driver进程创建SparkContext,负责任务的分配、调度以及与资源管理器(Cluster Manager申请自愿
- 资源管理器(Cluster Manager)为Executor分配资源,并启动Executor进程,Executor运行情况随着心跳信息发送给资源管理器。
- SparkContext根据RDD的依赖关系,构建DAG图,并将其交给DAG调度器进行解析,将DAG图分解为多个"stage",每个stage都是一个任务集,并且计算各个stage之间的依赖关系,然后把每一个任务集交给底层的任务调度器(TaskScheduler)进行处理;任务调度器将任务根据数据本地性和推测执行的机制分发给相应的Exector去运行,同时SparkContext将应用程序代码分发给Executor。
- 任务在Executor上运行,将运行结果反馈给任务调度器,然后反馈给DAG调度器,运行完毕后,写入数据并释放所有资源。
数据本地性:是尽量将计算移到数据所在节点上进行,也就是计算靠近数据。
推测执行:如果任务调度的节点正在被占用,不会立刻转到其他数据节点进行操作,而是计算移动的时间和等待的时间哪一个消耗的时间短,如果等待的时间短,就继续等待,也就是选择最优的方案。
3、Driver和Executor的区别
Driver:针对application进程的启动、DAG划分、计算任务封装、计算任务分发到各个计算节点(Worker)、计算资源的分配由Driver来执行。针对于对RDD的相关操作,比如聚集RDD的collect、count等action操作,是在Driver上执行。
Executor:Spark针对RDD数据的相关操作比如transform操作都是在Executor上执行的,比如map、filter等操作