"OpenCPU is a system for embedded scientific computing and reproducible research. The OpenCPU server provides a reliable and interoperable HTTP API for data analysis based on R. You can either use the public servers or host your own."
Octubre 2014 | Junio 2015
"OpenCPU is a system for embedded scientific computing and reproducible research. The OpenCPU server provides a reliable and interoperable HTTP API for data analysis based on R. You can either use the public servers or host your own."
"Build, Ship and Run Any App, Anywhere
Docker - An open platform for distributed applications for developers and sysadmins."
Docker + R = Rocker
Â
Es una manera sencilla de usar el potencial de R en cualquier servidor, y tener una fácil implementación con otros lenguajes de programación, especialmente para aplicaciones web: Ruby on Rails (Ruby), PHP, Django (Python), Node.js, Tomcat (Java)…
En todos estos lenguajes es muy fácil hacer una conexión http (GET o POST).
Â
Â
Añadir una pequeña optimización sobre una aplicación ya realizada en PHP.
Solución:
Montar en el servidor Docker+OpenCPU y hacer llamadas a la API de OpenCPU para resolver las optimizaciones.
1 Instalamos Docker (http://docs.docker.com/installation).
2 Descargamos una imagen con opencpu (link):
docker pull opencpu/rstudio
3 Ejecutamos el contenedor y redirigimos el puerto 80:
docker run -d -p 80:80 -p 8787:8787 --name opencpu opencpu/rstudio
4 Comprobamos:
docker ps
## CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ## d9449846d1b7 opencpu/rstudio "/bin/sh -c 'service 16 minutes ago Up 16 minutes 443/tcp, 0.0.0.0:80->80/tcp, 8004/tcp, 0.0.0.0:8787->8787/tcp opencpu
Accedemos a: http://127.0.0.1/ocpu
El contenedor que nos hemos descargado tiene solo los paquetes básicos.
Podemos usar paquetes "al vuelo":
Â
curl -L -s 127.0.0.1/ocpu/cran/RColorBrewer/R/brewer.pal/json -d "n=3&name='Set1'"
## [ ## "#E41A1C", ## "#377EB8", ## "#4DAF4A" ## ]
curl -L -s 127.0.0.1/ocpu/cran/randomForest/R/randomForest/print -d "formula=Species~.&data=iris"
## ## Call: ## randomForest(formula = Species ~ ., data = iris) ## Type of random forest: classification ## Number of trees: 500 ## No. of variables tried at each split: 2 ## ## OOB estimate of error rate: 5.33% ## Confusion matrix: ## setosa versicolor virginica class.error ## setosa 50 0 0 0.00 ## versicolor 0 47 3 0.06 ## virginica 0 5 45 0.10
Accedo al contenedor e instalo un paquete personal (Conento
):
docker exec -it opencpu /bin/bash
Si quiero guardar los cambios en la imagen, hay que hacer un commit
(ver más).
Comprobamos que el paquete está en el contenedor:
curl -L -s 127.0.0.1/ocpu/library/Conento
## ## Information on package 'Conento' ## ## Description: ## ## Package: Conento ## Type: Package ## Title: Utilidades Conento ## Version: 1.0 ## Date: 2013-11-27 ## Author: Jorge Ayuso Rejas ## Maintainer: Jorge Ayuso Rejas <jorge.ayuso@conento.com> ## Description: Utilidades para trabajar Conento ## Encoding: UTF-8 ## LazyData: true ## License: Conento ## RemoteType: bitbucket ## RemoteRepo: conento ## RemoteUsername: jayusor ## RemoteRef: master ## RemoteSha: 17917f49e862b260b30607e1cc98ada2f6931b0f ## Built: R 3.1.2; ; 2015-06-24 18:33:50 UTC; unix ## ## Index: ## ## Conento-package Utilidades Conento ## aexcel aexcel ## data_ampl data_ampl ## dexcel dexcel ## exportar_tiposas exportar_tiposas ## exportar_tiposas2 exportar_tiposas ## iconv.data.frame iconv.data.frame ## optimizar_qplanner optimizar_qplanner ## punto_mil punto_mil ## simpleCap simpleCap ## trim trim
Consigo un optimizador expecÃfico accesible desde cualquier herramienta y fácil de desplegar.
curl -s 127.0.0.1/ocpu/library/Conento/R/optimizar_qplanner/print \ -d "original='[[0.0886,0.061,0.0916,0.0889,0.4034,0.0866,0.1283,0.0516], \ [0.2,0,0,0.1,0.5,0,0.05,0],[1,1,1,1,1,1,0.05,0.02]]'"
## [1] 0.2000 0.0258 0.0564 0.1000 0.5000 0.0514 0.0500 0.0164
curl -s 127.0.0.1/ocpu/library/Conento/R/optimizar_qplanner/print \ -d "original='[[0.0886,0.061,0.0916,0.0889,0.4034,0.0866,0.1283,0.0516], \ [0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,0.02]]'"
## Algún mÃnimo es mayor que su máximo. ## ## In call: ## optimizar_qplanner(original = "[[0.0886,0.061,0.0916,0.0889,0.4034,0.0866,0.1283,0.0516], [0,0,0,0,0,0,0,1],[1,1,1,1,1,1,1,0.02]]")
docker run -d -p 127.0.0.1:80:80 opencpu/rstudio
Â
Â
Docker nos abre un mundo de posibilidades, algunos ejemplos:
Â
Â
Este obra está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 4.0 Internacional