Está en la página 1de 4

BigTable • DESARROLLO

Cuando las bases de datos se quedan cortas

BIGTABLE
Internet está cambiando la manera de entender la informática, y Google es su mayor impulsor. En este

número veremos qué se cuece dentro de los gigantes de la informática. POR JOSÉ MARÍA RUÍZ

S
iempre se han escuchado rumores creados y usados. Las grandes empresas (sí, Amazon EC2 y Amazon S3 son real-
sobre instalaciones informáticas de Internet ya ofertan servicios que serían mente baratas). Ver referencia [1].
descomunales de empresas como inimaginables sin estos sistemas. El tér- No es sorprendente, por tanto, que los
Google, Yahoo!, Hotmail, Amazon o mino que se ha acuñado, Cloud Compu- mejores clientes de los sistemas Cloud de
Microsoft. Se hablaba de sistemas infor- ting (computación en nube), está empe- Microsoft, Google o Amazon sean gran-
máticos (muchos de ellos basados en zando a sonar con gran fuerza como el des farmacéuticas y bancos.
Linux y en Software Libre) que podían paradigma de desarrollo y funciona-
rondar perfectamente los 50.000 servido- miento con el que conviviremos durante Cambio de Paradigma
res. Lo increíble es que en casos como el la próxima década. Google, Amazon, Yahoo, Microsoft, Face-
de Google el número probablemente se Por ejemplo, existe un proyecto libre book, Hotmail, todas estas empresas ofre-
acerque a ¡¡ 500.000 servidores!! llamado Hadoop que trata de implemen- cen servicios a través de Internet y nece-
¿Para qué tantos servidores? Y lo más tar procesos distribuidos empleando sitan hacerlo a una cantidad enorme de
importante ¿cómo demonios consiguen ordenadores comunes. Está diseñado clientes. Los sistemas tradicionales de
sacar partido a semejantes infraestructu- usando los conceptos de los sistemas servidores se quedan cortos, y de hecho
ras? MapReduce y GFS de Google. no son recomendables.
El santo grial de la arquitectura de siste- Como ahora es posible ejecutar Hadoop El primer problema es la fiabilidad.
mas informáticos ha sido siempre conse- sobre el sistema EC2 (Elastic Compute Hasta ahora hemos considerado a los
guir que al introducir nuevos recursos (dis- Cloud) de Amazon empleando el sistema ordenadores como máquinas perfectas en
cos, memoria, procesadores, o servidores de almacenamiento S3 (Simple Storage las que se ejecutaba software imperfecto.
completos) aumente proporcionalmente la Service), también de Amazon, el perió- Pero a día de hoy la fiabilidad ha tomado
potencia del sistema. No sólo eso, sino dico New York Times ha contratado 100 otra dimensión. Ahora mismo las empre-
que además el sistema sea tolerante a instancias de Amazon EC2 en las que ha sas de Internet suelen necesitar miles de
fallos en cascada, pudiendo recuperarse de instalado Hadoop y ha creado un sistema equipos trabajando al unísono, y con tan-
forma autónoma de un desastre. que le permite procesar 4 Terabytes de tos, el fallo de uno de ellos en cualquier
Y lo interesante es que al parecer esta- imágenes TIFF almacenadas en Amazon momento está prácticamente garanti-
mos viviendo una época en la que estos S3 y generar 1 millón de PDFs a partir de zado. Da igual lo fiables que sean, siem-
sistemas al fin están comenzando a ser ellas en 24 horas. ¡Y por sólo 240 dólares! pre fallará alguno.

WWW.LINUX- MAGAZINE.ES Número 39 47


DESARROLLO • BigTable

secundarios que ejecuten la escritura con


el número de serie. El objetivo es que en
el peor de los casos la escritura se realice
en el primario y en algunos de los secun-
darios.
Para no saturar la red, uno de los obje-
tivos de todo este sistema, los datos se
Figura 1: Esquema de GFS. envían a los Chunkservers de forma
lineal, es decir, se envían al primero, que
El segundo problema es el ancho de juntos no te permite explotar su potencia. conforme los recibe los envía al siguiente,
banda. Un ordenador puede tener un pro- Crearon su propia versión modificada de como si fuese una cuerda que va pasando
cesador muy potente, pero al final los Linux sobre la que diseñaron un sistema por varios aros.
datos que pasan por él deben salir de una de ficheros llamado Google File System GFS además es capaz de asignar más
memoria y puede que de un disco duro. (GFS). El objetivo de GFS era poder alma- recursos a aquellos ficheros que más se
Los caminos que los datos siguen hasta el cenar información sobre un sistema de emplean, de forma que cuanto más
procesador son muchísimo más lentos ficheros distribuido de forma segura y importante es un fichero, más copias de
que éste. Es imposible sacar más ancho que soportase una gran carga de trabajo. seguridad se harán de sus trozos, lo que
de banda de un solo servidor cuando sus GFS es un sistema distribuido que no protege mejor esa información y además,
buses ya están saturados. guarda todos los datos de un fichero en al haber más copias disponibles, acelera
El tercer problema es el consumo eléc- un solo disco duro ni en un solo ordena- el acceso.
trico. Si tu principal activo son los miles dor, sino que emplea toda una red de GFS no está integrado en el sistema
de ordenadores que posees, entonces tu ordenadores para hacerlo. GFS divide los operativo, sino que es accesible a través
principal gasto es la electricidad. Los datos en trozos, y hace al menos 3 copias de librerías, de forma que puede ser
equipos domésticos consumen menos de cada trozo. Cada copia irá a un orde- empleado desde distintos sistemas opera-
que los servidores más potentes. Google, nador diferente dentro de la basta red de tivos.
por ejemplo, compra equipos cuyas pla- Google.
cas base han sido específicamente dise- Se emplean dos tipos de servidores, los Bigtable
ñadas para él entre otras cosas para elimi- Master y los Chunkservers. Los primeros Tener un sistema de ficheros masiva-
nar componentes inútiles. Incluso ha almacenan la situación física de los tro- mente distribuido, fiable y potente está
patentado su propia unidad de alimenta- zos, “chunks”, que componen los fiche- muy bien, pero lo que realmente necesi-
ción de bajo consumo. ros, así como la jerarquía de ficheros y tan las aplicaciones es una base de datos,
Estos tres problemas llevan a la directorios, lo que llamamos los metada- y Bigtable es esa base de datos.
siguiente conclusión: necesitamos tos. Para no saturar los Masters, los clien- Google decidió crear Bigtable porque
muchos equipos, poco potentes e inter- tes que acceden a ellos cachean, almace- los sistemas de bases de datos tradicio-
cambiables, compuestos por piezas de nan temporalmente los datos relativos a nales no le permitían crear sistemas lo
ordenadores domésticos baratas y fáciles qué Chunckservers contactar para un suficientemente grandes. Las bases de
de encontrar, y que consuman poco. determinado fichero, ver Figura 1. datos relacionales, como pueden ser
¿Cómo podemos hacer que un sistema Los Chunkservers almacenan los trozos MySQL, PostgreSQL, Firebird u Oracle se
con estas características, una auténtica en sí. Los ficheros en GFS son un poco diseñaron pensando que se ejecutarían
pesadilla para los ingenieros hardware, especiales. Normalmente son ficheros en una solo servidor con mucha poten-
pueda dar los servicios que se demandan muy grandes, más de 100MB, y hay unos cia. Jamás se pensó en la posibilidad de
a día de hoy? cuantos millones de ellos. No se pueden que estuviesen distribuidas en miles de
Sólo existe una solución: hacer que el sobrescribir, sólo es posible añadir servidores.
software sea el que reine, y desterrar el (append) datos al final del fichero. La Google creó Bigtable para que fuese,
hardware como solución. operación append es atómica, por lo que sobre todo, una base de datos en la que
no es necesario poseer un sistema de blo- se almacenaría una cantidad de informa-
Google File System: La queos muy sofisticado. Si un fichero está ción enorme, del orden de Petabytes. Para
Nube en el Horizonte realizando un append, el resto debe espe- ello, cada tabla está dividida en “tablets”
La arquitectura de nube es diferente. rar. Los ficheros serán leídos completa- que pueden llegar a ocupar 200 Megaby-
Consiste en una gran cantidad de equi- mente o por partes. Existen Chunkservers tes. Si superasen ese tamaño serían auto-
pos con características más parecidas a primarios y secundarios que almacenan máticamente divididas y comprimidas
las de un “Personal Computer”, pero que las copias de los chunks del primario. para ser enviadas a más máquinas
sólo son parte de un sistema que los Cuando se escribe en un fichero, el usando un sistema de compresión propie-
engloba. Ninguno de ellos es esencial, cliente solicita la escritura al Chunkserver tario de Google.
son indistinguibles, como células en un primario, manda los datos a todas las Bigtable posee muchas peculiaridades.
organismo. réplicas y éstas los almacenan a la orden Para comenzar, aunque se parece mucho
Google fue de los primeros en hacer del primario. El primario asigna a los a una base de datos relacional, rompe
uso de una infraestructura así. Pero el datos a escribir unos números de serie y con algunas de sus premisas. Por ejem-
simple hecho de poner un montón de PCs realiza la escritura. Entonces solicita a los plo, las tablas se dividen en conjuntos de

48 Número 39 WWW.LINUX- MAGAZINE.ES


BigTable • DESARROLLO

columnas y éstos en columnas. Es posible datos en distintos


añadir columnas a una tabla en cualquier servidores usando
momento y no es posible borrar filas, sólo chunks, y volvemos
podemos reemplazarlas por unas nuevas a tener servidores
que ocultan las anteriores. Los datos se de metadatos y ser-
localizan empleando tres llaves: la fila, la vidores de chunks.
columna y un timestamp (la fecha y la Al igual que en GFS,
hora). Así, acceder a filas “borradas” con- los chunks se repli-
siste en hacer referencias a ellas con un can en distintas
timestamp de la fecha anterior al máquinas.
borrado.
Cada celda almacena una cadena de Hypertable
texto sin tipo, por consideraciones de ren- El proyecto Hyper-
dimiento se suelen almacenar los datos table, ver Referencia
de forma binaria, es decir, como volcados [3], surgió como un
de la memoria que los contenían. Como desarrollo dentro de
crear columnas es tan sencillo, la la empresa Zvents,
columna en sí es un nuevo almacén. pero a día de hoy es
Por desgracia Bigtable es software pro- software libre.
pietario de Google, y no tenemos posibili- Hypertable des-
dad de emplearlo ni hacer pruebas con él. cansa sobre Hadoop
Existen varias alternativas libres en y está programado Figura 2: Ejemplo de tabla Hypertable.
desarrollo para poder hacer uso de esta en C++.
tecnología. La principal es la combina- En lugar del lenguaje SQL disponemos values (‘2008-05-01 23:59:59’,U
ción de Hadoop e Hypertable. de una versión especial llamada HQL. “www.linuxmagazine.es”,U
HQL no dispone de todas las sentencias “refer-url”, ”www.google.com”);
Hadoop que posee SQL y además introduce nue-
Hadoop, ver Referencia [2], surgió como vas. La creación de tablas tiene un poco de
una necesidad del proyecto libre Nutch Para comenzar, las filas en Hypertable truco, tanto la fila ROW como TIMES-
de Doug Cutting. Nutch es un proyecto no se comportan de la misma manera que TAMP son implícitas, por lo que no las
que implementa un buscador web libre. en SQL. En SQL, normalmente, dispone- creamos. Hemos creado una tabla con
Cutting leyó el artículo publicado por mos una fila que se suele denominar id, tres columnas, pero al contrario que con
Google donde se explicaba cómo fun- que es de tipo numérico y que empleamos SQL, no indicamos el tipo de las mis-
ciona su sistema MapReduce así como para realizar enlaces entre tablas. En HQL mas. Después hemos insertado en la
GFS. Sorprendido por las técnicas emple- no existe ese tipo de fila, entre otras razo- tabla un solo dato ¿Uno solo? Sí, los dos
adas, y viendo que Nutch necesitaba algo nes porque no existe el tipo numérico. primeros valores que damos son el
parecido, se puso manos a la obra y creó Las columnas están agrupadas por TIMESTAMP y el ROW, después indica-
Hadoop. familias. Una columna cualquiera será mos un nombre de columna y por
Hadoop se compone de dos sistemas, el accesible mediante el nombre último el dato a insertar, en este caso
propio Hadoop, que realiza las tareas de “familia:nombre_columna”. En la Figura “www.google.com”.
MapReduce, y HDFS, que realiza las [2] podemos ver varias columnas que Como dijimos antes, en Hypertable o
tareas de GFS. pertenecen a la familia cliente:. BigTable se emplean tres valores para
MapReduce es el sistema que Google Como en Bigtable, todos los datos indicar una celda, por lo que para insertar
creó para poder procesar cantidades enor- almacenados son cadenas. En cambio un datos necesitaremos esos tres valores
mes de información usando un enfoque existen siempre dos filas implícitas en de nuevo. Vamos a borrar la fila insertada:
totalmente distribuido. Para ello, la con- toda tabla Hypertable: ROW y TIMES-
sulta a los datos se divide en dos fases. TAMP, ver Figura [2]. hypertable> delete * fromU
En la fase Map se crea una función que La primera sería la llave de la tabla, y Paginas where ROW =U
asigna a cada dato algún valor especial. por tanto debe ser única. Puede ser una “www.linux-magazine.es ”;
En la fase Reduce se recogen listas con url, un número o lo que queramos, siem- delete: row=U
los datos y los valores asignados por la pre que se cumpla esta restricción. ‘www.linux-magazine.es’U
función Map y se filtran usando una TIMESTAMP se genera automáticamente family=0 ts=0
nueva función, para dejar sólo aquéllos cada vez que realicemos una inserción. hypertable> select * fromU
que cumplan cierta restricción. Tanto Veamos cómo podemos trabajar con ellas: Paginas where ROW =U
Map como Reduce pueden ejecutarse en “www.linux-magazine.es”;
máquinas diferentes, y por tanto pode- hypertable> create tableU hypertable>
mos hacer uso de una red de servidores. Paginas (fecha, ”refer-url”,U
Para ello se emplea el sistema de fiche- “http-code”); Todo funciona como estamos acostum-
ros HDFS, que como GFS, almacena los hypertable> insert into PaginasU brados a que funcione, la diferencia apa-

WWW.LINUX- MAGAZINE.ES Número 39 49


DESARROLLO • BigTable

rece cuando ejecutamos el siguiente 23:59:59’; yecto libre bastante moderno, pensemos
comando: delete: row=U que Hadoop está aún en la versión
‘www.linux-magazine.es’ family=U ¡0.16!
hypertable> select * fromU 0 ts=2146031999000000001 Por desgracia, para los programadores
Paginas where ROW =U hypertable> select * fromU Python como yo, Hypertable aún no
“www.linux-magazine.es”U Paginas where ROW =U posee enlaces para lenguajes diferentes a
DISPLAY_TIMESTAMPS; “www.linux-magazine.es”; C++, aunque es un proyecto en estudio
2008-05-01 23:59:59.000000000U hypertable> y puede que en unos meses sea posible
www.linux-magazine.org U emplear Python o Perl.
refer-url www.google.com Si nos fijamos de nuevo en la Figura 2
veremos que aparecen varias filas para el HBase
¿Pero no habíamos borrado ya esa fila de mismo ROW, y que en cada una de ellas El proyecto HBase es parte de Hadoop y
la tabla? No, habíamos borrado toda refe- hay alguna columna cambiada. Hyperta- busca implementar Bigtable en Java. A
rencia de la fila en la tabla, pero las filas ble sólo almacena las columnas con día de hoy es usable. Implementa las
anteriores, con TIMESTAMP anteriores datos, mientras que el resto se calcula en mismas operaciones que Hypertable, y
siguen en la tabla. Si queremos eliminar- base al último valor asignado. Así, el es programable desde Jython. Veamos
las habrá que especificar el TIMESTAMP contenido de la última columna en la un ejemplo (ver Listado 1).
que tienen: Figura 2 sería: (“linux-magazine”, Este ejemplo es realmente simple: cre-
“2008-03-18 12:07”, “José Ruiz”, “jose- amos una tabla, y una vez creada intro-
hypertable> delete * fromU ruiz”, “jose.ruiz@gmail.com”) ducimos en ella una fila para después
Paginas where ROW =U Al contrario que en SQL, por el recuperarla y borrar la tabla. El proceso
“www.linux-magazine.es”U momento hay un montón de limitacio- no es complicado (uno de los objetivos
TIMESTAMP ’2008-05-01U nes en HQL. Al fin y al cabo es un pro- de todos estos sistemas es la simplici-
dad).
Listado 1: Bigtable.py Imaginemos por un momento todo lo
que ocurre en este proceso. Creamos una
01 import java.lang 19
tabla sobre Hbase que trabaja sobre
02 admin.deleteTable(tablename_te
HDFS, y por tanto estará almacenando
03 from org.apache.hadoop.hbase xt)
los datos de forma distribuida, guardando
import HBaseConfiguration, 20 admin.createTable(desc)
varias copias en distintos Chunkservers.
HBaseAdmin, HTableDescriptor, 21
Y todo ello con unas poca líneas de
HColumnDescriptor, HTable, 22 tablas = admin.listTables()
código.
HConstants 23 tabla = HTable(conf,
04 nombre_tabla_text)
Conclusión
05 from org.apache.hadoop.io 24
El mundo de la computación en nube
import Text 25 # Insertamos una fila
avanza a pasos agigantados, pero el soft-
06 26 fila = Text(“fila_x”)
ware libre le sigue los pasos apoyado por
07 conf = HBaseConfiguration() 27 lock_id =
empresas como Yahoo! Hadoop ha conse-
08 table.startUpdate(fila)
guido una gran relevancia estando aún en
09 nombre_tabla = ”test” 28 table.put(lock_id,
su versión 0.16 y ha demostrado ser
10 nombre_tabla_text = Text(“contenido:”), ”¡Hola
capaz de rendir en sistemas con miles de
Text(nombre_tabla) mundo cruel!”)
servidores.
11 29 table.commit(lock_id)
El software libre no puede quedarse
12 desc = 30
atrás en esta batalla, porque es ahora
HTableDescriptor(nombre_tabla_ 31 # Nos traemos los datos recien
cuando se está definiendo el futuro de la
text) introducidos
informática. Si con Linux fue posible
13 32 data = table.get(row,
soñar con conquistar el escritorio, espere-
desc.addFamily(HColumnDescript Text(“content:”))
mos que proyectos como Hadoop nos
or(“contenido:”)) 33 data_str =
permitan soñar con no acabar en manos
14 java.lang.String(data, ”UTF8”)
de dos o tres empresas de cuya tecnología
desc.addFamily(HColumnDescript 34 print ”The fetched row
no podremos disponer. ■
or(“enlace:”)) contains the value ’%s’” %
15 admin = HBaseAdmin(conf) (data_str)
16 35 RECURSOS
17 # Borramos la tabla si ya 36 # Borramos la tabla con la que [1] http://open.nytimes.com/2007/11/01/
existe trabajamos self-service-prorated-super-computin
18 if 37 g-fun/
admin.tableExists(tablename_te admin.deleteTable(desc.getName [2] http://hadoop.apache.org/
xt): ()) [3] http://www.hypertable.org

50 Número 39 WWW.LINUX- MAGAZINE.ES

También podría gustarte