Apache Spark中的驱动程序何时无法运行?

时间:2015-06-12 01:28:07

标签: mapreduce apache-spark bigdata

我刚开始使用Spark,并且正在努力完成任务的概念。

任何人都可以帮助我理解动作(比如减少)何时不在驱动程序中运行。

来自spark教程,

  

"使用函数func聚合数据集的元素(其中   接受两个参数并返回一个)。功能应该是   可交换和关联,以便可以正确计算   平行。 "

我目前正在尝试一个应用程序,该应用程序在' n'文件并计算单词数。

从Web UI中,任务数等于文件数。所有reduce函数都在驱动程序节点上进行。

请告诉我们减少功能不会在驱动程序上执行的情况。任务是否总是包含"转换+动作"或只是"转型"

2 个答案:

答案 0 :(得分:2)

所有操作都在群集上执行,操作结果可能最终在驱动程序上(取决于操作)。

一般来说,围绕业务逻辑编写的spark代码并不是实际运行的程序 - 而是spark使用它来创建一个将在集群中执行代码的计划。该计划创建了一个任务,可以在分区上完成所有操作,而无需随机播放数据。每次spark都需要以不同的方式排列数据(例如在排序之后)它将在第一个和后一个任务之间创建一个新任务和一个shuffle

答案 1 :(得分:1)

虽然我可能遗漏了部分问题,但我还是会对此进行一次尝试。任务确实总是转型和行动。转型是懒惰的,不会提交任何内容,因此需要采取行动。您始终可以在RDD上呼叫.toDebugString以查看每个职位分配的位置;每个级别的缩进都是一个新阶段。我认为在驱动程序上显示的reduce函数有点用词不当,因为它将首先并行运行,然后合并结果。所以,我希望这项任务确实可以在工人身上尽可能地运行。