Ich versuche, einige Informationen aus dem Job-Tracker zu sammeln. Für den Anfang würde ich mit immer laufenden Aufträge Informationen, wie zB Job-ID oder Jobnamen usw. Aber schon stecken beginnen möchte, ist hier, was ich habe (ausdruckt Job-IDs für derzeit ausgeführten Jobs):Verwirrung über 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);
}
}
}
Diese über funktioniert als Charme beim Versuch, Job-ID anzuzeigen, aber jetzt möchte ich auch den Job-Namen anzeigen. Also habe ich diese Zeile nach dem Drucken Job-ID:
System.out.println(jobClient.getJob(jobId).getJobName());
Ich erhalte diese Ausnahme:
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
ist nicht null
. Ich weiß das, weil ich versucht habe, mit Null zu überprüfen, ob Aussage, aber diese jobClient.getJob(jobId)
ist null
. Was mache ich hier falsch?
Nach der API ich in Ordnung sein sollte,
Erste RunningJob
von jobClient bekommen, als wenn Sie Auftrag ausgeführt haben, dann bekommen es der Name http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/RunningJob.html#getJobName()
Wer hat so etwas wie dies vor? Ich könnte jsoup verwenden, um diese Informationen durch GET-Anfrage zu erhalten, aber ich denke, das ist der bessere Weg, um diese Informationen zu erhalten.
Frage Update hier ist mein hadoop/hbase Abhängigkeiten:
<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 Update:
Hier meine Importe:
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;
Hier ist die Ausgabe von System.out.println(jobId)
:
job_201207031810_1603
Derzeit wird nur ein Job ausgeführt.
Welche Version verwenden Sie? 0.21 wie in deinen doc-Links? –
Hallo Thomas, das ist eine gute Beobachtung Ich werde meine Frage aktualisieren –
So läuft Ihr Cluster auf 0.23.1 von CDH4 wie Ihre Abhängigkeiten? –