Prác%ca de Data Storage:
Jesús Montes
Big Data – Master Universitario en Ingeniería Informá%ca
Índice
• Máquina de prác%cas • Instalación
• Despliegue de un cluster de prueba • Operaciones ru%narias en Riak
• Reacción ante fallos
Máquina de prác%cas
• Máquina virtual en formato Virtual Box • GNU/Linux Ubuntu 13.10
• Todas las dependencias instaladas • Hace más fácil la instalación
Instalación
• Guía de instalación oficial
– http://docs.basho.com/riak/latest/ops/ building/installing/from-source/
– http://s3.amazonaws.com/
downloads.basho.com/riak/2.0/2.0.0/ riak-2.0.0.tar.gz
• Recomendable usar la máquina virtual de prác%cas (evitamos problemas de
Instalación
> tar zxvf riak-2.0.0.tar.gz > cd riak-2.0.0
> make all ...
Despliegue de un cluster de prueba
• Cluster “fic%cio”
– 5 nodos corriendo en la misma máquina
– No es un escenario real, pero nos sirve para hacer pruebas.
• Organización descentralizada, sin SPOF (como cualquier cluster Riak)
• Datos repar%dos entre todos los nodos, de manera transparente (consistent hashing)
Despliegue de un cluster de prueba
> make devrel DEVNODES=5 ...
Despliegue de un cluster de prueba
• Dentro del subdirectorio dev aparecen 5 directorios (dev1-5).
• Cada directorio con%ene una instalación independiente de Riak, para que podamos lanzar 5 nodos dis%ntos.
Despliegue de un cluster de prueba
> dev1/bin/riak start ... > dev2/bin/riak start ... > dev3/bin/riak start ... > dev4/bin/riak start ... > dev5/bin/riak start ...Despliegue de un cluster de prueba
• Podemos comprobar que los nodos estan funcionando haciendo “ping”
> dev1/bin/riak ping pong
Despliegue de un cluster de prueba
• Una vez arrancados los nodos hay que conectarlos para que formen el cluster • No es necesario poner en contacto
explícitamente a todos los nodos con todos. Con que conozcan a un nodo del cluster ya se “organizan solos”
Despliegue de un cluster de prueba
> dev2/bin/riak-admin cluster join dev1@127.0.0.1 ...
> dev3/bin/riak-admin cluster join dev1@127.0.0.1 ...
> dev4/bin/riak-admin cluster join dev1@127.0.0.1 ...
> dev5/bin/riak-admin cluster join dev1@127.0.0.1 ...
Despliegue de un cluster de prueba
• Una vez no%ficados, el plan de creación del cluster está preparado, pero el cluster todavía no ha sido creado. • Podemos verificar el plan antes de aprobarlo
> dev1/bin/riak-admin cluster plan ...
• Si todo está correcto, lo aprobamos
> dev2/bin/riak-admin cluster commit ...
Operaciones ru%narias en Riak
• Comprobar el estado de los miembros de un cluster
> dev1/bin/riak-admin member-status
• Comprobar el estado del anillo de claves
> dev1/bin/riak-admin ring-status > dev1/bin/riak-admin ringready
Operaciones ru%narias en Riak
• Riak ofrece una API HTTP básica para consultar y actualizar datos
– GET para obtener información
– PUT para añadir/modificar información – DELETE para eliminar información
• Podemos u%lizar un cliente HTTP en línea de mandatos, como curl o wget, para realizar las operaciones de manera sencilla
Operaciones ru%narias en Riak
• Almacenar pares clave-‐valor
> curl –XPUT http://localhost:
10018/buckets/messages/keys/hello -H ‘Content-Type: text/plain’ -d ‘Hello World’
• Leer pares clave-‐valor
Operaciones ru%narias en Riak
• Listar buckets
> curl http://localhost:10018/ buckets?buckets=true
• Listar claves de un bucket
> curl http://localhost:10018/ buckets/messages/keys?keys=true
Operaciones ru%narias en Riak
• Listar propiedades de un bucket
> curl http://localhost:10018/ buckets/messages/props
• Borrar pares clave-‐valor
> curl –XDELETE http://
localhost:10018/buckets/messages/ hello
Reacción ante fallos
Vamos a observar cómo reacciona Riak ante un fallo en uno de los nodos
1. Empezamos creando 6 objetos de prueba a par%r de una imagen
> for i in `seq 1 100`; do curl – XPUT http://localhost:10018/buckets/ images/keys/image$i.jpg -H ‘Content-Type: image/jpeg’ –-data-binary
@test.jpg; done ...
Reacción ante fallos
2. Comprobamos que los 6 objetos han sido creados
> curl http://localhost:10018/ buckets/images/keys?keys=true
3. Ahora paramos uno de los nodos > dev3/bin/riak stop
Reacción ante fallos
¿Qué ocurre?
1. ¿En qué estado se encuentra el cluster? 2. ¿Siguen siendo accesibles todos los datos?
Ejercicio de programación
• Riak ofrece mul%tud de formas de acceso
– Pe%ciones HTTP
– Drivers para Java, Python, Ruby, …
• Vamos a u%lizar una de ellas para programar una aplicación que use Riak como mecanismo de
almacenamiento de datos.
• El problema concreto queda a discreción del alumno.
• El ejercicio se presentará en clase una vez terminado.
Ejercicio de programación
• Ejemplo de problema: Aplicación de
almacenamiento de fotos (%po Instagram) • Requisitos:
– Diferentes usuarios iden%ficados por nombre. – Cada usuario podrá almacenar su biblioteca de
imágenes jpeg.
– Operaciones soportadas:
• Subir fotos a la biblioteca de un usuario.
• Listar las fotos de la biblioteca de un usuario.
• Descargar una foto de la biblioteca de un usuario.
Ejercicio de programación
• Consejos generales:
– Busca una idea sencilla, pero que te interese. – Elije un lenguaje de programación que domines.
– Si los dirvers son complicados, siempre puedes usar la API HTTP directamente.
• Algunas referencias ú%les:
– docs.basho.com/riak/latest/dev/ using/application-guide/
– docs.basho.com/riak/latest/dev/ using/libraries/