【发布时间】:2016-01-25 03:58:48
【问题描述】:
在 Apache Spark 程序中,我们如何知道哪部分代码将在驱动程序中执行,哪部分代码将在工作节点中执行?
【问题讨论】:
标签: apache-spark driver execution worker
在 Apache Spark 程序中,我们如何知道哪部分代码将在驱动程序中执行,哪部分代码将在工作节点中执行?
【问题讨论】:
标签: apache-spark driver execution worker
其实很简单。由转换创建的闭包内发生的所有事情都发生在工作人员身上。这意味着如果在 map(...)、filter(...)、mapPartitions(...)、groupBy*(...)、aggregateBy*(...) 内部传递了某些内容,则会在工人身上执行。它包括从持久存储或远程源读取数据。
count、reduce(...)、fold(...) 等操作通常在驱动程序和工作人员上执行。繁重的工作由工作人员并行执行,一些最后的步骤,例如减少从工作人员收到的输出,在驱动程序上按顺序执行。
其他一切,例如触发动作或转换都发生在驱动程序上。特别是它意味着需要访问SparkContext 的每个操作。在 PySpark 中,它也意味着与 Py4j 网关的通信。
【讨论】:
所有作为参数传递给JavaRDD/JavaPairRDD/类似方法的闭包以及这些类的某些方法将由spark节点执行。其他都是驱动代码。
【讨论】: