区分 Apache Spark 中的驱动程序代码和工作代码

Posted

技术标签:

【中文标题】区分 Apache Spark 中的驱动程序代码和工作代码【英文标题】:Differentiate driver code and work code in Apache Spark 【发布时间】:2016-01-25 03:58:48 【问题描述】:

在 Apache Spark 程序中,我们如何知道哪部分代码将在驱动程序中执行,哪部分代码将在工作节点中执行?

【问题讨论】:

【参考方案1】:

其实很简单。由转换创建的闭包内发生的所有事情都发生在工作人员身上。这意味着如果在 map(...)filter(...)mapPartitions(...)groupBy*(...)aggregateBy*(...) 内部传递了某些内容,则会在工人身上执行。它包括从持久存储或远程源读取数据。

countreduce(...)fold(...) 等操作通常在驱动程序和工作人员上执行。繁重的工作由工作人员并行执行,一些最后的步骤,例如减少从工作人员收到的输出,在驱动程序上按顺序执行。

其他一切,例如触发动作或转换都发生在驱动程序上。特别是它意味着需要访问SparkContext 的每个操作。在 PySpark 中,它也意味着与 Py4j 网关的通信。

【讨论】:

DataFrame.write (PySpark) 怎么样?它在哪里运行?【参考方案2】:

所有作为参数传递给JavaRDD/JavaPairRDD/类似方法的闭包以及这些类的某些方法将由spark节点执行。其他都是驱动代码。

【讨论】:

以上是关于区分 Apache Spark 中的驱动程序代码和工作代码的主要内容,如果未能解决你的问题,请参考以下文章

2018年前100名Apache Spark面试问题和解答(下)

如何优化 Apache Spark 应用程序中的 shuffle 溢出

Apache Spark 和 Apache Flink 中的“流”是啥意思?

Apache Spark 2.2.0 中文文档 - Submitting Applications | ApacheCN

intellij 中 spark scala 应用程序中的线程“main”java.lang.NoClassDefFoundError:org/apache/spark/sql/catalyst/St

使用部署模式群集的Apache Spark任务中的大调度程序延迟