如果我将RDD
划分为60,并且我在20台机器上共有20个核心,即20个单核机器实例,那么任务数量为60(等于分区数量) )。为什么这比每个核心有一个分区并且有20个任务更有益呢?
此外,我已经运行了一个实验,我将分区数设置为2,检查UI显示任何时候运行的2个任务;然而,让我感到惊讶的是,它在完成任务时切换实例,例如node1和node2执行前2个任务,然后node6和node8执行下一组2个任务等。我认为通过将分区数设置为小于集群中的核心(和实例),程序将只使用最小值需要的实例数。谁能解释这种行为?
答案 0 :(得分:2)
对于第一个问题:您可能希望拥有比严格必要的更细粒度的任务,以便同时将更少的内容加载到内存中。此外,它可以帮助提高容错能力,因为在发生故障时需要重做更少的工作。但它仍然是一个参数。通常,答案取决于工作负载的类型(IO绑定,内存绑定,CPU绑定)。
至于第二个,我认为版本1.3有一些动态请求资源的代码。我不确定中断版本是哪个版本,但旧版本只是请求您配置驱动程序的确切资源。至于分区如何从一个节点移动到另一个节点,AFAIK它将从具有HDFS上该数据的本地副本的节点中选择任务的数据。由于hdfs具有每个数据块的多个副本(默认情况下为3个),因此可以有多个选项来运行任何给定的部分)。