使用Rserve远程执行R脚本,从政府角度看企业BYO

2019-09-11 16:05栏目:公司领导
TAG:

...

· 美国财政部下属的联邦酒精及烟草税务贸易局推出了一个虚拟桌面,允许其在不受政策或法律影响下使用一个BYOD(自带设备办公)程序;

使用Rserve远程执行R脚本,rserver脚本

注1:关于Rserve网上有很多资料可以参考,详细情况可以参考博客下面的“参考资料”部分,本文只是简单介绍一下Rserve,主要目的是记录一下Java远程执行R脚本文件的方法。
注2:这里提到的远程执行R脚本文件的方式都是R脚本存在于Rserve服务端,如果R脚本文件存在客户端,可以使用RUtils工具包:

Rserve介绍

    Rserve是一个基于TCP/IP协议的,允许R语言与其他语言通信的C/S结构的程序,支持C/C++,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供远程连接,认证,文件传输等功能。我们可以设计R做为后台服务,处理统计建模,数据分析,绘图等的任务。
    详细介绍请参照官方网站:https://rforge.net/Rserve/

Rserve安装

Linux系统下建议使用root权限安装。下面的内容是依据Windows7系统中安装过程进行描述的。

进入R语言解释器:R

安装命令:install.packages(“Rserve”)

然后安装程序会提示我们选择下载镜像,提示如下:

— Please select a CRAN mirror for use in this session —

等我们选择了镜像后(测试时选择的是China(xxx)),安装程序便进行下载安装,最终会输出如下的信息(Linux下的输出信息或有不同):

说明Rserve安装成功,安装路径为:%R_HOME%libraryRserve目录。

启动Rserve服务

在Windows命令窗口进入R_HOMElibraryRservelibsi386目录中执行如下命令(我的Windows7是32位的,如果是64位系统对应目录为R_HOMElibraryRservelibsx64):

[plain] view plain copy
R CMD Rserve

R将作出如下应答:

说明Rserve启动成功(端口6311),可以进行连接测试了。

上面的启动命令使用的本地模式,如果想远程连接需要增加参数 –RS-enable-remote

即启动命令为:

[plain] view plain copy
R CMD Rserve –RS-enable-remote

Java远程连接Rserve

下载依赖jar包,地址:
共两个jar包,下载完成后将它们加入到项目的classpath中即可:
 REngine.jar
 RserveEngine.jar
也可以到Rserve安装目录中寻找,比如:R_HOME libraryRservejava目录中就有相关jar包,名字略有不同,经测试可以使用:

简单的测试代码:

[java] view plain copy
package com.zyh.up.general.rjava;

import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class RserveBegin {
public static void main(String[] args) {
try {
callRserve();
} catch (RserveException e) {
e.printStackTrace();
} catch (REXPMismatchException e) {
e.printStackTrace();
}
}

static void callRserve() throws RserveException, REXPMismatchException {  
    RConnection rConnection = new RConnection("192.168.101.122");  

    String rv = rConnection.eval("R.version.string").asString();  
    System.out.println(rv);  

    double [] arr = rConnection.eval("rnorm(10)").asDoubles();  
    for(double d : arr) {  
        System.out.println(d);  
    }  
}  

}

测试可以通过,程序将输出R语言版本信息及10个Double类型的数字。

Java远程执行R脚本

上面的示例只是执行R命令,但如果我们在服务器上放置R脚本又该如何执行该脚本或调用其中的函数呢?

有两种方法可以完成上面的问题。

假如我们定义了一个R脚本area.R,其中定义了一个方法area,该方法接收一个半径值然后计算对应面积并返回,脚本内容非常简单:

[plain] view plain copy
area<-function(r){pi*r^2}

下面描述一下如何调用这个脚本中的area函数,并获取其返回值。
第一种方法就是直接用source函数将area.R脚本加载上来,然后就可以像调用R语言内置命令/函数一样调用脚本中的area方法了。这样做有一个缺点就是每建立一次Java与R之间的连接就需要调用source函数一次。
示例代码:

[java] view plain copy
package com.zyh.up.general.rjava;

import org.rosuda.REngine.REXP;
import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.Rserve.RConnection;
import org.rosuda.REngine.Rserve.RserveException;

public class RserveBegin {
public static void main(String[] args) {
try {
callRScript();
} catch (Exception e) {
e.printStackTrace();
}
}

static void callRScript() throws RserveException, REXPMismatchException {  
    RConnection rc = new RConnection("192.168.101.122");  
    // source函数需要给出R脚本路径, 注意传入转义的引号  
    rc.eval("source("/home/hadoop/wangfeng/javaR/area.R")");  

    REXP rexp = rc.eval("area(10)");  
    System.out.println("Area of 10 is " + rexp.asDouble());  
}  

}

代码测试通过。
另一种调用R脚本的方法是通过Rserv.conf配置文件,该文件路径为/etc/Rserv.conf,如果文件不存在则创建一个新的,然后在文件中添加如下的代码:

[plain] view plain copy
source /home/hadoop/wangfeng/javaR/area.R

然后重新启动Rserve服务即可。
使用这种方式Java测试代码需要去掉source语句这一行,即:

[plain] view plain copy
rc.eval(“source(”/home/hadoop/wangfeng/javaR/area.R”)”);

其它不变,经测试成功。

注1:第二种方式只在Linux下采用,Win平台对应的方法没有找到。
另外:有些人说配置文件为Rserve.conf,但我在122的/etc下找到的是Rserv.conf,不管是哪一个文件(甚至两者都不是,随便命名一个),只要执行下面命令告诉Rserve配置文件是哪一个即可(需要重启Rserve):

[plain] view plain copy
R CMD Rserve –RS-conf Rserv.conf

参考资料




查看评论

注1:关于Rserve网上有很多资料可以参考,详细情况可以参考博客下面的“参考资料”部分,本文只是简...

注重突出重点。通过学习和研究相关文件,在现有管理制度的基础上,结合电子政务项目的特点,进行管理制度的建立,强调突出电子政务项目管理重点。

...

一、为什么(why)要建立电子政务项目的管理制度?

这也许就是为什么实施这样的做法政府需要签署大量的官方文件。但对于企业来讲应该能够简化这样的过程。但是,在企业开始实施BYOD模式之前,企业的IT领导们有必要从各种角度认真考虑政府对BYOD的政策以及观点。

通过实践,赛迪监理认为建章立制,应遵循电子政务项目的相关文件,基于已有的管理制度等,立足当前、兼顾长远,根据项目建设内容的特点,进行管理制度的建立,明确各方权责的划分和关系,优化工作流程和工作机制,构建统一、有效的管理体系。

当企业决定是否采用BYOD模式时,联邦政府的指导方针列出了一个详细的清单以备参考。按照该清单的说明进行操作对于IT领导小组和IT部门员工来说将是一个耗时和繁琐的过程。

因为电子政务项目有其独有的特点和意义。国家电子政务项目主要是指使用中央财政性资金的国家统一电子政务网络、国家重点业务信息系统、国家基础信息库、国家电子政务网络与信息安全保障体系相关基础设施、国家电子政务标准化体系和电子政务相关支撑体系等建设项目。项目建设以政务信息资源开发利用为主线,以国家统一电子政务网络为依托,以提高应用水平、发挥系统效能为重点,深化电子政务应用,推动应用系统的互联互通、信息共享和业务协同,建设符合中国国情的电子政务体系,提高行政效率,降低行政成本,发挥电子政务对加强经济调节、市场监管和改善社会管理、公共服务的作用。所以,已有的管理制度不能完全适用于电子政务项目,这就是为什么电子政务项目特别强调要建立项目管理制度。

很显然,对于联邦政府来说,无论哪个机构都会有关于大量BYOD办公模式的成功案例可以述说。其中包括:

- 《国家电子政务工程建设项目管理暂行办法》的第二十条“项目建设单位必须严格按照项目审批部门批复的初步设计方案和投资概算实施项目建设……”。

· 现任特拉华州州长杰克马克尔(Jack Markell) 是无线通信公司Nextel的创始人之一。该州很早就开始追赶BYOD办公模式的潮流,员工上交州政府配备的电子设备转而使用自己的个人设备,可以获得显著的成本节约,通过这样的措施可以将目前的无线设备支出预算削减大约一半左右。

二、了解电子政务项目建立管理制度的重点是什么(what)?

· 围墙花园(Walled garden):一个控制用户对网页内容和服务进行访问的环境。可以将个人数据从个人设备上安全地分离开来,以便安全地存储数据或处理企业应用程序;

下面就从为什么(why)要建立管理制度,建立规章制度的重点是什么(what),如何(how)建立管理制度分别阐述。

联邦政府提醒BYOD模式并不适用每个机构(换句话说:每一个业务部门)。再使用之前,政府建议需要考虑三个重要原则:

版权声明:本文由ag真人发布于公司领导,转载请注明出处:使用Rserve远程执行R脚本,从政府角度看企业BYO