问题标签 [r-doredis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - doRedis 是如何工作的?
我一直在玩redis 数据库的 R 接口,以及foreach的doRedis并行后端。我有几个问题,以帮助我更好地应用此工具:
- doMC、doSMP、doSnow 等似乎都是通过调用同一台计算机上的工作进程,将列表中的元素和要应用的函数传递给它们,然后收集结果来工作的。在 doMC 的情况下,worker 共享内存。但是,对于数据库如何提供相同的功能,我有点困惑。
- 当我向 doRedis 作业队列添加额外的从属计算机时(如本视频所示),整个 doredis 数据库是否正在发送到从属计算机?或者每个从站只是它在特定时刻所需的数据(即列表的一个元素和要应用的函数)。
- 如何将额外的数据和函数显式传递给 doRedis 作业队列,每个从站都需要执行它的计算?
- 使用 doRedis 和 foreach 时,是否有其他可能不适用于其他并行后端的“陷阱”?
我知道这是很多问题,但我一直遇到这样的情况,即我对并行处理如何工作的有限理解阻碍了我实现它的能力。例如,我最近尝试在大型数据库上并行计算,发现自己将整个数据库传递到集群上的每个节点,这一操作完全破坏了我从并行化中获得的任何优势。
谢谢!
r - doRedis 在 Ubuntu Linux、R 和 RStudio 中出现奇怪的套接字连接错误
我正在尝试使用 R 2.12.1 在我最新的 Ubuntu 10.0.4 环境中使用 doRedis R 包。我尝试下载最新的 2.15.1,但它会安装(使用 apt-get install ...)这个其他版本。无论如何,当我从 doRedis.R (http://bigcomputing.com/doredis.R) 运行以下行时:
我得到以下错误:
我也让 Redis 服务器运行等待接受没有问题的连接。我可以毫无问题地连接 Redis-cli 客户端。这对同一系统都是本地的。这在我的 Windows 7 上运行良好,没有任何问题。谢谢
r - doRedis 工作人员在 windows 上立即关闭
解决了——看下面。
我正在尝试在 Windows 7 上使用 R 运行 doRedis 并行后端。在尝试doRedis 小插图中的第一个示例时遇到了问题:
这就是问题所在:首先,两个 R.exe 进程运行并在任务管理器中可见,然后运行两个 Rterm.exe 进程,它们加载了大约 250 MB 的数据(我希望这是我的库本地项目的 .Rprofile 文件),然后立即关闭.
我确实进行了一些检查:
Redis 服务器似乎按预期工作,我可以通过运行来验证:
并看到它确实已收到连接,并且客户端已连接。
此外,运行多个独立的 R 会话并注册“作业”队列可以工作,即运行以下命令:
然后通过输入在主 R 会话中运行 MC 示例
像宣传的那样工作——终端会话报告活动,主会话获得结果。\新队
因此,我需要帮助...
...跟踪由主 R 会话调用的工作进程立即关闭的原因。但是,我不知道从哪里开始。我知道该问题的可能解决方法,但是能够以一种无忧无虑的方式启动它会更方便。
谢谢!
解决方案
问题是命令调用的 R 进程startLocalWorkers
不知道在这里寻找库。如果我redisWorker
在具有正确修改的库路径列表的 R 会话中调用,则一切正常。但是,如果我要求这个 R 会话启动新的工作人员 - 一切都失败了。
解决方案是创建一个环境变量R_USER_LIBS
来保存库文件夹的路径。一旦完成,一切都会完美运行。
RStudio 用户应该注意,环境变量的每次修改都需要他们重新启动 RStudio,然后子 R 进程才能读取修改后的新值R_LIBS_USER
。
r - 如何在 Windows 上将 doRedis 包版本 1.0.5 安装到 R 3.0.1 中?
当前最新的doRedis版本(1.1.0)存在bug ,建议降级到1.0.5版本。但是,我无法在 Windows XP 上将 1.0.5 包安装到 R 3.0.1 中!
我试图遵循“安装旧版本的 R 包”问题的答案:
托马斯的答案对我不起作用:
/li>直接编译(Mark Butler 的回答) - 对我也不起作用,即使在卸载以前安装的版本之后,甚至在安装之后也不行
/li>devtools
:我试图获取R 2.14 的旧 Windows 二进制 zip 文件。R 安装包,但尝试加载它时出现以下错误:
/li>
有什么方法可以将旧包安装到 R 3.0.1 中?
编辑:输出sessionInfo()
:
r - 运行doRedis-即使已导出也找不到对象
我正在通过在一台机器上运行工作者和在另一台机器上运行主/服务器来测试 doRedis 包。我的主人的代码是这样的:
在每个函数中,都会访问一个全局变量,但不会对其进行修改。我已经在 foreach 循环的 .export 部分导出了全局变量,但是每当我运行代码时,都会出现一个错误,指出找不到该变量。有趣的是,当我的所有工作人员都在一台机器上时,代码可以工作,但当我有一个“外部”工作人员时会崩溃。任何想法为什么会发生此错误,以及如何纠正它?
谢谢!
更新:我在这里有一些代码的要点:https ://gist.github.com/liangricha/fbf29094474b67333c3b
UPDATE2:我问了另一个与doRedis相关的问题:“是否有可能允许每台工作机器利用其所有核心?
@Steve Weston 回应:“每个核心启动一个 redis 工作者通常会充分利用机器。”
r - 如何为 redisWorker 手动将任务添加到 redis 队列?
是否可以手动将任务添加到redis队列中,以便它可以由redis worker执行?
作为一个简单的例子,我正在使用以下方法启动一个工人:
在另一个 R 会话中,我正在创建一个队列,并希望将一个简单的表达式(例如:)发送print("hello world")
到队列,以便它由工作人员执行。
我知道如何使用foreach
:
我希望能够在不使用 foreach 的情况下将任务添加到队列中。原因是,我不想让我的 R 会话等待输出(脚本会将其结果写入磁盘)。
根据函数中的代码,这是我迄今为止所尝试的.doRedis()
:
它不起作用,我认为(至少)环境的定义是错误的......
非常欢迎任何帮助!
r - 运行文档中的 doRedis 示例时出现 TryCatch 和名称错误
我正在尝试使用 doRedis 创建一个 R 集群并使用 foreach 并行处理我的一些计算,但一直遇到错误。我的代码适用于 foreach %do% 但是当我尝试使用 %dopar% 在集群上运行时它失败了。我还尝试在 doRedis 文档中运行示例代码,但也失败了。下面是我的主脚本和工作人员的 R 控制台:
主 R 控制台:
工作人员控制台:
我不确定是什么导致了错误,但似乎我发送给工作人员的所有内容都会导致此错误:
任何人有任何想法如何解决这个问题?
r - 如何识别并杀死在 R 会话中启动的所有线程
有时线程由 R 包启动(例如在 doRedis 中,请参阅相关代码)。有没有办法如何列出在当前 R 会话中产生的线程并在 R 中杀死这些线程?或者我可以在 Windows 任务列表中识别并杀死它们吗?
我在 Windows XP 中使用 Rgui。