Intento recopilar información del rastreador de trabajos. Para empezar me gustaría empezar con conseguir trabajos que se ejecutan información, tales como identificador o nombre del trabajo, etc. Pero ya atascado, esto es lo que tengo (imprime los identificadores de trabajo de los trabajos que se están ejecutando):Confusión sobre hadoop job tracker api
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "zk1.myhost,zk2.myhost,zk3.myhost");
conf.set("hbase.zookeeper.property.clientPort", "2181");
InetSocketAddress jobtracker = new InetSocketAddress("jobtracker.mapredhost.myhost", 8021);
JobClient jobClient = new JobClient(jobtracker, conf);
JobStatus[] jobs = jobClient.jobsToComplete();
for (int i = 0; i < jobs.length; i++) {
JobStatus js = jobs[i];
if (js.getRunState() == JobStatus.RUNNING) {
JobID jobId = js.getJobID();
System.out.println(jobId);
}
}
}
Este anterior funciona como un encanto al intentar mostrar la identificación del trabajo, pero ahora también quiero mostrar el nombre del trabajo. Por lo que añade esta línea después de Identificación del trabajo de impresión:
System.out.println(jobClient.getJob(jobId).getJobName());
consigo esta excepción:
Exception in thread "main" java.lang.NullPointerException
at org.apache.hadoop.mapred.JobClient$NetworkedJob.<init>(JobClient.java:226)
at org.apache.hadoop.mapred.JobClient.getJob(JobClient.java:1080)
at org.apache.test.JobTracker.main(JobTracker.java:28)
jobClient
no es null
. Lo sé porque lo intenté con el cheque nulo si la declaración, pero este jobClient.getJob(jobId)
es null
. ¿Qué estoy haciendo mal aquí?
De acuerdo con la API que debería estar bien,
En primer lugar obtener RunningJob
de jobClient que una vez que haya un trabajo en ejecución a continuación, obtener su nombre http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/RunningJob.html#getJobName()
Cualquier persona hizo algo como esto antes? Podría usar jsoup para obtener esta información a través de la solicitud GET, pero creo que esta es una mejor manera de obtener esta información.
actualización pregunta aquí es mis Hadoop/dependencias HBase: Actualizar
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>0.23.1-mr1-cdh4.0.0b2</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>0.23.1-mr1-cdh4.0.0b2</version>
<exclusions>
<exclusion>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase</artifactId>
<version>0.92.1-cdh4b2-SNAPSHOT</version>
</dependency>
Recompensa:
Éstos son mis importaciones:
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.mapred.JobClient;
import org.apache.hadoop.mapred.JobID;
import org.apache.hadoop.mapred.JobStatus;
Aquí está la salida de System.out.println(jobId)
:
job_201207031810_1603
Solo hay un trabajo actualmente ejecutándose.
¿Qué versión está usando? 0.21 como en tus enlaces de doc? –
Hola Thomas, es una buena observación. Actualizaré mi pregunta. –
¿Entonces su clúster se ejecuta en 0.23.1 desde CDH4 como sus dependencias? –