从100台机器快速发送4 [GB]?

use*_*424 10 python distributed-computing nosql

100 servers在我的集群中.

当时17:35:00,所有100 servers都提供了数据(大小1[MB]).每个服务器处理数据,并产生约的输出40[MB].每台服务器的处理时间是5[sec].

在time 17:35:05(5[sec] later),需要一台中央机器来读取所有输出100 servers(记住,数据的总大小是:100 [机器] x 40 [MB] ~4 [GB]),聚合它,并产生一个输出.

这是非常重要的是整个过程gathering the 4[GB] data的所有100 servers花费尽可能少的时间尽可能.我该如何解决这个问题?

是否有任何python可以提供帮助的现有工具(理想情况下,但会考虑其他解决方案)?

Eri*_*c M 5

查看应用程序中的数据流,然后查看您(我假设共享)磁盘系统提供的数据速率以及GigE互连提供的速率以及群集的拓扑结构.以下哪个是瓶颈?

GigE在节点之间提供理论上最大125 MB/s的传输速率 - 因此4GB将需要大约30秒才能将100个40MB的数据块从GigE上的100个处理节点移动到您的中心节点.

所有节点之间共享的文件系统提供了以太网RAM到RAM数据传输的替代方案.

如果您的共享文件系统快速处于磁盘读/写级别(例如:一堆多磁盘RAID 0或RAID 10阵列聚合成Lustre F/S或其他类型)并且它使用20Gb/s或40 Gb /互连btwn块存储和节点,然后100个节点,每个节点将40MB文件写入磁盘,读取这100个文件的中央节点可能比通过GigE节点将100个40 MB块传输到节点互连更快.

但是,如果您的共享文件系统是通过GigE以太网上的NFS导出到节点的RAID 5或6阵列,那么使用RPC或MPI通过GigE传输RAM到RAM的速度要慢,因为您必须通过GigE写入和读取磁盘.

所以,有一些很好的答案和讨论或你的问题.但我们(确实)不知道您的节点互连速度,我们不知道您的磁盘是如何设置的(共享磁盘,或每个节点一个磁盘),或者共享磁盘是否具有自己的互连以及速度是多少.

节点互连速度现在已知.它不再是一个自由变量.

磁盘设置(共享/未共享)未知,因此是一个自由变量.

磁盘互连(假设共享磁盘)未知,因此是另一个自由变量.

你的中心节点有多少RAM是未知的(它能在RAM中保存4GB数据吗?)因此是一个自由变量.

如果包括共享磁盘在内的所有内容都使用相同的GigE互连,则可以安全地说每个100个节点将40MB文件写入磁盘,然后中央节点从磁盘读取100个40MB文件是最慢的方法.除非您的中心节点在没有交换的情况下无法分配4GB RAM,否则事情可能会变得复杂.

如果您的共享磁盘性能很高,则可能是每个写入40MB文件的100个节点更快,而中央节点读取100个40MB文件的速度更快.