Programación y sistemas

Cassandra y PHP para desarrolladores SQL: Instalación

La base de datos No-SQL Cassandra fue creada por Facebook a causa de la necesidad de disponer de una base de datos distribuida de alto rendimiento, flexible, tolerante a fallos, escalable y que fuese capaz de procesar grandes cantidades de datos, más tarde fue liberada bajo licencia Apache y actualmente es utilizada principalmente por empresas de internet con proyectos con un alto uso de base de datos como Twitter.

En esta serie de artículos iré desgranando la instalación, funcionamiento y desarrollo de aplicaciones en PHP con Cassandra, comparando las sentencias utilizadas para insertar, actualizar, etc de SQL con los métodos a utilizar en Cassandra. Por desgracia al ser algo completamente distinto a cualquier base de datos SQL tendré que añadir algo de teoría, pero intentaré que os resulte lo más ameno posible.

Al toro.

 

 

REQUISITOS

Para la realización de esta guía se utilizará Debian Squeeze como sistema operativo. En algunos de los links que dejo como bibliografía al final del artículo existen ejemplos para realizar la instalación en otros sistemas operativos, principalmente CentOS.

Doy por hecho que ya se dispone de un servidor web Apache con PHP instalado en la máquina de testeo que se esté usando. Las aplicaciones que se van a instalar han sido probadas en una máquina virtual Debian utilizando como aplicación de virtualización, VirtualBox instalado en un host Windows XP SP3.

En un servidor de producción recomiendo que tenga bastante RAM (por encima de 1GB, ya veremos más adelante el porqué. En la máquina virtual que uso de testeo dispone de 700 MB y funciona bien, pero en producción no es lo recomendable).

Instalaremos la base de datos Cassandra, el protocolo para conectar con ella y que nos generará el módulo para poder trabajar desde PHP, y PHPCassa que será la abstracción de la base de datos donde tenemos los métodos básicos para trabajar con Cassandra: insertar, actualizar, borrar, crear, etc.

 

PREPARANDO EL SISTEMA

Antes de empezar a instalar debemos actualizar el sistema operativos de la forma habitual:

[codesyntax lang=»bash» lines=»no» title=»Comandos para actualizar el sistema operativo»]

apt-get update
apt-get upgrade

[/codesyntax]

Una vez actualizado el sistema empezamos a instalar.

 

INSTALANDO CASSANDRA

Lo primero que necesitamos hacer para instalar Cassandra es editar los repositorios de Debian:

[codesyntax lang=»bash» title=»Editando los repositorios de Debian»]

nano /etc/apt/sources.list

[/codesyntax]

 

Una vez que se abra el editor añadimos las siguientes lineas:

[codesyntax lang=»bash» lines=»no» title=»Repositorios a añadir en sources.list»]

deb http://www.apache.org/dist/cassandra/debian/ 08x main
deb-src http://www.apache.org/dist/cassandra/debian/ 08x main

[/codesyntax]
Como podrás observar después de la ruta del repositorio se ha añadido «08x» estoy indica el número de versión a obtener, en este caso es la versión actual de cassandra al crear este post. No se indica el número de parche, es decir, actualmente se puede descargar Cassandra 8.4, el «.4» lo obviamos a la hora de los repositorios.

Si dentro de unos meses sale la versión «9.0» solo tendrás que cambiar el ocho por el nueve.
Volvemos a consola y actualizamos los repositorios.

[codesyntax lang=»bash» lines=»no» title=»Actualizamos los repositorios»]

apt-get update

[/codesyntax]

Nos dará un error en las claves gpg. Procedemos a actualizarlas con las siguientes instrucciones:

[codesyntax lang=»bash» title=»Instalamos las claves gpg»]

gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -

[/codesyntax]

Ojo con el guión del final, hay que añadirlo sino dará error.

Con el paquete 0.7.5 nos da otro error de clave gpg así que también instalamos esta de la misma manera:

[codesyntax lang=»bash» lines=»no» title=»Instalamos otra clave gpg»]

gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -

[/codesyntax]

Verificamos que tenemos el sistema actualizado.

[codesyntax lang=»bash» title=»Volvemos a comprobar que tenemos el sistema actualizado»]

apt-get update
apt-get upgrade

[/codesyntax]

Actualizamos todos los paquetes que aparezcan.

Procedemos a instalar el paquete de la base de datos NoSQL Cassandra:

[codesyntax lang=»bash» title=»Instalamos el paquete Cassandra»]

apt-get install cassandra

[/codesyntax]

Cassandra necesita a Java para funcionar para ello, una vez instalado Cassandra instalaremos el paquete sun-java6-jdk de la siguiente manera:

[codesyntax lang=»bash» title=»Instalamos la versión de Java de Sun»]

apt-get install sun-java6-jdk

[/codesyntax]

En el caso de que no encuentre el paquete verificar que los repositorios de Debian son correctos. Verifica la versión de Java con:

[codesyntax lang=»bash» lines=»no» title=»Comprobamos la versión de Java»]

 java -version

[/codesyntax]

Debería aparecer algo así:

[codesyntax lang=»text» lines=»no» title=»Texto que devuelve Java al comprobar la versión»]

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

[/codesyntax]

Se recomienda usar la versión de Java de Sun (Sun JDK) en vez de Open JDK debido a un bug encontrado en el mismo.

Si os muestra algo distinto a esto, escribid el siguiente comando:

[codesyntax lang=»bash» lines=»no» title=»Cambiando el paquete a utilizar para trabajar con Java»]

update-alternatives --config javac

[/codesyntax]

Os mostrará un listado con los diferentes paquetes instalados en el sistema que pueden ser utilizados para trabajar con Java. Nosotros usaremos el paquete de Sun, así que pulsa el número del paquete para que Debian lo utilice.

Por último, ejecutamos el siguiente comando para construir las dependencias:

[codesyntax lang=»bash» lines=»no» title=»Construimos el paquete»]

dpkg-buildpackage -uc -us

[/codesyntax]
Una vez instalado procedemos a realizar la configuración de Cassandra:

Creamos varias carpetas necesarias si no han sido creadas automáticamente:

[codesyntax lang=»bash» title=»Creamos las carpetas necesarias para Cassandra»]

mkdir -p {callouts,commitlog,data,saved,caches,staging}
mkdir /var/log/cassandra

[/codesyntax]
Damos permisos a esta carpeta:

[codesyntax lang=»bash» lines=»no» title=»Dando permisos»]

chmod -R 777 /var/log/cassandra/

[/codesyntax]

Creamos el archivo /var/log/cassandra/system.log y le damos permisos:

[codesyntax lang=»bash» lines=»no» title=»Dando permisos»]

chmod -R 777 /var/log/cassandra/system.log

[/codesyntax]

 

INSTALANDO THRIFT Y LA EXTENSIÓN PARA PHP

Thrift es tan solo el protocolo de conexión para poder utilizar Cassandra. Aunque en la extensión para PHP existen métodos para poder trabajar con cassandra, requieren bastante código por eso utilizaremos PHPCassa como abstracción de la base de datos.

Primero descargamos Thrift desde su web: http://thrift.apache.org/download/ y descomprimimos

[codesyntax lang=»bash» title=»Descomprimimos Thrift»]

tar -xzvf thrift-0.7.0.tar.gz

[/codesyntax]

Nos colocamos dentro de la carpeta de Thrift.

Antes de hacer nada ahí instalamos algunos paquetes que nos serán necesarios:

[codesyntax lang=»bash» title=»Paquetes necesarios para instalar Thrift»]

apt-get install libboost-dev automake libtool flex bison pkg-config g++

[/codesyntax]

Una vez instalados esos paquetes configuramos y construimos Thrift:

[codesyntax lang=»bash»]

./configure
make

[/codesyntax]

Construimos la interfaz de PHP Thrift para Cassandra:

[codesyntax lang=»bash»]

./compiler/cpp/thrift -gen php ../ruta-a-cassandra/interface/cassandra.thrift

[/codesyntax]

Copiamos archivos necesario para que PHPCassa funcione:

[codesyntax lang=»bash»]

mkdir -p /usr/share/php/Thrift
cp -R gen-php/ /usr/share/php/Thrift/packages/
cp -R lib/php/src/* /usr/share/php/Thrift/

[/codesyntax]

Cambiamos al directorio del protocolo de Thrif: ruta-a-thrift/lib/php/src/ext/thrift_protocol.

Instalamos el paquete para construir las extensiones de PHP:

[codesyntax lang=»bash»]

apt-get install php5-dev

[/codesyntax]

Construimos la extensión:

[codesyntax lang=»bash»]

phpize
./configure --enable-thrift_protocol
make

[/codesyntax]

Copiamos la extensión a la siguiente carpeta (cuidado: dependiendo del sistema el nombre de la carpeta de destino puede variar):

[codesyntax lang=»bash»]

cp modules/thrift_protocol.so /usr/lib/php5/20060613/

[/codesyntax]

Habilitamos el módulo creando el archivo /etc/php5/conf.d/thrift_protocol.ini con el siguiente texto:

[codesyntax lang=»bash»]

extension=thrift_protocol.so

[/codesyntax]

Comprobamos la instalación:

[codesyntax lang=»bash»]

php -i | grep -v "PWD" | grep "thrift_protocol"

[/codesyntax]

Si todo ha ido bien, reiniciamos Apache:

[codesyntax lang=»bash»]

/etc/init.d/apache2 restart

[/codesyntax]

Iniciamos Cassandra:

[codesyntax lang=»bash»]

/opt/cassandra/bin/cassandra -f

[/codesyntax]

Y probamos la consola para comprobar que todo ha ido correctamente:

[codesyntax lang=»bash»]

/opt/cassandra/bin/cassandra-cli -host localhost -port 9160

[/codesyntax]

Debería indicarte algo así:

[codesyntax lang=»text»]

Connected to: "Test Cluster" on localhost/9160
Welcome to cassandra CLI.

[/codesyntax]

 

INSTALANDO PHPCassa

ACTUALIZACIÓN 20/05/2012
Hace un par de semanas se publicó una nueva versión de phpCassa. Este tutorial está basado en la versión 0.8.a.2 de PHPCassa.

Te recomiendo que te descargues esta versión de PHPCassa para realizar el tutorial.
He actualizado el tutorial a la versión 1.0.a.3 de PHPCassa. Para seguir el tutorial actualizado entra en Cassandra y PHP para desarrolladores SQL.

Bajamos PHPCassa desde github: https://github.com/thobbs/phpcassa

Al descomprimir verás cuatro archivos PHP, copia esos archivos a una carpeta del proyecto en el que estés trabajando.

Abre el archivo «connection.php», la primera línea será una variable global: $GLOBALS[‘THRIFT_ROOT’], modifica su valor con la ruta hacia los archivos Thrift que copiamos con anterioridad. En mi caso se quedaría así:

[codesyntax lang=»php»]

<?php
$GLOBALS['THRIFT_ROOT'] = '/usr/share/php/Thrift/';

[/codesyntax]

Con esto finalizamos la instalación de Cassandra para que pueda ser utilizada por PHP.

Os dejo algunas páginas de interés:
CASSANDRA
http://cassandra.apache.org/
http://cassandra.apache.org/download/
http://wiki.apache.org/cassandra/
http://www.apache.org/dist/cassandra/debian/dists/
http://wiki.apache.org/cassandra/DebianPackaging
http://wiki.apache.org/cassandra/CloudConfig
http://cassandra-user-incubator-apache-org.3065146.n2.nabble.com/Cannot-connect-to-Cassandra-td6463518.html
http://sentidoweb.com/2010/03/18/instalar-cassandra-en-ubuntu.php
http://gettingstartedwithcassandra.blogspot.com/2011/06/exception-connecting-to-localhost9160.html
https://wiki.fourkitchens.com/display/PF/Using+Cassandra+with+PHP
http://es.paperblog.com/instalar-cassandra-en-ubuntu-78327/
http://www.unixmen.com/linux-tutorials/960-install-nosql-cassandra-db-in-ubuntu-via-ppa-repository
http://wiki.apache.org/cassandra/ClientOptions

THRIFT
http://thrift.apache.org/

 



PHPCassa
https://github.com/thobbs/phpcassa
http://groups.google.com/group/phpcassa?pli=1

6 Comentarios

  • AlbertoRamirez 06/08/2012

    Cuando ejecuto este comando:

    gpg –export –armor F758CE318D77295D | sudo apt-key add –

    Me da el siguiente error:

    bash: sudo: command not found
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: [stdout]: write error: Broken pipe
    gpg: iobuf_flush failed on close: file write error

    Se que no tengo instalado sudo, que tengo que hacer en este caso?

    uso Debian-6+squeeze2, gracias.

  • Mikel 07/08/2012

    Para instalar sudo en tu Debian, abre una consola, y como root escribe: apt-get install sudo.

    Otra opción es que el programa que uses para cambiar de usuario en Debian pueda añadir claves; en este caso solo sería cuestión de sustituir sudo apt-key add – por la linea correspondiente con tu aplicación.

  • alison 26/03/2013

    como emigro una base de datos relacional a cassandra clic alguien me puede dar un ejemplo

  • Mikel 01/04/2013

    Hola alison, la verdad es que la migración a Cassandra es algo que tendrás que programar tú ya que no creo que se pueda crear una clase que sirva para todos los usos. Aun así ahora mismo no tengo ejemplos, pero sería relativamente sencillo crear un script para migrar los datos.

    1º Recuperar los datos de la base de datos anterior.
    2º Dentro de un bucle vas copiando cada registro a Cassandra.

    Aquí dan una buena respuesta a como hacerlo: http://stackoverflow.com/questions/5686256/migrating-from-mysql-to-cassandra

    Claro que como indican en el link anterior puedes tener problemas con los índices de mysql (si es la bd que usas) o con los autoincrementales. Tendrás que plantearte cambiar los ids que suelan utilizar por uuid o un identificador único para cada registro en el que lo necesites.

  • gloria 01/03/2016

    Hola, gracias me a servido mucho, estoy terminando mi pagina web para subirla a un hosting gratuito para hacer la prueba haber si funciona pero no encuentro ninguno q admita cassandra como base de datos, no sabras de alguno?
    Es que estoy con el proyecto final de ciclo y no quiero cambiar la base por la de mysql.
    Gracias por anticipado
    un saludo

  • Mikel 01/03/2016

    Buenas tardes Gloria, gracias por comentar.

    No existen hosting específicos para Cassandra. Lo que puedes hacer es comprar una o varias instancias (si quieres probar los nodos en cluster) en digital ocean (https://m.do.co/c/7aedf09d3f4b) o amazon, no son caros y puedes eliminar las instancias cuando quieras ya que cobran por minutos.

    El único inconveniente es que tendrías que instalar el software tú misma.

    Un saludo.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Descubre más desde Interadictos

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo