Escolar Documentos
Profissional Documentos
Cultura Documentos
Noviembre de 2010
RESUMEN
Este pequeño escrito comprende información básica sobre arquitecturas y
modelos manejados a nivel de hardware para un procesamiento avanzado de
datos; esto, pasando por la definición y forma de trabajo de un Clúster o un Grid y
de cómo se llega al pensamiento del procesamiento en paralelo. Con ello partimos
hacia el conocimiento de una excelente herramienta que permite desarrollar tal
tipo de aplicaciones aprovechando al máximo las arquitecturas nombradas en
principio, aprendiendo con un ejemplo práctico, la forma de trabajo sobre el JPPF
(JAVA PARALLEL PROCESSING FRAMEWORK) en cuanto a su modelo
conceptual y práctico en el desarrollo de aplicaciones que aprovechan el
procesamiento en paralelo
ABSTRACT
This little written contains basic information about model and architecture handled
at the hardware level for advanced processing of data; that, through the definition
and method of work in a Cluster or in a Grid and how to get a thought of parallel
processing. Thus we left to the knowledge of an excellent tool that allow develop
these kind of applications maximizing the architectures called at the beginning,
learning with a practical example, working with JPPF (JAVA PARALLEL
PROCESSING FRAMEWORK) in terms of its conceptual and practical model
development applications that take advantage of parallel processing
TABLA DE CONTENIDO
1- INTRODUCCIÓN
2- COMPUTACIÓN DISTRIBUIDA
1.1. CLUSTER
1.2. GRID
5- BIBLIOGRAFÍA
INTRODUCCIÓN
Uno de los modelos de procesamiento que utilizan esta estructura son los Clúster.
Un clúster es una estructura que tiene varios computadores conectados entre sí
en forma de esclavos y administrados por uno que es el maestro, dicha estructura
permite que el computador designado como maestro utilice los recursos de
hardware de los esclavos para efectuar procesos de alto consumo.
La estructura es la siguiente:
Tareas
Recursos
MAESTRO
El gráfico que defina la estructura que conforma un Grid podría ser el siguiente:
Cada uno de los nodos que a continuación aparecen pueden estar ubicados en
diferentes ciudades y además cada nodo podría ser no solo un equipo sino una
red de dispositivos que trabajan para un mismo fin; es posible también que el Grid
esté compuesto por varios Clúster, con lo cual, cada nodo podría ser un Clúster
ubicado en una región geográfica diferente. El Nodo de Control es el que hará las
veces de maestro y administrará todos los recursos dispuestos por cada uno de
los nodo permitiendo la descentralización del peso de cada proceso ejecutado
dentro dicho nodo. Puede haber la cantidad de nodos que se quiera y se pueda,
hay redes que abarcan toda la extensión de un país y permiten procesamiento
prácticamente ilimitado
Nodo2
... Nodo3
Nodo6 Nodo1
Nodo5
COMPUTACIÓN PARALELA O CONCURRENTE
HARDWARE
PROCESO_2 >> PROCESO_1 >> PROCESO_0 N_1
N_..
Obviamente cada núcleo se podría asumir como un nodo diferente dentro de una
configuración en Grid.
JPPF (JAVA PARALLEL PROCESSING FRAMEWORK)
JPPF define cada unidad de trabajo como un “job” que está constituido por
“tasks” que son distribuidas entre los nodos del grid para una ejecución en
paralelo.
La arquitectura de JPPF es la siguiente:
Para desarrollar una aplicación JPPF y que se ejecute sobre un Grid necesitamos
las siguientes herramientas:
Lo primero será crear una tarea (task) que es la parte más pequeña que se
ejecutará en un JPPF Grid
// ...
Bueno, así de sencillo es crear una tarea en JPPF, solo debemos implementar
dentro del método run() lo que queramos que realice.
En los API’s de JPPF, un trabajo está representado como una instancia de la clase
JPPFJob.
Para que veamos cómo se implementa el job podemos abrir el otro archivo que
mencionábamos anteriormente (TemplateApplicationRunner.java) y nos
ubicamos sobre el método createJob() que se parecerá a lo siguiente:
Ahora vamos a ejecutar nuestro job. Para ello vamos a ubicarnos en el método
main(String …args) del archivo TemplateApplicationRunner.java y
encontraremos la siguiente sentencia muy importante dentro del bloque try-
cactch:
// Create a job
JPPFJob job = runner.createJob();
// Submit the job and wait until the results are returned.
// The results are returned as a list of JPPFTask
instances,
// in the same order as the one in which the tasks where
initially added the job.
List<JPPFTask> results = jppfClient.submit(job);
job.setBlocking(true);
La siguiente línea envía el job al servidor y espera que se ejecute y retorne los
resultados que se irán guardando en la lista results
if (task.getException() != null)
{
// process the exception here ...
}
else
{
// process the result here ...
}
Modifiquemos este bloque para que nos muestre un mensaje en caso que ocurra
una excepción o de lo contrario nos muestre en pantalla los resultados obtenidos
if (task.getException() != null)
{
System.out.println("An exception was raised: "
+ task.getException().getMessage());
}
else
{
System.out.println("Execution result: "
+ task.getResult());
}
Por último sólo nos queda ejecutar nuestra aplicación para lo cual necesitaremos
seguir los siguientes pasos:
1- Iniciar el servidor:
Vamos, desde una consola de comandos, al directorio del JPPF-driver y
escribimos “ant”. Veremos en la consola la siguiente información
run:
[echo] starting the JPPF driver
[java] Class Server initialized - listening on port 11111
[java] Client Server initialized - listening on port 11112
[java] Tasks Server initialized - listening on port 11113
[java] JPPF Driver management initialized
[java] JPPF Driver initialization complete
run:
[java] JPPFClassLoader.init(): attempting connection to the
class server
[java] JPPFClassLoader.init(): Reconnected to the class
server
[java] PeerNode.init(): Attempting connection to the JPPF
driver
[java] PeerNode.init(): Reconnected to the JPPF driver
[java] Node successfully initialized
3- Ejecutar la aplicación:
Ahora nos ubicamos, igualmente desde otra consola, en el directorio JPPF-
application-template y escribimos “ant”. En este caso ant primero compilará
nuestra aplicación y luego la ejecutará y podremos ver las siguientes líneas
dentro de la consola:
run:
[java] [client: driver-1 (<ip_address>:11198)]
ClassServerDelegate.init():
Attempting connection to the class server
[java] [client: driver-1 (<ip_address>:11198)]
ClassServerDelegate.init():
Reconnected to the class server
[java] [client: driver-1 (<ip_address>:11198)] : Attempting
connection to the JPPF task server
[java] [client: driver-1 (<ip_address>:11198)] : Reconnected
to the JPPF task server
[java] Execution result: the execution was performed
successfully
Ahora podremos empezar a probar nuestro JPPF con tareas más y más grandes y
que demanden más de un nodo e implementarlas en alguna de las composiciones
que definimos al principio como Computación Distribuida si lo aplicamos en un
Grid de una buena cantidad de nodos y ejecutamos una aplicación que consuma
bastantes recursos observaremos la magnitud de la funcionalidad este framework.
BIBLIOGRAFÍA