Sto provando a raccogliere alcune informazioni dal tracker di lavoro. Per cominciare mi piacerebbe iniziare con ottenere processi in esecuzione informazioni quali l'ID di lavoro o nome del lavoro ecc Ma già bloccato, ecco quello che ho (stampa gli ID di lavoro per i lavori attualmente in esecuzione):Confusione su 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);
}
}
}
Questo sopra funziona come fascino quando si tenta di visualizzare l'ID del lavoro, ma ora voglio anche visualizzare il nome del lavoro. Così ho aggiunto questa linea dopo lavoro di stampa ID:
System.out.println(jobClient.getJob(jobId).getJobName());
ottengo questa eccezione:
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
non è null
. Lo so perché ho provato con il controllo null se l'istruzione, ma questo jobClient.getJob(jobId)
è null
. Cosa sto facendo di sbagliato qui?
Secondo l'API dovrei essere ok,
in primo luogo ottenere RunningJob
da jobClient di una volta che avete in esecuzione lavoro quindi ottenere il suo nome http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/RunningJob.html#getJobName()
Chiunque ha fatto qualcosa di simile prima? Potrei usare jsoup per ottenere queste informazioni tramite la richiesta GET ma penso che questo sia il modo migliore per ottenere queste informazioni.
aggiornamento domanda qui è la mia Hadoop/dipendenze HBase: aggiornamento
<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>
Bounty:
qui sono i miei importazioni:
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;
Ecco l'output di System.out.println(jobId)
:
job_201207031810_1603
C'è solo un lavoro in esecuzione.
Quale versione stai usando? 0.21 come nei tuoi link doc? –
ciao Thomas che è una buona osservazione aggiornerò la mia domanda –
Quindi il tuo cluster gira su 0.23.1 da CDH4 come le tue dipendenze? –