2010-12-15 121 views
2

我需要同时处理大量文件(数千个不同的文件,每个文件的平均大小为2MB)。并行处理多个文件 - 复制文件或通过NFS读取?

所有的信息存储在一个(1.5TB)的网络硬盘驱动器上,并将由大约30个不同的机器处理。为了提高效率,每台机器都会读取(和处理)不同的文件(有数千个需要处理的文件)。

每台机器 - 在从1.5TB硬盘驱动器上的“传入”文件夹中读取文件后 - 将处理信息并准备好将处理后的信息输出回到处理过的信息文件夹1.5TB的驱动器。每个文件的处理信息与输入文件的平均大小大致相同(每个文件大约2MB)。

什么是更好的事:

(1)对于每一个加工机器中号,复制将被中号被加工成其本地硬盘驱动器,然后将所有文件中读取&过程在机器上本地文件M。 (2)不是将文件复制到每台机器,而是每台机器直接(使用NFS)访问“传入”文件夹,并从那里读取文件,然后在本地处理它们。

哪个想法更好?当有人做这样的事情时,有没有“做”和“不做”?

如果30台机器同时读取(或写入)信息到同一个网络驱动器是一个问题,我大多好奇吗? (注意:现有文件只能被读取,不能被附加/写入;新的文件将从头开始创建,因此不存在多次访问同一文件的问题...)。我应该期待什么瓶颈?

(我使用Linux,Ubuntu的10.04 LTS上的所有机器,如果一切事宜)

回答

2

我肯定会做#2 - 与如下我会做到这一点:

运行Apache的主服务器上与所有文件。 (或者其他一些HTTP服务器,如果你真的想的话)。有几个原因我会这样做:

  1. HTTP基本上是纯粹的TCP(有一些头)。一旦发送请求 - 这是一个非常“单向”的协议。低开销,不健谈。高性能和高效率 - 低开销。

  2. 如果您(无论出于何种原因)决定您需要移动或扩展它(例如使用罐头服务),HTTP将是一种更好的方法,通过开放的Internet在NFS上移动数据。你可以使用SSL(如果需要)。你可以通过防火墙(如果需要)。 etc..etc..etc ......根据你的文件的访问模式

  3. ,并假设整个文件需要被读取 - 它更容易/更快只是做一个网络操作 - 拉整个文件在一个重击中 - 而不是每次读取文件的一小部分时不断地通过网络请求I/O。

  4. 它可以很容易地分发和运行一个应用程序,它可以完成所有这些工作 - 并且不依赖于网络挂载的存在 - 特定的文件路径等。如果你有URL的文件 - 客户端可以这是工作。它不需要建立挂载,硬目录 - 或成为安装此类挂载的根。

  5. 如果您有NFS连接问题 - 当您尝试访问挂载并挂起时,整个系统可能会出现故障。由于HTTP运行在用户空间的上下文中,你只会遇到一个超时错误 - 你的应用程序可以采取任何它选择的动作(比如页面 - 记录错误等)。

+0

谢谢布拉德。 – user3262424 2010-12-16 01:36:38

相关问题