TNHDB0005R语言与HANA建模一HANA与Rserve的连接及R建模示例.docx
- 文档编号:11389875
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:13
- 大小:420.41KB
TNHDB0005R语言与HANA建模一HANA与Rserve的连接及R建模示例.docx
《TNHDB0005R语言与HANA建模一HANA与Rserve的连接及R建模示例.docx》由会员分享,可在线阅读,更多相关《TNHDB0005R语言与HANA建模一HANA与Rserve的连接及R建模示例.docx(13页珍藏版)》请在冰豆网上搜索。
TNHDB0005R语言与HANA建模一HANA与Rserve的连接及R建模示例
R语言与HANA建模
(一)HANA与Rserve的连接及R建模示例
byHujue
1.概要
R语言主要用于统计分析、数据挖掘,有着丰富的统计计算包资源和挖掘算法。
在HANASPS5开始,HANA结合了R语言,在存储过程中可以使用R代码,调用R中的统计函数。
Rserve与HANA之间的交互如下:
如图中可知,在hana计算引擎中整合了RClient,在存储过程PROC(或是计算视图CV)准备执行前,如果计算引擎识别出了R操作符,便由Rclient发出一个请求到Rserve,并发送相关的参数,触发执行,在执行完毕之后,将结果数据发送到计算引擎。
Rserve是R的一个开发包,用于实现远程连接R进行调用函数。
2.安装R、Rserve与配置
R及Rserve可以安装在windows平台,也可以安装在linux平台上,因为linux平台安装较为复杂,以下是分别以windows平台和linux平台安装为例。
2.1.Windows平台安装R及Rserve
2.1.1.下载
下载链接:
http:
//cran.r-project.org/bin/windows/base/R-3.1.0-win.exe
2.1.2.安装
安装R语言完成后,打开RConsole,输入命令install.packages("Rserve"),然后选择下载镜像,如图示
出现如下图所示,说明Rserve安装成功
2.1.3.启动Rserve
在CMD中,定位到%R_HOME%\library\Rserve\libs\x64,
输入命令
RCMDRserve--RS-port30120--no-save--RS-encodingutf8--RS-enable-remote
--RS-port30120是定义Rserve对外listen的端口
--RS-encodingutf8定义传输数据的字符编码
--RS-enable-remote是开放远程连接,可以让远程主机进行连接(非常重要)
2.2.Linux平台安装R及Rserve
2.2.1.确认安装环境
首先确认Linux平台是哪种,以及版本,输入以下命令
cat/etc/*release*
如上图所知,此次安装环境为SUSE11企业版SP2,即SLE_11_SP2(SUSE同时还有开源版本,为openSUSE)
2.2.2.查找R软件源
访问网址http:
//cran.r-project.org/bin/linux/
查找到与自己安装环境相符的软件源
点击网页中的地址可以查询到软件源链接
以上可以得知,软件源链接为
http:
//download.opensuse.org/repositories/devel\:
/languages\:
/R\:
/patched/SLE_11_SP2/
2.2.3.设置安装环境
以root用户登录服务器,在命令行中输入以下命令
zypperaddrepo–f\
http:
//download.opensuse.org/repositories/devel\:
/languages\:
/R\:
/patched/SLE_11_SP2/\
R-patched
(软件源链接中“:
”前面的“\”为转义符,如果不添加转义符,会报错)
zypper是SUSE环境下安装软件的命令,以上操作是添加安装软件源的定义
如图,添加软件安装源定义成功
2.2.4.安装R
zypperinstallR-patchedR-patched-devel
在安装期间,会有R-patched的key让你确认,选择信任即可;
同时会自动下载关联的rpm包
在命令行中输入R,出现如下提示,则表明R安装成功
2.2.5.安装Rserve
在R命令行中输入以下命令
install.packages("Rserve")
然后会出现下载镜像让你选择
按自己所在位置选择即可,这里选择了“20:
Beijing2”,然后安装自动开始
出现如下信息,说明Rserve安装成功
2.2.6.启动Rserve
退出R平台,在系统命令行输入以下命令
RCMDRserve--RS-port30120--no-save--RS-encodingutf8--RS-enable-remote
查看Rserve
如图所知,Rserve已经正常运行,监听端口为30120
2.3.配置HANA
3.示例及测试
3.1.示例及测试
3.1.1.代码准备
打开HANAstudio,在sqlconsole中输入以下代码
CREATE ROW TABLE "PRIME" ( "NUMBER" INTCS_INT);
insert into "PRIME" values
(2);
insert into "PRIME" values(3);
insert into "PRIME" values(5);
insert into "PRIME" values(7);
CREATE ROW TABLE "PRIME_SQR" ( "NUMBER" INTCS_INT);
CREATE PROCEDURE MY_F(IN input1PRIME,OUT resultPRIME_SQR)
LANGUAGE RLANG AS
BEGIN
result<-as.data.frame(input1$NUMBER^2);
names(result)<-c("NUMBER");
END;
MY_F是采用RLANG编写的SQLscript存储过程,在存储过程内,调用了R语言的函数,如as.data.frame,“<-”是调用R语言函数的标识,当存储过程执行时识别到“<-”,就会远程连接到HANAconfiguration中定义的Rserve,然后通过Rserve调用R语言函数。
3.1.2.代码测试
MY_F执行示例,在sqlconsole中输入以下代码
callMY_F("SYSTEM"."PRIME",?
);
执行后结果为
3.1.3.常见错误说明
3.1.3.1.错误1:
没有任何Rserve可连接
执行存储过程后,错误提示如下
原因:
启动Rserve时,未加上--RS-enable-remote参数,或是IP、端口不正确
3.1.4.RLANG语法说明
暂缺
4.特别说明
4.1.R安装平台的问题
在《SAPHANARIntegrationGuide》中提到R、Rserve必须安装在独立服务器上,不得安装在HANA服务器上,而且R最好安装在SLESLinux上,其他R宿主环境不被支持。
实际安装中证实,R安装在windows上也能连接,并且按原理来说,R安装在hana服务器上也是可行的;
Rserve推荐在Linux下使用,因为在Windows平台上还很不完善,Windows上运行Rserve还是有很大的局限性的。
最大的问题是,所有的连接都会在一个工作空间内运行。
所以当客户端是多线程程序时,可能会造成线程间互相干扰。
我们需要在客户端做一些额外的工作,使它能够以线程安全的方式运行。
Java端可以通过使用synchronize使得同一时间只有一个线程使用R服务。
Rserve的另一个缺点是,它的错误处理过于简单化,如果R端出现错误,它抛出的异常对于找到问题的根源几乎没有任何用处。
其次,开发中需要注意的是,Rserve同时只允许一个客户端连接。
因此,如果第二个线程试图连接时,它就会一直处在等待状态。
另外,如果要更新R包,也需要关闭并重新启动Rserve。
所以,如果发现客户端连接时出现异常情况,查看一下任务管理器,看是不是有多个Rserve的线程在运行,或者你的服务有没有重启,往往可以帮助解决问题。
5.参考资料
1、R语言包安装并实现与HANA的整合
2、《SAPHANARIntegrationGuide》,
3、Rserve与java的跨平台通信,http:
//blog.fens.me/r-rserve-java/
4、深入理解SAPHANA与R整合的原理
(一),
5、在linux下安装R语言程序及bioconductor程序包,
6、R语言服务器程序Rserve详解http:
//blog.fens.me/r-rserve-server/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TNHDB0005R 语言 HANA 建模 Rserve 连接 示例
![提示](https://static.bdocx.com/images/bang_tan.gif)