domingo, 30 de agosto de 2009
miércoles, 10 de junio de 2009
Procesamiento Masivo y Escalable de Datos (con MapReduce (Hadoop) ) CLASE 3
NFS & AFS
NFS(Network File System)
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
GFS (The google Filesystem)
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
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
Ejecutar el diskmanager (ejemplo queremos aumentar a 20 gb)
"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.
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.
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
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 reduce
sábado, 23 de mayo de 2009
Procesamiento Masivo y Escalable de Datos (con MapReduce (Hadoop) ) CLASE 1
Introducción a la programación en paralelo
La computación en paralelo es el uso simultáneo de recursos del computador para resolver un problema, existen algunos modelos para hacer programación en paralelo, entre los más comunes; memoria compartida, hilos, paso de mensajes.
Parallel vs. Distributed
La diferencia entre paralelo y distribuido es una pieza importante a la hora de diseñar sistemas, los conceptos son significativamente diferentes, la confusión, si es que existiese es porque lo paralelo y lo distribuido tienen algo en común - la división de un problema en multiples tareas que pueden ser ejecutadas independientemente.
Cual es la diferencia, que es lo que hace a lo distribuido distribuido y a lo paralelo paralelo, los dos incluyen hacer multiples tareas en multiples CPUs separados, pero la diferencia clave es donde residen esos CPUs (tomando CPU y core como sinónimos)
Paralelo: las tareas son divididas entre CPUs dentro del mismo host.
Distribuido: las tareas son divididas entre CPUs en host separados.
Parallelization & Synchronization
La comunicación y la sincronización entre diferentes subtareas es uno de los grandes obstaculos en el rendimiento de los estos programas, pues la memoria no puede ser compartida por estas subtareas por ello existen los semáforos, barreras y otros metodos de sincronización muy conocidos.
Prelude to MapReduce
MapReduce es un framework introducido por Google para dar soporte a la computación paralela, la idea general es esconder toda la complejidad de hacer programas distribuidos, olvidandonos de así de los problemas de sincronización.
miércoles, 25 de febrero de 2009
El modelo Google, un modelo innovador
Estoy leyendo el libro por segunda vez, la verdad es que me parece que es una buena inversión, para aquellos que desean crear una compañía,ayuda a tener idea de los modelos administrativos que pueden servir como referencia a la hora de emprender su propio negocio.
Les dejo el enlace de Bernard Girard hablando sobre su libro, en lo personal lo recomiendo.
sábado, 14 de febrero de 2009
Usando CORBA con el compilador de java
interface ClienteRem
{
string Saludar(in string nombre);
};
};
{
public ClienteRemImpl(){}
public String Saludar(String nombre){
return "Hola "+nombre;
}
}
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
public class Servidor{
public static void main(String[] args){
//inicializa orb
System.out.println("Iniciando");
try {
// crear e inicializar ORB
ORB orb = ORB.init(args, null);
// crear un objeto remoto
ClienteRemImpl impl = new ClienteRemImpl();
// obtener referencia rootpoa y activar el POAManager
POA rootpoa = POAHelper.narrow(orb
.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// obtener una referencia al objeto remoto
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(impl);
ClienteRemoto.ClienteRem href = ClienteRemoto.ClienteRemHelper.narrow(ref);
// las siguientes lineas me permiten publicar un obj remoto
org.omg.CORBA.Object objRef = orb
.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// nombre con el cual voy a publicar mi objeto
String nombre = "ClienteRemoto";
NameComponent path[] = ncRef.to_name(nombre);
// publicar el objeto
ncRef.rebind(path, href);
// ejecutar el orb
orb.run();
} catch (Exception e) {
System.err.println("ERROR: " + e);
}
}
}
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
public class Cliente {
public static void main(String args[]) {
try{
ORB orb = ORB.init(args,null);
// obtener una referencia a NameService
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// las siguientes lineas nos permiten obtener una ref a un objeto remoto
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// nombre del obj remoto
String nombre = "ClienteRemoto";
ClienteRemoto.ClienteRem impl =ClienteRemoto.ClienteRemHelper.narrow(ncRef.resolve_str(nombre));
System.out.println(impl.Saludar("Irene"));
}
catch (Exception e) {
System.out.println("ERROR : " + e);
e.printStackTrace(System.out);
}
}
}
viernes, 6 de febrero de 2009
Para reflexionar un poco!!!!
viernes, 16 de enero de 2009
Uso de un framework para el desarrollo de aplicaciones Web.
El dilema a la hora de escoger entre los frameworks existentes es el lenguaje de programación que utiliza o si es maduro o no, pero aunque te inclines hacia un lado por el lenguaje de programación que usa o la madurez que haya conseguido con el transcurso del tiempo, todo depende de la complejidad de la aplicación.
Para los amantes del Php, esta: Zend, Symfony, Cake Php, Kumbia PHP , por nombrar algunos.
Para los apasionados con el mundo Java hay muchas alternativas entre ellas, Spring, Struts, Grails.En los siguientes links existe un tabla de comparación en muchos factores entres los frameworks para Php http://codigolinea.com/2008/
Luego de alardear un poco de lo útiles que pueden llegar a ser los frameworks y de mostrar algunas opciones, veamos que todos tienen sus pros y contras, si bien es cierto que su uso acelera el desarrollo, una potencial desventaja del uso de frameworks es que te haces dependiente al framework. ¿Que sucede si está obsoleto o cerca de estarlo?, ¿Qué pasa si no has desarrollado grandes proyectos que te hayan dado experiencia en el tema o si no tienes las bases para entender la estructura del framework?, te puede costar mucho trabajo y puede resultar frustrante.
Sin embargo pesan más las ventajas que las desventajas que te ofrece el uso de un framework adecuado para el desarrollo de proyectos, y cabe recalcar que el mercado exige rapidez y calidad. Una vez más la decisión de que framework usar depende de la aplicación, la decisión debe ser tomada con mucha cautela, pues de eso depende la escalabilidad de nuestros proyectos. Y como programadores, directores de proyectos o gerentes de proyectos debemos estar atentos a las alternativas que nos podrían permitir estar en la cima.