doRedis如何运作?

时间:2011-04-23 16:13:28

标签: r parallel-processing redis cluster-computing r-doredis

我一直在使用R interface to the redis database以及doRedisforeach并行后端。我有几个问题,以帮助我更好地应用此工具:

  1. doMC,doSMP,doSnow等似乎都可以通过在同一台计算机上调用工作进程,向它们传递列表中的元素和要应用的函数,然后收集结果。在doMC的情况下,工作人员共享内存。但是,我对数据库如何提供相同的功能感到有些困惑。
  2. 当我将另一台从属计算机添加到doRedis作业队列(as in this video)时,整个doredis数据库是否被发送到从属计算机?或者每个奴隶只是在特定时刻所需的数据(即列表的一个元素和要应用的函数)。
  3. 如何将其他数据和函数显式传递给doRedis作业队列,每个从属服务器都需要执行计算?
  4. 使用doRedis和foreach时,是否还有其他“陷阱”可能不适用于其他并行后端?
  5. 我知道这是很多问题,但我一直遇到这样一种情况,即我对并行处理如何工作的有限理解阻碍了我实现它的能力。例如,我最近尝试在大型数据库上并行化计算,并发现自己将整个数据库传递到集群中的每个节点,这一操作完全破坏了我从并行化中获得的任何优势。

    谢谢!

1 个答案:

答案 0 :(得分:15)

其中一个难题是rredis

1 - doRedis使用rredis。具体来说,doRedis.R使用redis:RPush(因为它遍历foreach个项目)并且每个redisWorker使用redis:BRPopredis list(您在doRedis中命名)中获取内容“工作”)。

Redis不仅仅是一个数据库。这里它被用作队列!

2 - 您的所有R工作人员都可以访问1个实例(远程)。将Redis服务器视为分布式队列。您的作业主将项目推送到列表,工作人员抓取并处理项目并将其推送到结果列表。 N个项目可以有m个工人。取决于你想做什么。

3 - 使用env param。这使用了所有工作人员都可以访问的Redis:Set(通过Redis:Get)。您在foreach端传递分隔表达式,并在工作人员可以访问的string key in redis中设置。

4 - 我不知道(但这几乎不具有权威性,所以请四处询问。)我还建议你阅读提供的源代码。上述答案直接来自阅读doRedis.RredisWorker.R

希望这有帮助。

[P.S。 telnet到你的redis并发出Redis:monitor命令来来回监视聊天。]