>> Rserve  -   바이너리 R 서버 란? 

일단 TCP/IP서버다. 이 서버는 다른 언어들이(C, Java , php등등) R을 설치하거나 R함수에 대한 링크 없이도, R의 기능들을 사용할수 있도록 하는 프로그램이다.  모든 연결들은 분리된 작업환경(workspace)와 작업폴더를 가진다. 클라이언트측 구현은 C/C++, JAVA, PHP같은 언어들로 구현되어 있다. Rserve는 원격접속, 인증, 파일전송을 지원한다. 통계적 모델이나 시각화 도면(plots)들을 위한 R뒷단(backend)측을 접목하는 것이 주된 사용목적이다. (참고 : https://rforge.net/Rserve/index.html ; Rserve 사이트)

아 그리고 Rserve는 R에서 한번 켜 놓으면, R이 죽어도 데몬 프로그램으로 살아 남는다. 

기능들

- 빠름 ; R의 초기화가 필요없기 때문

- 바이너리 전송 ; 전송 프로토콕은 R 객체를 R텍스트 결과(output)가 아니라, 바이너리 데이터로 전송한다.

- 자동 타입 변환 ; 대부분의 R 데이터 타입들은 고유한 데이터 타입으로 변경된다. 예를 들면 rnorm(10)의 결과는 C/Java 에서 double[10]으로 변환된다. 또한 Java 클라이언트는 RBool, RList같은 R의 새로운 타입을 위한 클래스를 제공한다. 

- 지속성 ; 각각의 연결은 자신만의 namespace (C++개념) 와 작업 디렉토리를 가지고 있다. 당신이 만든 각 객체들은 연결이 종료될때까지 유지된다. 클라이언트는 결과값들을 즉각적으로 가져오거나 만들 필요가 없다. - 클라이언트에 대한 독립성 ; 클라이언트들이 R에 연결된것이 아니기 때문에 RSJava 등등에서 발생하는 쓰레드 문제(issue)가 없다. 

- 안전성 ; Rserve는 서버측 검증을(challenge) 가진 암호화된 사용자/비밀번호 인증을 지원함으로써, 기본적인 안전성을 제공한다. Rserve는 local 연결만 받아들이도록 설정이 가능하다. 

- 파일 전송 ; Rserve 프로토콜은 클라이언트와 서버간에 파일전송이 가능하도록 한다. 이런 식으로 Rserve는 plot 이미지를 생성하는 등의 작업을 위한 원거리 서버로써 사용이 가능합니다. 

- 설정가능 ; 설정들을 조정하기 위해서 파일제공.  사용자인증, 원거리 접근, 파일 전송같은 특성들의 사용여부를 결정할수 있는 설정파일이 있음. 

없는 기능

- Callback 기능: 응용프로그램에서 TCP/IP와 R소켓으로 구현가능하나 Rserve에 포함되어 있지는 않음.

- Rserve 는 R에대한 telnet 앞단(front-end)이 아니다. 출력된 결과는 전송되지 않는다. Rserve는 빠른 속도를 위해서 바이너리 프로토콜을 쓴다.

- Rserve는 연결간에 thread safe 하다.(쓰레드 안정성이 있다 = 여러 thread가 동시에 사용되어도 안전하다). 그러나 eval 메소드들은 thread safe 하지 않다. 이것은 eval들이 병렬 호출이 아니라는 보장이 없으면, 다양한 쓰레드들이 같은 연결을 사용하지 않아야만 한다.  


>> JRI  

(Java --> R) JRI는 Java /R간의 인터페이스이다.(JRI: Java R Interface) R이 자바 응용프로그램에서 단일 쓰래드로 돌아가도록 한다. 기본적으로 R의 동적 라이브러리를 Java에 넣고, R의 기능들에 Java API를 제공한다. R함수를 단순히 부르는 것 뿐만아리나 동적 interpreter환경(REPL)을 완전히 구현하는 것도 제공한다. 

중요한 점은 JRI는 지금은 rJava의 일부분이라는 것이다. 만약 당신이 그냥 JRI를 사용하고 싶다면 그냥 rJava binary를 설치하는 것으로 충분하다. 이제는 더이상 JRI 단독으로 더 좋은 버전이 출시(release)되지 않는다. JRI는 오직 rJava의 일부분으로서만 출시된다. rJava가 포함된 JRI를 설치하기(locate) 위해서는, R에서 다음의 명령어를 입력하면 된다. system.file("jri", package="rJava")

 만약 당신이 서버/클라이언트 개념이 없는 Java 응용프로그램에서 R을 사용하는 방법을 찾는다면, JRI를 한번 살펴보는게 좋을 것이다. JRI는 R을 자바에 직접 링크하기 위해서 JNI을 사용한다. 

어떤 의미로는 JRI은 rJava의 반대이기도 하고, 혼합될 수도 있다. ( 예를 들면, rJava를 통한 JVM에 반응하는 JRI에서, R코드를 실행 시킬수도 있다. (R에서 rJava로 java코드 사용해 다시 Java속에서 R코드를 사용할 수 있다는 의미로 이해함)) JGR(Java GUI for R) 프로젝트는 R을 위한 Java GUI를 완벽하게 제공하기 위해서, JRI와 rJava의 완전한 사용을 만들고 있다.     

JRI는 고유한(Native) 코드를 사용하지만, 윈도우, 맥, 선, 리눅스등, 자바가 가능한 모든 플랫폼을 지원한다. 
(참고 : https://rforge.net/JRI/)

대부분의 함수들에 대한 설명문서(documents)는 다음 링크에 잇다. ( https://rforge.net/org/docs/ )

JNI는? 

(Java Native Interface) JNI는 프로그래밍 프레임워크이다. 자바 가상머신에서 돌아가는 자바 코드가 다른 고유한 응용프로그램이나 라이브러리들(C,C++, 어셀블리로 짜인)을 호출하거나 또는 이들로부터 호출될수 있는 것이다. 

쉽게 말하면 자바와 다른 언어를 연동하는 솔루션임

JNI는 다른 언어로 작성된 코드를 자바에서 호출할 수 있도록 만들어진 규약이다. 현재는 C/C++에 대한 호출만을 정확하게 지원한다. 어떻게 보면 JNI는 자바가 만들어진 철학과는 반대되는 개념이다.

JNI 의 목적과 특징들

JNI는 이미 다른 언어로 쓰여진 응용프로그램들이 자바 응용프로그램들에 접근가능하도록 해준다. 많은 표준(standard) 라이브러리 클래스들은 사용자나 개발자들에게 기능들을 제공하기 위해서 JNI에 의지하고 있습니다. 예를 들면 file I/O 나 음향 능력등이 있습니다. 표준(standard) 라이브러리 안에 있는, 성능과 플랫폼에 민감한 API 실행(implementations)들은 모든 자바 응용프로그램들이 안전하고 플랫폼 독립적인 방법으로 이런 기능들에 접근하도록 합니다. 

(참고 : http://sinuk.egloos.com/2676307,    http://en.wikipedia.org/wiki/Java_Native_Interface) 

>> rJava 란? 

(R --> JavarJava는 R에서 Java로 이어진 간단한 인터페이스이다. 이것은 .C/.Call의 C인터페이스와 비교하면 비슷하다.  rJava는 (JNI를 통해서) R과 Java사이에 낮은 수준(low-level)의 연결을 제공해준다. 이것은 객체만들기, 메쏘드 호출하기, R로부터 자바 객체들의 필드 접근하기를 제공한다.  

어떤 의미에서 rJava의 반대개념으로 반대방향의 연결을 제공하는 JRI이 있다. (Java에서 불려지는 R을 의미함.) 이것들은 분리된 개체로써 사용될수도 있지만, 최근 JRI는 rJava 패키지의 일부로써 제공된다. 근래에 rJava는 JGR(Java GUI for R), iPlots(자바로된 통계함수), JavaGD(Java Graphics Device)의 일부로써 사용된다. 
(참고 : 
https://rforge.net/rJava/ )

도움이 되셨나요?^^

  1. 깍두기 2015.08.03 16:23

    도움이 많이되었어요~ 감사합니다!

  2. 간지띠롱 2017.02.28 10:02

    굿~!!!

i386은 첫 x86 32bit 프로세서이다. 
이것은 32비트에서 돌아가는 옛 프로세서의 구조를 말한다. 최신의 프로세서에는 적용되지 않는다고 한다. 

i686은 비교적 최근 프로세서 구조이다. 이것은 팬티엄 2이상의 프로세서에 들어간다고 한다. 

x86_64는 64비트의 구조를 가진 프로세서이다. x_86구조를 64비트로 확대한것을 말한다. 이 프로세서 구조는 여전히 x86의 32비트 OS를 구동시킬수 있다. 64비트 OS는 당연히 됨.

그리고 PowerPC(PPC)는 MAC(맥)이 과거 사용했던 프로세서이다. 그런데 최근에는(2007년에 쓰여진 글임) 맥도 x86 구조로 이동하여서, ppc 구조는 플스나 액박 같은 게임 콘솔에서 주로 보인다고 한다. ppc64는 PowerPC구조 중 64비트로 된것인가 보다. 

도움이 되었다면 손가락이나 광고를 클릭해주세용^^


외국 사이트를 참조하였다. 

(http://www.daniweb.com/hardware-and-software/linux-and-unix/threads/139589/i386-i686-x86_64-ppc)


아 내 환경은 윈도우 8 에서 vmware-player로 centos 6.5를 깔아서 (64bit용) 사용했다.

여기를 참조했다.

https://github.com/rstudio/shiny-server/wiki/CentOS-step-by-step-Installation-Instructions


리눅스에서는 자동으로 R이 포함되기도 하는 모양인데...(불확실)

센트 OS 에서는 설치가 되어 있지 않아서 내가 직접 설치해줘야 한다. 여러군데를 찾아보다가 안되서 이렇게 직접 설치한 과정을 보이기로 했다.


공식 사이트를 찾아서 (R한국 사용자모임) centos에서 까는 법을 찾아보았는데, 안되더라... (http://r-project.kr/wiki/CentOS)  

1. 일단 터미널을 연다. (윈도우로 치면 cmd같은거) 바탕화면에서 우클릭하면 "Open in Terminal" 이 열린다. 

2. 터미널에서 사용자를 root 모드로 변경한다. [su  root ] 를 치면 password를 입력하다고 한다. 당신의 비번을 입력해서 변경하다. (su의 의미는 super user이다.)

3. yum update
명령어를 처서 관련 패키지(모듈이라고 생각하면 된다.) 업데이트를 한다. 한 120m 정도 크기가 된다. 그담에 yum install R 을 친다. --> 안된다...;; 그래서 나는 맨위에 영문 사이트를 참조하였다. 

4. 한번 같이 봐보자. (여기서 나의 치명적 실수 빨간색으로 된 부분은 내 컴퓨터 환경이 32bit일때 설치하는 것인데 망함.... 64bit용으로 다시 깔아야 된다. --> 다시 깔아서 설치했는데도 png 패키지를 깔리지 않는다. 왤까. 아놔.)

(64비트용 다운로드 경로 : http://mirror.us.leaseweb.net/epel/6/x86_64/epel-release-6-8.noarch.rpm)

# Get the EPEL rpm
wget http://mirror.us.leaseweb.net/epel/6/x86_64/epel-release-6-8.noarch.rpm
http://mirror.us.leaseweb.net/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm --test

# Import the EPEL GPG key wget https://www.fedoraproject.org/static/0608B895.txt sudo mv 0608B895.txt /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 <-폴더생성됨 sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 # Verify that the key has been imported. rpm -qa gpg* ## You should see a line like this: gpg-pubkey-0608b895-4bd22942 # Install the rpm sudo rpm -ivh epel-release-6-8.noarch.rpm

위 명령어 중에서 검정색들을 차례대로 붙여넣기를 한다. 
복사후에 터미널에서 우클릭후 paste 를 클릭하여 붙여넣는다. (컨트롤+V는 작동 안함) EPEL은 ( Extra Packages for Enterprise Linux) 의 약자이다. 기업용 리눅스를 위한 추가 꾸러미. 정도로 이해하면 되겠다. 
rpm은 (Redhat Packages Manager의 약자, 레드헷에서 만든 꾸러미 관리자) 패키지를 의미하며 쉬운 설치를 도와준다. (참고자료 : http://se.uzoogom.com/88 ) 

이렇게 쭈욱 설치를 마치면 이제 드디어 Node.js라는 것이 설치가 완료된 것이다. 아 그리고 여러분은 이미 root 계정이므로 위의 명령어 중에서 sudo 부분은 빼도 될것이다.  

sudo yum install npm

을 쳐서 npm을 설치하자. (Node Packaged Module)의 약자. 

자 다되었다.

5. R 설치하기

" yum install R "

을 입력하여서 드디어 설치가 시작된다. 약 176MB 정도 되므로 유선 인터넷을 추천한다. 내가 있는 곳에서는 무선이 느려서 시간이 좀 걸렸었다. ㅠㅠ 


6. 설치가 끝나면 터미널에 R 이라고 쳐보자. 

다음줄에  

>     <-- 요렇게 줄의 맨 첫모양이 바뀌면 바르게 설치된것!

잘 작동이 될 것이다!

예문을 하나 만들어보자. 

a <- c(1,2,3)
a
[1] 1 2 3 

이라고 나오면 정상이다

끝날때는 q() 이라고 치면 된다.
--(Save workspace image? ) 라고 묻는데 작업한 변수나 함수들을 저장할지 묻는 것이다. 한게 없으니 그냥 n을 적고 엔터를 눌러 나가자. 


7. 여기까지 centos 6에서 R 설치 끝!


8.  이제부터 Rstudio를 깔아보자.  (참고 : http://www.rstudio.com/ide/download/server )

debian, ubuntu, CentOS, redhat 관련 방법이 나와 있다. 


9. 64비트용을 깔아보자. 
cpu의 bit에 맞춰서(32bit인지 64bit인지..) os를 깔고, 그것에 맞춰서 프로그램을 다운 받으면 된다. 본인 컴퓨터의 cpu와 OS는 모두 64bit 이기에 64만 소개한다. 

64-bit 

$ wget http://download2.rstudio.org/rstudio-server-0.98.490-x86_64.rpm 
$ sudo yum install --nogpgcheck rstudio-server-0.98.490-x86_64.rpm 

중간에 물어보는 것들은 죄다 'y'를 눌러서 끝낸다. 설치가 끝났다. (크기는 약 90MB)


10. 아래 명령어로 제대로 설치가 되었는지 확인하자. 

sudo rstudio-server verify-installation

이건 나중에 잘 깔렸는지 확인하기 위한 명령어이다. (아래와 비슷하게 나오면 성공이다)

rstudio-server stop/waiting
rstudio-server start/running, process 25722

11. 웹으로 접속하기 위해서 ip를 확인하자. 
자 이제 모두 설치가 완료되었다. 서버의 IP를 확인하기 위해서 "ifconfig"를 처서 
inet addr : ***.***.***.*** 을 찾아서 서버의 IP를 확인한다. 

12. 웹으로 접속한다. 
웹(크롬이나 파이어폭스를 이용했는데 익스플로러도 되는지는 모르겠다 되겠지 뭐)으로 접속한다. 아래 명령어를 이용한다. server-ip는 위에서 얻은것. 
http://<server-ip>:8787
근데 요기서 문제가 발생했다. 

13. 포트를 열어줘야 한다. 
포트를 열어줄려면... 
vi /etc/sysconfig/iptables

를 치고 들어간다. 

열면 대략 여러개가 나오는데 그중에서 아래 굵게 칠한, 한 줄을 추가해준다. (바로 윗줄과 거의 같다)

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8787 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited

이것의 의미는 8787 포트를 외부에서 접근할수 있도록 수정해주는 것을 의미한다. 
ESC를 누른후 : 을 입력하고, wq를 적고 엔터 치면 저장후 나가기가 된다. 

14. 터미널로 돌아가서 방금 수정한 부분만 다시 시작하기
service iptables restart 

사진은 처음인데 잘 들아가서 기분이좋다. 그러면 이제 다른 웹 브라우져에서 한번 열어보자. 아쉽게도 익스플로러는 지원이 안된다. 

Your web browser is not supported by RStudio.

MS가 싫은가보다.  크롬, 파폭, 사파리에서는 가능하니 시도해보자. 여기서 OS 유져네임과 password를 사용해서 들어가보자. 근데 아마 안될꺼다. 왜냐면 R스튜디오는 root 계정으로 접속하는 것을 허용하지 않으므로 서버에 개인 사용자를 위한 계정을 만들어야 한다. 서버에 계정을 만들면 그 계정을 R studio server에서 그대로 이용함. 

서버에 접속하여 RStudio Server를 사용할 사용자들의 계정과 패스워드를 설정해준다. 

ssh root@10.1.1.1
adduser user1
passwd user1

위에서 user1은 임의로 설정한 계정이며 실제로 사용할 계정을 생성해야한다.
여튼 나는 여기서 user1로 만들어서 웹 브라우져에서 동작이 가능하도록 했다. 

15.  문제점. png 패키지가 깔리지 않음... 그래서 ggmap이나 rgooglemap도 깔리지 않음.. 왜지.

도움이 되셨나요?^^


  1. 보나 2016.02.12 11:19

    도움이 많이되었어요~ 감사합니다~

  2. 가나다 2016.03.28 14:44

    덕분에 잘 다운 받았습니다. 감사합니다 ^^

  3. Bigmanmong 2016.04.21 15:46

    centos에서 libpng-devel 설치해보세요
    # yum install -y libpng-devel
    이후에 R에서 png패키지 설치하시면 설치 될거에요
    (centos 6.7 64bit 상에서 테스트 했습니다)

  4. psw 2016.08.31 10:23

    혹시 실서버에있는 centos6.5에서 vm을사용해서 윈도우설치하는방법 아시나요..?

    • psw 2016.08.31 10:25

      kvm을 찾아보라고하는데 윈도우설치하는 방법은 찾기가 어렵더라구요..

    • 사용자 보이머 2016.08.31 11:40 신고

      아니요...잘모르겠습니다 ㅠ

  5. Youn 2018.02.22 15:09

    학교 연구실 서버에 R과 R studio를 설치해야 할 일이 생겼었는데, 이 글을 보고 해결하였습니다.
    감사합니다!!!

원본 출처: http://127.0.0.1:22171/library/utils/html/memory.size.html

걍 내가 나중에 보려고 번역해 놓는다. 


memory.size{utils}                                                                R Documentation

메모리 할당에 대하여


>설명

memory.size는 현재 사용중인 R버전이 쓰고 있는 malloc 함수의 메모리 할당의 최대 크기나, 현재크키를 알려준다. 


>사용법

memory.size(max = FALSE)

memory.limit(size = NA)


>단위?(Arguments)

max 

logical. 로지컬하다? 만약 OS로부터 얻어온 메모리의 최대량이 '참'이면, "True",

만약 현재 사용중인 양이 틀리면 FALSE, 만약 메모리가 제한되면? "NA"


>자세한 설명

명령라인 표식(Command-line flag)인 --max-mem-size 가 얻을수 있는 메모리의 최대값을 설정한다. (housekeeping 오버헤드의 매우 작은양까지를 포함함). 이것은 32bit 윈도우즈에서는 3Gb를 넘을 수 없고, 대부분의 버전에서는 2Gb로 제한되어 있다. 현재 최소(minimum)는 32Mb이다.

만약 64bit 윈도우에서 32bit R이 돌아가는 중이라면, 얻을수 있는 메모리의 총량은 4Gb 이하(under)이다. 64bit 윈도우와, 64bit R이라면 현재 메모리는 최대 8TB까지 이다. 

메모리 한계은 증가될수도 있다.(Memory limits can only be increased.)

환경 변수 R_MAX_MEM_SIZE 는 초기 한계값을 설정하는(specify) 다른 방법을 제공한다. 


>값

Mb단위로(1048576 bytes), memory.size는 0.01MB 단위로 다듬고(round to), memory.limit는 잘라낸다(round down).


>주의사항

이 함수들은 다른 플랜폼들에 존재하지만 R이 스스로에게 제한된 메모리를 할당하므로, 무한대를 보고한다. 즉, OS자신의 자원(facilities)이 활용될수 있다. 


> 추가 참고 사항.

다른 제한(limits) 들에 대한 Memory-limits.

The rw-FAQ 

> 예시들

memory.size()
memory.size(TRUE)
memory.limit()


+ Recent posts