让我们假设每个时间点只有一个 Spark 作业在运行。
以下是我对 Spark 的理解:
SparkContext
时,每个工作节点启动一个执行器。
执行器是独立的进程(JVM) ,连接回驱动程序。每个执行器都有驱动程序的 jar。辞掉司机,关闭遗嘱执行人。每个执行器可以保存一些分区。我明白
- 任务是通过序列化函数对象从驱动程序发送到执行程序的命令。
- 执行程序反序列化(使用驱动程序 jar)命令(任务)并在分区上执行它。
但是
我如何将舞台划分为这些任务?
具体来说:
在 https://0x0fff.com/spark-architecture-shuffle中,洗牌是用图像来解释的
我得到的印象是
每个阶段被划分为 # number-of-Partitions 任务,而不考虑节点的数量
对于我的第一张图片,我会说我有3个映射任务和3个减少任务。
对于0x0fff 的图像,我认为有8个 map 任务和3个 reduce 任务(假设只有3个橙色和3个深绿色文件)。
是这样吗?但是即使这是正确的,我上面的问题也没有全部得到回答,因为它仍然是开放的,无论多个操作(例如多个映射)是在一个任务中,还是在每个操作中被分成一个任务。
在 Spark 中什么是任务?Spark 的工作人员如何执行 jar 文件?和 ApacheSpark 调度程序如何将文件分割为任务?是相似的,但是我觉得我的问题在那里没有得到明确的回答。