常规 Linux 发行版都可用,如 Ubuntu,CentOS。下面将以 CentOS-6.5-x86_64-minimal 为例。
如果分配了已安装 Linux 的服务器,可跳过操作系统的准备。
如果没有独立的服务器,可在某台已有服务器上安装虚拟机。虚拟机软件选择 VirtualBox。VirtualBox 中逐步安装 CentOS-6.5-x86_64-minimal 的过程不在本文描述。
虚拟机最好保证 4G 内存,20G 磁盘空间以上。
网络设置为桥接,以将其作为独立服务器看待。
检查系统中是否已有 R 环境:
R --version
如果正常输出版本号,则说明已有环境,可跳过 R 环境准备。如果显示 command not found
则说明需要安装,已确认 R 3.2.5 或 3.4.3 都可以正常使用 Rserve,最新的版本也应该满足向后兼容。当前 epel 源中最新的 R 版本为 3.5.0,通过 yum install R
进行安装。
注:minimal 下通过 yum 安装时会提示
No package R available
则需要先安装 epel 源。CentOS 6:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
CentOS 7:
rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Rserve 是 R 语言中一个包,将其安装启动后可作为通过 TCP/IP 连接的服务端使用。其典型应用场景为部署成分布式的 R 语言环境,用作多种语言如 C/C++/PHP/Java 等执行 R 脚本进行统计建模、数据分析、绘图等的一种解决方案。
Rserve 特性:
/etc/Rserv.conf
)用于配置是否启用如认证、远程访问、文件传输等特性。Rserve 警告:
eval
方法是非线程安全的,这意味着如果多个线程同时使用一个连接的 eval
方法,应该由用户保证线程安全。remote enable
时最好同时配置 auth required
和 plaintext disable
。(not tried)在 R 内部,从 CRAN 安装是最简单的方式:
install.packages("Rserve")
当前安装版本为 1.7-3,虽然官网最新版本已是 1.8-6(2018-05-18 11:29)。
虽然可以作为普通的 R 包从 R 内部进行启动,不过推荐直接在命令行中启动:
R CMD Rserve
Rserve 的默认选项:不接受远端连接;无需用户名/密码;开启文件文件传输支持。
Rserve 默认的配置文件为 /etc/Rserv.conf
,如想修改默认文件,需在编译安装时设置 -DCONFIG_FILE=...
指定。或者在命令行参数中提供 --RS-conf
指定。配置参数在配置文件中设置,格式为逐行 parameter value
,部分参数可直接在命令行中提供,与配置文件是等效的,所有的配置参数如下表所示:
选项 | 参数 | 默认值 | 命令行参数 | 说明 |
---|---|---|---|---|
workdir | path | /tmp/Rserv | --RS-workdir | Rserve 连接的工作目录 |
pwdfile | file | none|disabled | ||
remote | enable|disable | disable | --RS-enable-remote | 命令行参数将直接启动用远程连接 |
auth | required|disable | disable | ||
plaintext | enable|disable | disable | ||
fileio | enable|disable | enable | ||
interactive | yes|no | yes | ||
socket | socket | none=disabled | --RS-socket | 使用 local socet 而非 TCP/IP 传输 |
port | port | 6311 | --RS-port | Rserve 监听的端口 |
maxinbuf | size in kb | 262144 | 客户端发向服务端的最大数据量 | |
maxsendbuf | size in kb | 0=unlimited | 服务端发向客户端的最大数据量 | |
uid | uid | none | ||
gid | gid | none | ||
su | now|server|client | none | ||
source | file | --RS-source | 启动后执行指定 R 脚本 | |
eval | expressions | 启动后执行指定表达式 | ||
chroot | directory | none | ||
sockmod | mode | 0=default | ||
umask | mask | 0 | ||
encoding | native|utf8|latin1 | native | --RS-encoding | 服务端编码数据的方式,如果客户端为 Java,建议设置值为 UTF8。 |
配置文件中选项 port
,uid
,gid
,umask
和 sockmode
支持十六进制(0x..
),八进制(0..
)和十进制设置。其他的配置项和命令行选项只支持十进制。
uid
,gid
,umask
和 chroot
只在 Linux 和 Unix 受支持。如果配置了其中的选项,当 Rserve 以 root
用户启动时,在真正启动 Rserve 之前,将首先切换 user/gorup
为声明的 uid/gid
。且,这些选项生效的顺序跟在配置文件中配置的顺序一致。如,假设同时配置了 uid
和 gid
,则必须先声明 gid
,否则如果先声明 uid
,用户可能没有权限修改 gid
。而且 chroot
必须在 uid
之前,因为只有 root
可以使用它。除非必要,不比设置这些选项。
命令行中的其他关键参数;
--help
列出所有支持的参数。--RS-conf <file>
加载指定的配置文件,如有重合将会覆盖默认配置中的选项。--RS-settings
输出 Rserve 的当前设置。--verison
输出 Rserve 的版本。一般会在内网环境下使用 Rserve,除了 remote
,Rserve 的默认配置足以满足应用场景,本人关于 Rserve 的调优实践不多。
启用 Rserve 远程连接支持的方法 1,编辑 /etc/Rserv.conf
,加入 remote enable
,如:
# /etc/Rserv.conf
remote enable
port 6311
启用 Rserve 远程连接支持的方法 2,命令行参数中指定,如:
R CMD Rserve --RS-enable-remote
启动后还涉及到一些简单的进程管理,Rserve 以进程方式提供服务,主进程一般为 500M,而后每个新的连接都会对应生成一个新的进程,每个连接进程约为 250M。注意,当客户端意外关闭时,可能导致 Rserve 连接进程无法正常关闭,因此需要手动重启 Rserve 以释放内存空间。
# 查看当前所有 Rserve 进程
ps aux | grep Rserve
# 正常关闭 Rserve 进程
killall -15 Rserve
至此,Rserve 的基本使用介绍完毕。为了便于操作,将配置、启动、查看、关闭和重启总结为如下 bash 文件 Rserve.sh
,并放入 /etc/profile.d
下:
#!/bin/bash
# setting for R Rserve package
# mainly used for managing Rserve process more conveniently
#
alias R_Rserve='R CMD Rserve --RS-enable-remote'
alias greprserve='ps aux | grep Rserve'
alias k15rserve='killall -15 Rserve'
alias R_Rserve_restart='killall -15 Rserve && R_Rserve'
使之生效后,便可以 alias
出的命令进行便捷操作。
注:系统防火墙应放行此端口,通过
iptables
,firewall-cmd
或关闭防火墙。
Rserve 的临时工作目录,默认为 /tmp/Rserv
,当客户端创建连接时,会伴随在其下生成临时 connXXXX
目录,已验证可直接删除,不会影响连接的正常使用。除 connXXXX
之外,R 脚本执行的过程中,可能还会有临时文件生成在 /tmp/Rserv
下,因而定期清理是有必要的。配置 crontab
每天执行清理操作:
13 4 * * * rm -rf /tmp/Rserv/*
建议客户端编码时,如用到服务端临时工作目录,也将工作目录设置与 Rserve 的临时目录一致,可以一起清理。
根据 Rserve 的调用情况,如果 Rserve 调用很频繁,可以配置
crontab
执行更频繁的清理。注意:清理可能会触发临界点 bug,比如 Rserve 生成临时文件后,还未等 client 读取该文件就被删除。
Rserve Java client 实现已被发布到 maven repo 中,可用版本参见 Maven Repository: org.rosuda.REngine » Rserve,也可从官网下载较新的二进制版本。
具体使用 Rserve Java client 进行开发的方式不在本文描述,可参见example。
参考:
评论 / 共 0 条