Friday, January 2, 2015

JRI vs. Rserve vs. Rsession




JRIRserveRsession
Documentation부족 (중)부족 (상)부족 (하)
API부족 (중)부족 (상)부족 (하)
Installation쉬움 (상)보통 (하)보통 (중)
Configuration쉬움 (상)보통 (하)보통 (중)
Programming쉬움 (상)보통 (하)보통 (중)
Community부족 (중)부족 (상)없음 (하)
Server/Client
OO
WindowsO
O

RabbitMQ vs. ActiveMQ

  1. Web Search
  2. Review

  3. Messaging Protocols


    ActiveMQRabbitMQ
    AMQP1.00-8, 0-9, 0-9-1
    MQTT
    OpenWire-
    REST
    STOMP
    STOMP over Websockets
    XMPPOver Gateway


  4. Client Interfaces


    ActiveMQRabbitMQ
    C
    C++-
    Erlang-
    Haskell-
    Java JMS-
    Java proprietary
    .NET-
    Objective-C--
    Perl-
    PHP-
    Python-
    Ruby-


  5. Performance Test 1 (the lower the better)



  6. Performance Test 2
    1. send and receive with MQTT QOS 1
      1. ActiveMQ NIO


      2. RabbitMQ


    2. send and disconnect, receive with MQTT QOS 0
      1. ActiveMQ NIO


      2. RabbitMQ


  7. Reference
    1. http://predic8.com/activemq-hornetq-rabbitmq-apollo-qpid-comparison.htm
    2. http://www.google.com/trends/explore#q=rabbitmq%2C%20activemq&cmpt=q
    3. http://www.techwars.io/fight/rabbitmq/activemq/
    4. http://my.oschina.net/zookeeper/blog/186667
    5. http://www.ekito.fr/people/mqtt-benchmarks-rabbitmq-activemq/

Apache Solr vs. ElasticSearch

http://solr-vs-elasticsearch.com/

Kafka vs. RabbitMQ vs. ActiveMQ

  1. Web Search
  2. Producer Test
    1. Result
    2. Reason
      1. Kafka producer doesn’t wait for acknowledgements from the broker and sends messages as faster as the broker can handle
      2. Kafka has a more efficient storage format. On average, each message had an overhead of 9 bytes in Kafka, versus 144 bytes in ActiveMQ. This is because of overhead of heavy message header, required by JMS and overhead of maintaining various indexing structures. LinkedIn observed that one of the busiest threads in ActiveMQ spent most of its time accessing a B-Tree to maintain message metadata and state

  3. Consumer Test
    1. Result
    2. Reason
      1. Kafka has a more efficient storage format; fewer bytes were transferred from the broker to the consumer in Kafka
      2. The broker in both ActiveMQ and RabbitMQ containers had to maintain the delivery state of every message. LinkedIn team observed that one of the ActiveMQ threads was busy writing KahaDB pages to disks during this test. In contrast, there were no disk write activities on the Kafka broker. Finally, by using the sendfile API, Kafka reduces the transmission overhead
  4. Reference

    1. http://www.infoq.com/articles/apache-kafka
    2. http://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-three-cheap-machines

Hortonworks vs. Cloudera vs. MapR





Shiny

  1. Shiny 소개

    1. R를 사용하여 웹 응용프로그램을 빌드할 수 있도록 우아하고 강력한 웹 프레임워크를 제공하는 오픈 소스 R 페케지
    2. HTML, CSS, JavaScript에 대한 지식이 없이 분석을 상호적인 웹 응용프로그램을 통하여 진행할 수 있도록 도움
  2. Shiny 특징

    1. 세련된 문서
      1. 설치부터 Shiny의 큰 틀까지 알수 있는 사용 지침서
      2. 기본부터 고급 개발을 위한 문서
      3. 기타 서비스들에 대한 상세한 문서
      4. 많은 개발 관련 참고 문서
    2. 세련된 디자인
      1. 깨끗한 기본 디자인
      2. 웹 기술을 사용하여 고급 디자인 가능
    3. Gallery: 많은 앱의 소스가 공유되여 있음
    4. shinyapps.io

      NOTE: 
      1. Shiny 웹 앱 관리를 위한 PaaS
      2. 앱을 cloud에 배치하여 사용 가능
      3. 인증 기능 제공
      4. shinyapps 포럼: https://groups.google.com/forum/?hl=en#!forum/shinyapps-users
    5. Shiny Server
      1. Shiny 앱 배치를 위하여 특별히 디자인 된 웹 서버를 빌드하는 백 앤드 프로그램
      2. 제어된 환경에 앱을 배치하기에 앱과 관련 데이터는 항상 사용자의 통제하에 있음
      3. 인터넷을 통하여 앱 사용이 가능하도록 선택 가능
      4. 인증 기능 제공 (Pro 버전)
      5. 앱 사용에 관한 정보 보여주는 관리자 대시보드를 제공 (Pro 버전)
      6. 앱 보안을 위하여 SSL/HTTPS 사용 (Pro 버전)
      7. RStudio 부터의 우선 지원 (Pro 버전)
      8. 매개 앱의 자원 사용에 대한 제어 (Pro 버전)
      9. 무/유료 비교


        Open source EditionProfessional Edition
        Overview
          • Great for hosting lightweight public applications
          • Does not support authentication or SSL
          • Single R process per application
        • All of the features of open source; plus:
        • Perfect for workgroups and enterprises
        • Supports authentication and SSL
        • Includes admin dashboard with both realtime and historical performance data
        • Can use multiple R processes per app
        SupportCommunity forums only
        • Priority Email Support
        • 8 hour response during business hours (ET)
        LicenseOpen Source AGPL v3Commercial Server License
        PricingFree
        • 0 concurrent connections: $9,995/server/year
        • 200 concurrent connections: $24,995/server/year*
        Deploy Shiny applications to the InternetOO
        Move computation close to the dataOO
        Host multiple applications on a single serverOO
        Deploy Shiny applications behind firewallsOO
        Password file authentication
        O
        LDAP and Active Directory authentication
        O
        Group based authorization
        O
        SSL support
        O
        Scale applications across multiple processes
        O
        View and manage active sessions
        O
        Allocate resources on a per application basis
        O
        Define application concurrency limits
        O
        System performance and resource metrics
        O
        Per application: Usage, performance, and resource metrics
        O
        Health check end point
        O


    6. 지원
      1. 커뮤니티 지원
      2. 세일즈 지원 (유료 버전 사용 시)
  3. 관련 정보

    1. 홈페이지 
      1. http://www.rstudio.com/products/shiny/
      2. http://shiny.rstudio.com/
    2. shinyapps.io: https://www.shinyapps.io/
    3. Shiny Server: http://www.rstudio.com/products/shiny/shiny-server/
    4. 관련 포럼
      1. https://groups.google.com/forum/#!forum/shiny-discuss
      2. https://groups.google.com/forum/?hl=en#!forum/shinyapps-users

RPostgreSQL

  1. Installation
    1. install.packages("RPostgreSQL")
    2. library(RPostgreSQL)
  2. Driver
    1. drv <- dbDriver("PostgreSQL")
    2. dbListConnections(drv)
    3. dbGetInfo(drv)
    4. summary(drv)
    5. dbUnloadDriver(drv)
  3. Connection
    1. con <- dbConnect (drv, user ="tester", password ="tester", dbname ="testDB", host ="IP Address")
    2. dbGetException(con)
    3. dbListResults(con)
    4. dbListTables(con)
    5. dbBeginTransaction(con)
    6. dbRollback(con)
    7. dbCommit(con)
    8. dbDisconnect(con)
    9. dbExistsTable(con, "table name")
    10. dbRemoveTable(con,"table name")
    11. dbListFields(con, "table name")
    12. df <- dbReadTable(con, "table name")
    13. dbWriteTable(con, "new table name", df)
    14. dbGetQuery(con, "select * from tableName")
  4. Result Set
    1. rs <- dbSendQuery(con, "select * from tableName")
    2. dbGetStatement(rs)
    3. dbColumnInfo(rs)
    4. dbGetRowsAffected(rs)
    5. dbHasCompleted(rs)
    6. dbGetRowCount(rs)
    7. dbClearResult(rs)
    8. fetch(rs, n = 1)
    9. fetch(rs, n = -1)

RMySQL

  1. Introduction
    1. RMySQL is a database interface and MySQL driver for R
    2. The latest version will always be available here: http://cran.r-project.org/web/packages/RMySQL/index.html
    3. Binaries No Longer Supported
    4. It too difficult to keep binary versions of RMySQL up to date with the latest R version and MySQL version
    5. Always compiling RMySQL from the latest source packages is recommended.
  2. Installation (officer)
    1. Download Rtools from here: http://www.murdoch-sutherland.com/Rtools/
      1. making sure to install the correct version for your R version
      2. Be sure that you place the Rtools bin path in your default path so that R can invoke the compilers
    2. Install a MySQL client library from http://www.mysql.com or http://dev.mysql.com
      1. If you already installed a MySQL server, you may want to re-run the install to ensure that you also installed client header and library files
      2. Note that Xampp doesn't include these
    3. Edit or create the file Renviron.site and add the variable MYSQL_HOME which contains the location of your MySQL install
      1. The file typically isn't created when installing R, so you may need to create it yourself
      2. You will want to place it under the /etc directory in your R Home area
      3. If you don't know where that is, you can issue R.home() at your R prompt
      4. You will be adding a variable named MYSQL_HOME in variable=value syntax
      5. Here's an example: 
        • Location of Renviron.site: C:/PROGRA~1/R/R-2.11~1.0/etc/Renviron.site 
        • Content is: MYSQL_HOME=C:/PROGRA~1/MySQL/MYSQLS~1.0/
    4. Restart R and execute install.packages('RMySQL',type='source') at the R prompt
  3. Installation (personal)

    본 장에서는 Windows에서 RMySQL를 사용하여 원격 MySQL를 연동하는 방법을 설명
    1. Windows 정보
      1. Windows 7
    2. 사전 준비
      1. Rtools 설치
      2. MySQL Server가 설치된 원격 서버
    3. 설명
      1. Connector/C (libmysqlclient) 설치
      2. libmysql.dll 파일 복사
        • Connector/C 설치 위치가 'C:\Program Files\MySQL\MySQL Connector C 6.1' 라고 가정
        • lib 폴더에 opt 폴더를 생성 (32 bit)
        • lib 폴더의 libmysql.lib 를 opt 폴더로 복사 (32 bit)
        • lib 폴더에서 libmysql.dll 를 bin 폴더로 복사 (64 bit)
      3. R 관련 설정
        • R 설치 위치가 'D:\Program Files\R\R-3.1.0' 라고 가정
        • etc 폴더에 Renviron.site 파일 생성
        • 다음 내용 추가: MYSQL_HOME=C:/Program Files/MySQL/MySQL Connector C 6.1
      4. R 시작
        • 다음 명령어 실행: Sys.getenv('MYSQL_HOME')
        • 반환 값: C:/Program Files/MySQL/MySQL Connector C 6.1
      5. RMySQL 사용
        • install.packages('RMySQL',type='source')
        • library(RMySQL)
        • con <- dbConnect ( MySQL () , user ="계정", password ="비번", dbname ="데이타베이스", host ="IP 주소")
        • dbGetQuery (con , " select * from 테이블명 ")

  4. Reference

    1. http://biostat.mc.vanderbilt.edu/wiki/Main/RMySQL
    2. http://cran.r-project.org/web/packages/RMySQL/index.html

Rsession

  1. Rsession 소개
    1. 원격 혹은 로컬 R 세션에 접속할수 있도록 사용하기 쉬운 자바 클라스를 제공
    2. 백-앤드 엔진으로 Rserve 0.6을 사용하며 필요에 따라 자동으로 로컬 서버를 생성
    3. Rserve 보다 높은 래벨의 API 지원하며 서버 측 Rserve의 스타트업을 포함
    4. 멀티 세션 R engine 제공
    5. Windows 지원
  2. 설치, 설정 및 사용

    NOTE: 
    • Window를 선택한 원인은 기타 OS 설치 필요 없이 사용해 보기 위함
    • 로컬 서버를 자동으로 생성하게하여 테스트
    • 참고할 수 있는 문서가 없어 본인의 방법 사용하였기에 정답이 아님

    1. 환경 설명
      1. Windows 7 64bit
      2. R 3.1.0
      3. Eclipse Luna
    2. 파일 다운로드
      1. libRsession.zip 다운로드
      2. http://rsession.googlecode.com/files/libRsession.zip
      3. 압축을 풀면 Rsession 사용에 필요한 JAR 파일이 있음
    3. Eclipse 사용
      1. 관련 JAR 파일을 참고 라이버리로 사용
      2. R 버전 정보를 반환하는 예제 Rversion.java 사용
      3. Java File -> Run As -> Run Configurations -> Environment -> New -> Variable: R_HOME, Value: [R_HOME] -> Apply -> Run
      4. [R_HOME]: 예를 들면, D:\Program Files\R\R-3.1.0
      5. 예제를 실행하면 중간에 'R version 3.1.0 (2014-04-10)'를 출력한 것을 볼 수 있음
  3. 관련 정보

    1. 홈페이지: https://code.google.com/p/rsession/
    2. 전문적 지원: https://sites.google.com/site/mulabsltd/products/rsession

Rserve

  1. Rserve 소개
    1. 다른 언어들이 R을 설치하거나 R함수에 대한 링크 없이 R의 기능을 사용할수 있도록 하는 TCP/IP 서버
    2. 모든 연결들은 분리된 작업환경과 작업폴더가 있음
    3. 클라이언트측 구현은 C/C++, JAVA, PHP같은 언어들로 구현
    4. 원격접속, 인증, 파일전송을 지원
    5. 통계적 모델이나 시각화 도면을 위한 R 백앤드 측을 접목하는 것이 주된 사용 목적
  2. Rserve 특징
    1. 빠름: R의 초기화가 필요없음
    2. 바이너리 전송: 전송 프로토콕은 R 객체를 R텍스트 결과가 아닌 바이너리 데이터로 전송
    3. 자동 타입 젼환: 대부분의 R 데이터 타입들은 고유한 데이터 타입으로 변경
      1. rnorm(10)의 결과는 C/Java 에서 double[10]으로 변환
      2. Java 클라이언트는 RBool, RList같은 R의 새로운 타입을 위한 클래스를 제공
    4. 지속성: 
      1. 각각의 연결은 자신만의 C++ 개념인 namespace와 작업 디렉토리가 있음
      2. 각 객체들은 연결이 종료될때까지 유지
      3. 클라이언트는 결과값들을 즉각적으로 가져오거나 만들 필요가 없음
    5. 클라이언트에 대한 독립성: 클라이언트들이 R에 연결된것이 아니기 때문에 RSJava 등등에서 발생하는 쓰레드 문제가 없음
    6. 안정성: 
      1. 서버측 검증을 가진 암호화된 사용자/비밀번호 인증을 지원함으로써 기본적인 안전성을 제공
      2. local 연결만 받아들이도록 설정이 가능
    7. 파일 전송: 
      1. 클라이언트와 서버간에 파일전송이 가능
      2. plot 이미지를 생성하는 등의 작업을 위한 원거리 서버로써 사용 가능
    8. 설정 가능: 
      1. 설정들을 조정하기 위한 파일 제공
      2. 사용자인증, 원거리 접근, 파일 전송같은 특성들의 사용여부를 결정할수 있는 설정파일이 있음
  3. 없는 기능
    1. 콜백 기능 없음: 응용프로그램에서 TCP/IP와 R소켓으로 구현가능하나 Rserve에 포함되어 있지는 않음
    2. R에대한 telnet front-end가 아님: 
      1. 출력된 결과는 전송되지 않음
      2. 빠른 속도를 위해서 바이너리 프로토콜 사용
    3. 항상 thread safe가 아님: 
      1. 연결간의 thread safe 지원하지만 eval 메소드들은 thread safe 하지 않음
      2. eval들이 병렬 호출이 아니라는 보장이 없으면 다양한 쓰레드들이 같은 연결 사용 금지
  4. 설치, 설정 및 사용

    NOTE: Window를 선택한 원인은 기타 OS 설치 필요 없이 사용해 보기 위함

    1. 환경 설명
      1. Windows 7 64bit
      2. R 3.1.0
      3. Eclipse Luna
    2. Rserve 설치
      1. R에 Rserve 설치
      2. install.packages("Rserve")
    3. Rserve 실행
      1. R에서 실행
      2. library(Rserve)
      3. Rserve()
      4. message: Starting Rserve... "d:\PROGRA~3\R\R-31~1.0\library\Rserve\libs\x64\Rserve.exe"
    4. 필요 정보 확인
      1. 자바 클라이언트 실행에 필요한 JAR 파일 위치 확인
      2. system.file("java", package="Rserve")
      3. message: "d:/Program Files/R/R-3.1.0/library/Rserve/java"
    5. Eclipse 사용
      1. "d:/Program Files/R/R-3.1.0/library/Rserve/java" 밑의 JAR 파일을 참고 라이버리로 설정
      2. R 버전 정보를 반환하는 예제 Rversion.java 사용
  5. 관련 정보
    1. 홈 페이지: http://rforge.net/Rserve/
    2. 관련 페이퍼: http://www.ci.tuwien.ac.at/Conferences/DSC-2003/Proceedings/Urbanek.pdf
    3. 관련 문서: 
      1. http://rforge.net/Rserve/doc.html
      2. http://rforge.net/org/doc/ (org.rosuda.REngine)

JRI

  1. JRI 소개
    1. Java/R interface
    2. R이 자바 응용프로그램에서 단일 쓰래드로 돌아가도록 함
    3. 기본적으로 R의 동적 라이버리를 자바에 로드하고 R의 기능들에 자바 API 제공
    4. R함수를 단순히 부르는 것 뿐만아리나 REPL를 완전히 구현하는 것도 제공
    5. R를 자바에 직접 링크하기 위해 JNI를 사용
    6. Native 코드를 사용
    7. 원도우, 맥, 선, 리눅수 등 자바가 가능한 모든 플랫폼 지원
  2. 설치, 설정 및 사용
    1. 일반 방법
      1. 환경 설명
        • Windows 7 64bit
        • R 3.1.0
        • Eclipse Luna
      2. rJava 설치
        • R에 rJava 설치
        • install.packages("rJava")
        • JRI 설치 위치 확인
        • system.file("jri", package="rJava")
        • message: "d:/Program Files/R/R-3.1.0/library/rJava/jri"
      3. PATH 설정
        • Windows 7 64bit을 사용하면 'x64'까지 지정
        • D:\Program Files\R\R-3.1.0\bin\x64;D:\Program Files\R\R-3.1.0\library\rJava\jri\x64
      4. Eclipse 사용
        • JRI.jar를 참고 라이버리로 사용
        • D:\Program Files\R\R-3.1.0\library\rJava\jri\JRI.jar
        • D:\Program Files\R\R-3.1.0\library\rJava\jri\examples 밑의 예제를 사용하여 정상 동작 확인
    2. 플러그인 방법
      1. '일반 방법'의 '환경 설명'과 'rJava 설치'는 동일
      2. RJava (JRI) Eclipse Plugin
        • 아래 주소에서 RJavaPlugin_1.0.0.201211041420.jar 다운로드
        • https://docs.google.com/file/d/0B9RCRuTCZ_FRbnNZYVBGWlBOdUE/edit?pli=1
        • [Eclipse Home]/plugins/으로 복사
        • Eclipse 켜져 있으면 재시작
        • Window -> Preference -> Rjava
          • Path To JRI DLL Dir: D:\Program Files\R\R-3.1.0\library\rJava\jri\x64
          • Path To JRI JARS: D:\Program Files\R\R-3.1.0\library\rJava\jri
          • Path To R DLL Dir: D:\Program Files\R\R-3.1.0\bin\x64
          • Path to JVM DLL Dir: C:\Program Files\Java\jre8\bin\server
        • Java Project -> Proporties -> java Build Path -> Libraries -> Add Library -> User Library -> JRI_DIR
        • 예제 사용
        • Java File -> Run As -> Run Configurations -> R -> 'double click' -> Run
  3. 관련 정보
    1. 홈 페이지: http://rforge.net/JRI/
    2. 관련 문서: http://rforge.net/org/docs/ (org.rosuda.JRI, org.rosuda.REngine)