花了一天整整的时间,自己找到了答案。分享给大家吧!
这次研究Rserve主要是因为Tableau软件中有个“管理R连接”的功能,经查探一番后发现居然能够在tableau上调用R的各种数据分析算法,使得R的图形展示更具拓展性。这真是发现“发现新大陆”了。
然而在输入服务器地址和端口等参数后,点击确定连接得到的答案却是“服务器繁忙或未启用或没有权限访问……”之类的报错。
思来想去还是搞不定,够烦恼的。
于是到网上查了下,答案是:
1、启动R命令窗口,安装并加载Rserve包
2、在系统环境变量的path中加入R的32位启动程序路径,然后将Rserve启动程序文件从原本所在的包中拷贝到R32位启动程序路径中。
比如我的R的32位启动程序路径是:C:\Program Files\R\R-3.4.0\bin;
而Rserve启动程序所在路径是:C:\Program Files\R\R-3.4.0\library\Rserve\libs\i386;需要拷贝的文件有2个:Rserve.exe和Rserve.dll
3、测试Rserve是否连接能正常启动(在此用命令行启动为例)
3.1、验证环境配置是否成功:R CMD Rserve --help
3.2、查看Rserve当前配置情况:R CMD Rserve --RS-settings
你可能会看到下面的信息(C:\Users\77是我本机的默认启动路径,你的可能会不同):
C:\Users\77>R CMD Rserve --RS-settings
Rserve v1.7-3
config file: Rserv.cfg
working root: /tmp/Rserv
port: 6311
local socket: [none, TCP/IP used]
authorization required: no
plain text password: not allowed
passwords file: [none]
allow I/O: yes
allow remote access: no (注意:这里的远程接口是关闭的)
control commands: no
interactive: yes
max.input buffer size: 262144 kB
(下面这一步主要是配置Rserve能够被远程访问)
3.3、我们需要创建两个文件:Rserv.cfg(即上面所提到的config file)和start.R(这个可选,仅为了重定义Rserve启动的提示内容)
Rserv.cfg的具体内容是:
workdir /tmp/Rserv
remote enable
fileio enable
interactive yes
port 6311
maxinbuf 262144
encoding utf8
control enable
source start.R
plaintext enable
start.R的具体内容是:
cat("This is my Rserve!!",'\n');
print(paste("Server start at",Sys.time()))
3.4、然后将这两个文件放在命令行启动的路径下,我的是C:\Users\77
3.5、再尝试查看Rserve配置,你可能会看到:
C:\Users\77>R CMD Rserve --RS-settings
Rserve v1.7-3
config file: Rserv.cfg
working root: /tmp/Rserv
port: 6311
local socket: [none, TCP/IP used]
authorization required: no
plain text password: allowed
passwords file: [none]
allow I/O: yes
allow remote access: yes (这里看到配置成功了!)
control commands: yes
interactive: yes
max.input buffer size: 262144 kB
4、在命令行启动Rserve服务器(也可以在R原生命令窗口用Rserve()函数启动Rserve服务器)。
这是我们查看电脑的“任务管理器”,能查到Rserve这个服务的话证明Rserve配置完成并成功启动。
5、如果是在本机配置启动Rserve,那么在Tableau的“管理R连接”中服务器填写“localhost”,默认端口“6311”
点击连接,你应该能够看到“成功连接到Rserve服务”。
这里有个重要的提醒:由于Tableau使用的授权费用太高,所以国内目前多数个人采用时间驻留器延长试用时间,这会影响Tableau的多个端口的配置,导致端口异常,对于Rserve而言,6311端口无法使用,等于自己到家门口,门锁坏了一样。
所以,如果前面的步骤都是对的,但仍然出现“服务器繁忙或未启用或没有权限访问……”之类的异常报错,将时间驻留器移除掉,你可能就解决了问题。
因为我就是这样解决的。
希望对大家有用!感谢看完我的描述! |