linux安装Rserve

前言

项目中涉及到模型的使用,需要在java程序中调用R服务代码,我们采用的方式在服务器上搭建一个Rserve服务器,现就其搭建步骤记录如下。

1系统信息

本次安装使用系统环境是CentOS6.8,提前安装编译R需要的gcc等系统软件,如果是离线环境下,安装包可以直接通过挂载系统镜像来进行安装,安装好java,不要使用CentOS自带的open jdk

2安装包准备

这里准备的安装包主要包括R安装、Rserve安装包以及可能用到的依赖包,依赖包主要是与gcc编译器相关,在安装的过程中如果提示缺少相应的依赖包,可以根据缺少的内容进行安装,然后再进行RRserve的安装。RRserve安装包(tar.gz文件)都可以从官网直接下载: 


CentOS安装R过程

我使用的R安装包为官网下载的R_3.2.25.tar.gz文件,可自行从官网下载或者从我上传的下载文件中查找,这里要特别说明一下,如果系统版本较低的话,还是不要安装最新版本的软件,因为其依赖的库文件都是版本比较高的,如果是离线安装的话,会被这些依赖软件或者库搞的很痛苦。

4.1检查gcc环境

R的安装需要使用gccgfortran命令,我们在安装前最好检查下,当然你直接执行下面的命令,根据提示进行必要的依赖包安装也是可以的。
查看gcc环境的命令如下:

[007@localhostDesktop]$ rpm -qa | grep gcc


如果得到的结果中包含了gcc-c++gcc-gfortran开头的文件,没必要全部要有,但是关键的要有,那恭喜你可以继续进行下面的安装了,如果你得到的结果只包含一个gcc开头的,那你需要安装gcc-c++gcc-gfortran。安装文件在我给的下载链接中都有,下载解压后,进入到该文件夹下,执行下面的命令。

安装R

下载的R-3.1.2.tar.gz是无法直接安装的,需要现将其解压到指定的目录下,不一定是安装目录,比如我这里将其解压到了/home/007下,我的压缩包就在/home/007目录下,因此我进入该目录执行下面的命令即可完成解压:

[007@localhost007]$ tar –zvxf R-3.1.2.tar.gz

进入到R-3.1.2文件夹下,执行以下命令:

[007@localhost R-3.1.2]$ ./configure --enable-R-shlib --prefix=/home/007/R3.1.2 --with-x=no --with-readline=no

后面的参数非常重要,请一定要理解清楚
–enable-R-shlib
这个参数特别重要,如果没有这个参数,那么你后面将无法使用Rserve

–prefix=/home/007/R3.1.2 这个参数是用来定义R的安装位置的,一定要保证这个目录存在,如果没有这个目录,请先建立这个目录,不指定这个目录的话会安装到解压目录即/home/007/R-3.1.2中,不建议这样,请指定一个空的目录

–with-x=no 表示不使用X-Windows系统,也就是类Unix操作系统GUI一般不会使用这个,但默认为yes,如果你没有安装libx的话会报错的,所以我们直接设置为no

–with-readline=no 表示不使用系统的readline库,如果系统上没有libreadline,此选项填“no“,默认是yes,但是我的系统下没有安装readline库,而且我也不会在RedHat的命令终端中一行一行的写R程序,我将其设置了为no,其结果是我们无法使用上下左右键来查找使用过的命令了,呵呵,也罢,反正我也不会写在终端中写多少行R命令,如果你要用的话,建议你先查找下你的机器上是否安装了readline,如果没有的话我的安装包中有,将其安装上之后再设置为yes,执行上面的命令即可

很多时候我们在执行这个命令时出现了问题,请确保我上面写的这四条都已经明白了,还有问题时再将提示的错误发到评论里,我帮你看看。执行完会提示下面的内容: 

configure完毕后,需要执行编译命令,这个的执行过程比较长,请耐心等待下。同样在解压缩后的目录R-3.1.2下执行下面的命令:

[007@localhostR-3.1.2]$ make执行完毕后的提示内容,只截取了最后一部分,如下所示:

接下来执行安装命令,还是在解压缩后的目录R-3.1.2下执行下面的命令:

[007@localhostR-3.1.2]$ make install

执行完毕后的提示内容如下所示(只截取了最后一部分):

配置R环境变量

.bash_profile文件修改为如下的形式(修改):

保存后执行source .bash_profile命令使配置生效。

4.7检验R安装

修改完R环境变量并使之生效后,可以在终端中输入R进入R命令窗口,如下图所示:

上图中输入R之后会提示你安装的R版本以及一些使用说明,最后三行是我的测试程序,我输入了一个向量data,然后查看了该向量。

输入q()可以退出R命令行模式。

Rserve安装过程
在终端中执行下面的命令:

[007@localhost ~]$ RCMDINSTALL /home/007/Rsrc/Rserve_1.8-1.tar.gz

安装过程顺利的话很快,安装成功后可以看到最后提示了”Done(Rserve)“说明安装成功了。如果说这里出现了安装错误的提示,请确认安装R的时候认真阅读了我写的四个参数的意义,启动Rserve的命令为:

[007@localhost ~]$ RCMDRserve

启动成功控制台会提示“Rserv started in daemon mode.”启动成功后的界面提示如下图所示:


此时就可以使用Rserve调用R了,但是只限于本地调用,外部电脑无法调用,Rserve默认配置下是不允许远程调用的,如果不需要外部访问可以忽略下面的配置内容。

Rserve配置

使用下面的命令来查看Rserve的配置信息:

[007@localhost ~]$ RCMDRserve --RS-settings

执行完毕后会提示Rserve的配置信息,包括配置文件的所在位置,是否允许外部访问等等,默认读取的配置文件一般是在/etc/Rserv.conf中,虽然列出了默认的配置文件,但是默认该配置文件是不存在的,这里只是告诉用户如果需要配置的话新建该配置文件然后在该配置文件中进行配置即可。


因为我需要远程调用RedHat下的Rserve,因此我需要开启远程访问功能,而etc文件夹下新建文件是需要root权限的,因此我还需要切换到root用户下新建一个Rserv.conf文件,并在其中添加一行代码,如下:

remote enable

添加完毕保存,然后重新启动Rserve即可完成配置了。

5.3其他Rserve相关命令

5.3.1查看Rserve状态

[007@localhost ~]$ ps -aux | grep Rserve

这时会列出所有Rserve的进程,包括进程号2766,如下图所示: 

5.3.2查看Rserve访问情况

[007@localhost ~]$ netstat –ntlp | grep Rserve

结果如下:

0.0.0.0表示所有都可以访问(开启远程访问后状态),127.0.0.1表示只允许本地访问。端口号是6311,默认的端口号。

5.3.3结束Rserve进程

[007@localhost ~]$ kill -pid 2766

6结束语

安装完Rserve后,当需要通过Rserve调用R时,需要在安装好Rserve的电脑上启动Rserve方能进行调用。