2011-04-04 59 views
0

我有100台机器的网络,全部运行Ubuntu Linux。将数据写入单个机器的最快方法?

在连续(流式)的基础上,机器X是“进料”与一些实时数据。我需要编写一个python脚本来获取数据作为输入,将它加载到内存中,处理它,然后将其保存到磁盘。

这是一个很大的数据,因此,我会非常想在内存中的数据拆分(使用一些逻辑),只是发送它的件每一个人计算机,在最快的方式。每台计算机都会接受它的数据,处理它并将其写入本地磁盘。

假设我有数据的Python中的容器(可能是一个列表,词典等),已经处理过的和分裂成碎片。将每个“部分”数据发送到每台机器的最快方式是什么?

+0

你有没有读过MapReduce?这完全是为了这个。不幸的是,我不能给你一个python特定的答案。但是我认为阅读这本书会对你有所帮助。 – 2011-04-04 16:47:34

回答

3

你有两个(类)选择:

  1. 你可以自己建立一些分配机制。
  2. 您可以使用现有的工具来处理分配和存储。

在最简单的情况下,您可以在网络中的每台计算机上编写一个程序,用于监听,处理和写入数据。您从X分配到池中的每台计算机。但是,你可能要解决诸如处理节点故障或处理那些需要更长的时间比其他人来处理请求,将新节点添加到系统等更高层次的关注

如您想了解更多的功能,你可能会想找到一些现有的工具来帮助你。这听起来像您可能想要调查AMQP(用于可靠消息传递),Hadoop(用于分布式数据处理)或更完整的NoSQL解决方案(如Cassandra或Riak)的某些组合。通过利用这些工具,您的系统将比您可能自己构建的系统强大得多。

+0

如果我已经有一些代码在远程机器上进行写作,该怎么办;我只需要一种方法将数据“发送”给远程机器;也不会'ssh'成为一个好的解决方案呢? – user3262424 2011-04-04 17:19:55

+1

您可以使用'ssh',在提供某些功能(例如验证与特定主机的连接,线级保密性)的同时会产生一定的开销(例如,密钥协商,加密)。如果您不关心加密,请查看服务器端的SocketServer python模块。尽管如此,这种“第1类”方法并不处理诸如主机停机,负载平衡等问题。您可能不关心这些问题。 – 2011-04-04 18:21:24

+0

谢谢。你说得对,'ssh'有一些开销。但是如果我首先初始化所有连接(这需要几秒钟),并且连接时要继续将数据写入远程节点呢?你认为我会有很多开销吗? – user3262424 2011-04-04 18:31:04

5
+0

你能解释一下什么比简单地(编程式地)'ssh-ing'这台机器更好,并在那里发送数据? – user3262424 2011-04-04 17:18:52

+1

@ user540009:因为0mq提供了许多不同的连接类型和交互模式,并且分发数据块的速度可能比ssh快得多。它还支持pickling和json序列化以在网络中移动python对象。您要求分配数据的“最快方式”,而0mq速度非常快。除此之外,我对于你想要做什么以及限制提供的不仅仅是技术建议的考虑还不够了解。 – JoshAdel 2011-04-04 17:59:48

+0

谢谢。'0mq'还允许我在远程机器上运行程序吗?还是只会发送消息?同样,'0mq'似乎表明'远程机器'必须'侦听'传入的消息,而'ssh'我可以连接到远程机器并'指示'要做什么。 – user3262424 2011-04-04 18:34:08

2

你想要的是像RabbitMQ这样的消息队列。将消费者和生产者添加到队列中很容易。消费者可以通过调查或通过回调得到通知...

+0

你能解释一下什么比简单地(编程式地)'ssh-ing'到机器上并且在那里发送数据更好吗? – user3262424 2011-04-04 17:18:07

相关问题