miércoles, 10 de junio de 2009

Procesamiento Masivo y Escalable de Datos (con MapReduce (Hadoop) ) CLASE 3

Distributed Filesystem overview

Los sistemas de archivos distribuidos permiten el acceso a archivos por equipos remotos como si estuvieran alojados localmente, esto hace que multiples usuarios en diferentes máquinas puedan compartir y almacenar archivos.

NFS & AFS


NFS(Network File System)

En 1985 "Sun Microsystems" creó el sistema de archivos NFS, presentado con estandar Unix FS interface, NFS es "stateless", no guarda estados de lo las peticiones que recibió por un usuario, razón por la cual es muy rápido, esta también podría ser una desventaja porque no se podria tener un historial de las peticiones que hizo determinado usuario en algún momento.
NFS Bloquea los archivos cuando estan siendo usados por otros usuarios, permitiendo así mantener la consistencia de los archivos.
NFS no es escalable por las razones mencionadas anteriormente

AFS (The Andrew Filesystem)

Fué desarrollado por la universidad de Carnegie Mellon como parte del Andrew Project , AFS fue desarrollado como una mejora NFS, entre las cosas que implementa: Utiliza autentificación Kerberos, implementa listas de control de acceso en los directorios para usuarios y grupos.

GFS (The google Filesystem)

Google necesitaba un sistema de archivos distribuido, decidieron crear uno propio, basado en sus necesidades, las asumciones que consideró google para desarrollar este sistema de archivos fueron entre otras; las fallas de hardware son la norma, no la execpcion, para uso de archivos enormes y pocos archivos pequeños, los archivos normalmente serán escritos una sola vez y al final del archivo.

En la siguiente figura se muestra como trabaja este sistema de archivos .
Existe un GFS master, GFS chunck servers, GFS clients. Los archivos son guardados en los GFS chunck servers en chuncks de 64 MB, el master administra copias de estos chuncks entre chunk servers, e información sobre la dirección de cada copia, metadatos, y el namespace de los archivsos, el cliente pide un archivo al master, este le reponde la ubicacion del archivo en el chunck server, y ahora el cliente se comunica directamente con el chunck server para transmitir los datos, de esta namera no se crea un cuello de botella en el master.





sábado, 6 de junio de 2009

Aumentar el tamaño de un disco virtual en VMware

Tengo el siguiente esquema: SO windows, vmware 6.5 con ubuntu

Para cambiar el tamaño de un disco virtual en vmware se podrá usar la herramienta
vmware-vdiskmanager.exe, que se encuentra en la carpeta donde se instaló el vmware
ejm:

Abrir el cmd y moverse al directorio donde se encuentra instalado en vmware
c:\> cd C:\Program Files\VMware\VMware Workstation

Ejecutar el diskmanager (ejemplo queremos aumentar a 20 gb)
c:\Program Files\VMware\VMware Workstation> vmware-vdiskmanager.exe -x 20GB
"direccion donde se encuentra el disco virtual\nombredisco.vmdk"

Listo :D , si les da el siguiente error "The selected operation can only be executed on a disk with no snapshots." , Esta tarea se realiza con la opción "-r" de vmware-vdiskmanager que permite convertir un disco virtual hacia otro tipo.
Tipos de Disco:
0 : único archivo (expandible).
1 : divide el disco virtual en trozos de 2GB (expandible)
2 : espacio físico reservado
3 : similar al caso 1 pero con el espacio físico reservado.


c:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager.exe -r
origen.vmdk -t 0 destino.vmdk

Ahora si pueden utilizar la opción -x

Ahora podemos iniciar la maquina virtual de ubuntu, si corremos el comando df -h , nos dira las particiones que tenemos y cuanto espacio tienen, si no aparecen la cantidad de gb que aumentamos tendremos que usar una herramienta que permita manipular las particiones
, una herramienta es gparted, si no la tenemos instalada entonces con permiso de root la instalamos

# sudo apt-get install gparted

luego de ello ya se puede usar la herramienta y al poner gparted en el terminal se abrira un modo grafico para poder editar las particiones, veremos el espacio que tenemos libre como unllocated, creamos una nueva particion con de tipo ext3, guardamos los cambios, adicionalmente hay que montar la particion, lo haremos manualmente para lo cual necesitamos una carpeta en el que montarlo

#mkdir /data

Esto creará una carpeta de nombre data dentro de / , y montamos la particion en esta carpeta

#mount /dev/sda3 /data

y Listo , ahora necesitamos que esta particion quede montada permanentemente, para lo cual necesitaremos editar un archivo llamado fstab ubicado en /etc

#cd /etc
#vi fstab

esto desplegará la info que está en este archivo y añadimos la siguiente linea al final

/dev/sda3 /data ext3 relatime,errors=remount-ro 0 1

y ahora si, cuando reiniciemos el ubuntu, la particion se montará al iniciar

Espero haya sido de utilidad...

miércoles, 3 de junio de 2009

Procesamiento Masivo y Escalable de Datos (con MapReduce (Hadoop) ) CLASE 2

La Programación funcional es un paradigma de programación declarativa basado en la utilización de funciones matemáticas.
Una característica propia de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas.
como ejemplo de lenguajes funcionales tenemos Lisp y Standard ML entre otros.

El verdadero origen de todo esto está en LISP, De ahí vienen sus nombres. MAP y REDUCE son funciones de orden superior. MAP básicamente lo que hace es tomar una lista y aplicarle una función a cada uno de los elementos y REDUCE le aplica una operación binaria para combinar los elementos.

El siguiente grafico, muestra como trabaja map reduceCon Map Reduce existe paralelización y distribución implicita, toleracia a fallos, tiene herramientas de monitoreo, y permite la abstracción a los programadores.