Probando R sobre el EC2 de Amazon

Hacía tiempo que quería probarlo. Menos en las grutas pobladas de seres del siglo anterior, todo el mundo habla del EC2.

Entre otras muchas cosas que iré explorando más adelante, el EC2 de Amazon te alquila un servidor por horas. También te ofrece espacio de disco a unos precios de risa y otras cosas más que bien podrían mandar al paro a departamentos enteros de IT. Pero hoy, de momento, sólo me interesaba el servidor, alquilar un servidor por un rato.

Tengo un pequeño programa en R que resuelve un complicado problema de combinatoria, una especie de sudoku en el que hay que sentar a gente en sillas de acuerdo con una serie de normas. No lee datos de ningún sitio y la salida es un fichero pequeño. Pero podría freír la CPU de mi portátil si lo ejecutase en local.

Repasaré y dejaré, pues, constancia de lo hecho y conseguido:

Primero me he dado de alta en el servicio a través de http://aws.amazon.com. He dado mis datos, mi tarjeta de crédito, etc. y me han llamado al teléfono que les he dado: la voz de una señorita grabada en casete me ha pedido un código que me habían pasado previamente. Se lo he dado y me ha llegado un mensaje de confirmación.

En mi primer paseo por EC2 me he apoyado en dos páginas, una de Ubuntu y otra más genérica. Para interactuar con los servidores de Amazon hacen falta unos certificados de seguridad con claves privada y pública, etc. que esos tutoriales explican cómo gestionar mejor de lo que podría hacer yo. Pero en esencia, lo que hay que hacer es lo siguiente:

1) Descargarse los ficheros de los certificados (el certificado y la clave) de la sección “Security Credentials” de la página de Amazon.

2) Guardarlos en el lugar adecuado y crear una llave privada usando el comando ec2-add-keypair. Yo la he llamado ec2-keypair (lo hago constar para que queden claros comandos posteriores).

En Amazon EC2 hay muchos tipos distintos de servidores dependiendo del hardware, del software y de la ubicación. Ubicaciones hay tres: dos en EE.UU. y otra en Irlanda. Plataformas de hardware, también, otras tres: buena (1 núcleo de 32 bits, 1,7GB de RAM y 160GB de disco por 10 céntimos de dólar la hora), mejor y requetemejor (8 CPUs de 64 bits, 15GB de RAM y 1.690GB de disco por 0.76 céntimos de dólar por hora).

Dependiendo del software, hay la tira.  Hay Ubutus, Fedoras, Suses, Debians, OpenSolaris de varias versiones. Hay algunas que vienen ya con ciertos componentes de sofware montados: Drupal, Apache, R, WordPress, Postgres, LAMP, RoR, SugarCRM, etc. En total, he contado 4101 de ellas. Por no faltar, no faltan, para las abuelillas, máquinas con Windows (pero son más caros).

El comando

carlos@kropotkin:~$ ec2-describe-images -a

te permite ver todas. De hecho, para elegir una, he lanzado

carlos@kropotkin:~$ec2-describe-images -a | egrep i386 | egrep ubuntu | egrep karmic

para seleccionar una máquina, la ami-19a34270, de 32 bits con Ubuntu Karmic Koala, el mismo sistema operativo que tengo en local. Luego, con el comando

carlos@kropotkin:~$ ec2-run-instances ami-19a34270 -k ec2-keypair

he levantado mi instancia (y he puesto el taxímetro a correr).  Y con

carlos@kropotkin:~$ ec2-authorize default -p 22

he abierto el puerto 22 (el de ssh) para poder acceder remotamente a la máquina. El comando

carlos@kropotkin:~$ ec2-describe-instances

me ha permitido conocer la URL de mi servidor, ec2-274-192-183-237.compute-1.amazonaws.com, al que he accedido como root mediante

carlos@kropotkin:~$ ssh -i /home/carlos/.ssh/ec2-keypair.pem root@ec2-274-192-183-237.compute-1.amazonaws.com

Usando sftp de la forma

carlos@kropotkin:~$ sftp -oIdentityFile=/home/carlos/.ssh/ec2-keypair.pem root@ec2-274-192-183-237.compute-1.amazonaws.com:/root

he subido mi programa de R al servidor y una vez en él, después de curiosear por directorios y ficheros para ver si lo que tenía entre manos era, realmente, una cuenta root de una máquina más que decente, lo de siempre:

root@ec2:~# apt-get install r-base
root@ec2:~# R CMD BATCH src.R
root@ec2:~# tail -f src.Rout

Es decir, instalar R y correr mi pequeño programa, src.R, en remoto.

Al cabo de 807 segundos (y 10 céntimos de dólar) ya tenía mis resultados. Así que he cerrado mi sesión y he parado el taxímetro mediante

carlos@kropotkin:~$ec2-terminate-instances i-b7c282df

Simpático, ¿verdad?

Otro día tengo que probar el almacenamiento, hadoop, los web services y alguna cosa más de esas por las que en España no voy a facturar jamás un euro.

14 comentarios en “Probando R sobre el EC2 de Amazon

  1. Vaya vaya. Así, sin pensar mucho se me ocurre que montar un sistema de información comercial allí, tan seguro o más que el que me pueda hacer un equipo de IT en una gran organización, me costaría 1.500 dolares al año. Interesante interesante.

  2. Se podría montar un sistema similar al de Amazon EC2 a través del proyecto Eucalyptus (http://open.eucalyptus.com/).

    Necesitaríamos algo de hardware, pero sería interesante para algunas áreas de tecnologías, centros de i+D y centros de supercomputación.

    Hablamos.
    Gracias Carlos, por tu howto.

  3. Llevaba tiempo buscando una introducción clara a este tema, espero con ansia la de Hadoop (a ver si aprendo algo de Mapreduce) y ya que estamos una petición, una introducción sobre procesamiento paralelo en R no taría nada mal.

    Y eso de no facturar… yo no lo tengo tan claro, y más teniendo en cuenta que por menos de 7000€ año tendríamos un servidor de la hostia, con suficiente RAM (15 GB) y capacidad de calculo (8 núcleos) para poder ejecutar en R problemas grandes, y eso si tuvieramos todos los días del año el servidor encendido.

  4. Juanjo, mi problema (o el motivo por el que me interesa EC2) no es el software sino el hardware. Lo que me interesa del asunto es que puntualmente, si me enfrento a un problema intensivo de CPU, sé que puedo alquilar una máquina por un precio de risa. Luego la apago y me olvido de ella. Puedo tener un portátil de tres al cuarto y llegado el caso, ser root de un maquinón del carajo.

    Es un mero acto de alquilar una máquina (similar a cuando alquilo un asiento en el metro para ir al trabajo… y no me compro un coche).

    Francisco, haciendo números no sé si es tan rentable si la máquina ha de estar enchufada el 100% del tiempo. Lo bueno es que se puede escalar en Amazon pero no en local. Puedes tener 4 máquinas de día y una de noche.

    ¿Cada cuánto tengo un problema de esos que fríen CPUs? Cuando más, una vez a la semana. Y no más de 4-5 horas. Es decir: por 2 dólares al mes puedo machacar una máquina. Como decía un antiguo profesor mío de filosofía: cuando vas a un bar y te tomas un café, no te llevas la taza a casa.

  5. Francisco, el tema del precio es el fundamental, es mucho más barato disponer de este servidor virtual que mantener un servidor que además implica un gasto en recursos humanos.

    De hecho para mi la ventaja principal no es la “escalabilidad”, la posibilidad de dimensionar la máquina en función de la tarea que vayas a realizar, si no el precio. Por mucho menos dinero dispones de un pepinaco.

    [paja mental]”Por cierto, necesito la ayuda de algún jurista porque tengo ideas que pueden chocar con la LOPD”[/paja mental]

  6. Yo he descubierto esto de EC2 hace unos días, y me surje una duda, ya que no tengo mucha idea del tema: ¿Con Amazon EC2 podría alquilar fácilmente una máquina Windows e instalar en ella un programa de cálculo de estructuras y resolver alguna estructura usando los recursos alquilados, o no es tan fácil instalar cualquier programa en mi “instance” de Windows y que haga uso de todos esos recursos de hardware?
    Y otra cosa: por deducción supongo que el hardware de que tú dispusiste fue 8 CPUs de 64 bits, 15GB de RAM y 1.690GB de disco por 0.76 céntimos de dólar por hora, ¿no? Si es así, veo que todo está hecho de forma que la instalación de Ubuntu 32 bits que manejaste remotamente controlaba todo ese hardware de forma totalmente automática, ¿no? Si me equivoco o ves que tengo errores de concepto te agradecería que me corrigieras.
    Por cierto, has despertado mi interés en R.

  7. Pues no sé mucho sobre Windows, la verdad. Yo probé la máquina más pequeña.

    Puedes hacer una prueba en el EC2. Alquila una máquina de las más pequeñas y no vas a gastar más de unos centimillos, menos de lo que cuesta un café. Y luego, ¡cuéntanos a todos cómo te fue y qué hiciste!

    Ah, sí, y deberías usar R (si trabajas en cosas relacionadas con la estadística y el análisis de datos, claro).

  8. Haré eso, alquilaré una máquina pequeña para hacer pruebas alguna noche de fin de semana y a ver qué tal :-) Si puedo hacer eso que comenté, sería una maravilla, pudiendo reducir alguna vez un cálculo de 30 horas en casa a 1 hora en la nube jeje.

    Yo pensaba que habías alquilado alguna máquina algo más grande por la complejidad del problema que resolviste, pero por lo que veo fue también para probar más bien, ¿no? Lo digo porque el hardware de la pequeña no parece muy diferente del de cualquier máquina de uso doméstico e incluso inferior hoy día.

    Gracias y un saludo.

  9. Creo que ahora hay disponibles unas “microinstancias” a un precio todavía más reducido que deberían venir bien para hacer las primeras pruebas de conexión y primeros pasos.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *