User Tools

Site Tools


cluster:universo_java

This is an old revision of the document!


Enviar trabajos al universo Java

Introducción

xxx En este capítulo se analiza la funcionalidad del universo Vanilla y se envía al cluster un trabajo simple a través de él.

Tiempo estimado

xxxx 30 minutos.

Precondición

  • El cluster se encuentra completo y en operación.

Supuestos

Ninguno.

Instalar Java en los nodos del cluster

Esta instalación se puede realizar de dos maneras: automática utilizando yum (requiere conexión a Internet) o manual descargando e instalando manualmente los paquetes.

Instalación automática

En los nodos trabajadores ejecute como usuario root el siguiente comando.

# yum install java-1.6.0-sun-compat.i586

Instalación manual

Descargar los siguientes paquetes manualmente.

# wget http://ftp.scientificlinux.org/linux/scientific/55/i386/SL/jpackage-utils-1.7.3-1jpp.2.el5.noarch.rpm
 
# wget http://ftp.scientificlinux.org/linux/scientific/55/i386/SL/java-1.6.0-sun-compat-1.6.0.20-1.sl5.jpp.i586.rpm
 
# wget http://ftp.scientificlinux.org/linux/scientific/55/i386/SL/jdk-1.6.0_20-fcs.i586.rpm

Es posible que existan nuevas versiones a las mencionadas así que puede ser conveniente que verifique el repositorio y descargue las últimas versiones disponibles de los paquetes listados anteriormente.

Instalar localmente los paquetes descargados.

# yum localinstall java-1.6.0-sun-compat-1.6.0.20-1.sl5.jpp.i586.rpm  jdk-1.6.0_20-fcs.i586.rpm  jpackage-utils-1.7.3-1jpp.2.el5.noarch.rpm

Verificar la instalación de Java

# java -version
 
    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)

Verificar el soporte para Java en los nodos

Ejecute desde el c-head el siguiente comando para verificar cuales nodos del cluster cuentan con soporte para Java.

# condor_status -java
 
    Name               JavaVendor Ver    State     Activity LoadAv Mem   ActvtyTime
 
    c-wn1.micluster.co Sun Micros 1.6.0_ Unclaimed Idle     0.510   249  0+01:08:03
    c-wn2.micluster.co Sun Micros 1.6.0_ Unclaimed Idle     0.910   249  0+00:31:58
                         Total Owner Claimed Unclaimed Matched Preempting Backfill
 
             INTEL/LINUX     2     0       0         2       0          0        0
 
                   Total     2     0       0         2       0          0        0

Solucionar problemas

Los nodos cuentan con soporte para Java pero aparentemente no soportan este universo

Los nodos cuentan con la instalación de Java (ver paso anterior) pero cuando desde el nodo principal se pude el reporte de los nodos del cluster que pueden ejecutar trabajos en el universo Java, este aparece vacío.

Este problema aparece en algunas ocasiones cuando se utiliza la máquina virtual de SUN Microsystems y se debe a un problema en el manejo de la configuración de Condor, según se menciona en el manual de Condor.

One identified difficulty occurs when the machine has a large quantity of physical RAM, and this quantity exceeds the Java limitations. This is a known problem for the Sun JVM. Condor appends the maximum amount of system RAM to the Java Maxheap Argument, and sometimes this value is larger than the JVM allows. The end result is that Condor believes that the JVM on the machine is faulty, resulting in nothing showing up as a result of executing the command condor_status -java.

Diagnosticar el problema

Verificar el valor máximo de tamaño para la memoria del heap según la configuración de Condor.

# condor_config_val JAVA_MAXHEAP_ARGUMENT
 
    -Xmx1024m

Verificar este mismo valor según la información que recibió efectivamente el cluster.

# condor_starter -classad
 
    CondorVersion = "$CondorVersion: 7.4.2 Mar 29 2010 BuildID: 227044 $"
    IsDaemonCore = True
    HasFileTransfer = True
    HasPerFileEncryption = True
    HasReconnect = True
    HasMPI = True
    HasTDP = True
    HasJobDeferral = True
    HasJICLocalConfig = True
    HasJICLocalStdin = True
    Invalid maximum heap size: -Xmx1024m249m
    Could not create the Java virtual machine.
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    HasVM = True

Implementar la solución

Editar el archivo de configuración general del cluster y reemplazar la definión existente de la variable JAVA_MAXHEAP_ARGUMENT con las siguientes variables.

# vi /opt/condor/condor/etc/condor_config.local
 
  # First set JAVA_MAXHEAP_ARGUMENT to null, to disable the default of max RAM
  JAVA_MAXHEAP_ARGUMENT =
  # Now set the argument with the Sun-specific maximum allowable value
  JAVA_EXTRA_ARGUMENTS = -Xmx1024m
Ajuste según sus requerimientos, el valor de memoria (MB) a asignársele al heap en el parámetro JAVA_EXTRA_ARGUMENTS.

Solicitar la reconfiguración de los nodos para que estos tomen el nuevo valor recién configurado.

# condor_reconfig c-head c-wn1 c-wn2
 
    Sent "Reconfig" command to master c-head.micluster.com
    Sent "Reconfig" command to master c-wn1.micluster.com
    Sent "Reconfig" command to master c-wn2.micluster.com

Verificar la eficacia de la solución

Solicitar nuevamente el estado de las variables relacionadas con la plataforma Java.

# condor_starter -classad
 
    CondorVersion = "$CondorVersion: 7.4.2 Mar 29 2010 BuildID: 227044 $"
    IsDaemonCore = True
    HasFileTransfer = True
    HasPerFileEncryption = True
    HasReconnect = True
    HasMPI = True
    HasTDP = True
    HasJobDeferral = True
    HasJICLocalConfig = True
    HasJICLocalStdin = True
    JavaVendor = "Sun Microsystems Inc."
    JavaVersion = "1.6.0_20"
    JavaSpecificationVersion = "1.6"
    JavaMFlops = 1416.831909
    HasJava = True
    HasVM = True

El universo Java

Este universo permite el acceso uniforme a las máquinas virtuales de los nodos que dispongan de este servicio de manera independiente a la arquitectura de la máquina física o de su sistema operativo formando un ambiente de cómputo distribuido y homogéneo basado en la plataforma Java.

Ejemplo

El código fuente del trabajo a enviarse al cluster.

$ vi HelloClusterJava.java
HelloClusterJava.java
public class HelloClusterJava
{
 public static void main(String args[])
 {
   String hostname = "*** desconocido *** ";
 
   try
   {
     java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
     hostname = localMachine.getHostName();
   }
   catch (java.net.UnknownHostException e)
   {
     hostname = e.getMessage();
   }
 
   System.out.println("Hello cluster, my name is: " + hostname + ".\n\n");
 }
}

La compilación del trabajo en Java.

$ javac HelloClusterJava.java

El archivo de envío del trabajo al cluster.

$ vi HelloClusterJava.submit
HelloClusterJava.submit
executable = HelloClusterJava.class
arguments  = HelloClusterJava
universe   = java
log        = _HelloClusterJava.log
output     = _HelloClusterJava.out
error      = _HelloClusterJava.err
queue

Nótese como el nombre del archivo de la clase principal se referencia en la variable executable mientras que en la variable arguments se referencia el nombre de la clase principal.

Enviar el trabajo al cluster.

$ condor_submit HelloClusterJava.submit

La obtención de los resultados.

$ cat _HelloClusterJava.log

    000 (028.000.000) 07/12 18:16:47 Job submitted from host: <192.168.1.220:9362>
    ...
    001 (028.000.000) 07/12 18:16:50 Job executing on host: <192.168.1.221:9335>
    ...
    005 (028.000.000) 07/12 18:16:51 Job terminated.
    (1) Normal termination (return value 0)
    Usr 0 00:00:00, Sys 0 00:00:00  -  Run Remote Usage
    Usr 0 00:00:00, Sys 0 00:00:00  -  Run Local Usage
    Usr 0 00:00:00, Sys 0 00:00:00  -  Total Remote Usage
    Usr 0 00:00:00, Sys 0 00:00:00  -  Total Local Usage
    0  -  Run Bytes Sent By Job
    0  -  Run Bytes Received By Job
    0  -  Total Bytes Sent By Job
    0  -  Total Bytes Received By Job
    ...

$ cat _HelloClusterJava.err

    (vacío)

$ cat _HelloClusterJava.out

    Hello cluster, my name is: c-wn1.micluster.com.
cluster/universo_java.1279921502.txt.gz · Last modified: 2012/02/26 22:35 (external edit)