在我目前的项目中,我需要处理大量数据。处理顺序很重要,因为数据中存在子/父依赖关系。此时我在一台机器上构建依赖图并在多台机器上分配工作,但是我已经达到内存限制/处理限制" master"机器,我想在多台机器上分发整个过程。
如何在多台计算机上构建此依赖关系图?
答案 0 :(得分:0)
由于路径非常短,找到out-degree 0的所有顶点的经典算法,将它们添加到目前为止的顺序,并且删除它们将很好地并行化(例如,使用MapReduce)。
在相关计算机之间对作业依赖关系图进行分区。每台机器都会获得一个不相交的作业子集以及涉及这些作业的所有依赖项。
(轮次重复)每台机器确定哪些作业没有未安排的依赖项。这些工作安排在与当前轮次相同的时间。对于其中一个新计划作业作为依赖项的每个作业,拥有新计划作业的计算机会将此事实报告给拥有相关作业的计算机。
总网络流量大小与图表的大小相同,并且轮次数受最长路径长度的限制,因此该算法应该对您的用例合理有效。