2012-09-04 21 views
20

पर भ्रम मैं नौकरी ट्रैकर से कुछ जानकारी एकत्र करने का प्रयास कर रहा हूं। शुरुआत के लिए मैं इस तरह के कार्य आईडी या नौकरी नाम आदि लेकिन पहले से ही अटक के रूप में चल नौकरियों जानकारी प्राप्त करने के साथ शुरू करना चाहते हैं, यहाँ मैं क्या मिल गया है है (वर्तमान में चल रहे कार्यों के लिए काम आईडी बाहर प्रिंट):हैडऑप जॉब ट्रैकर एपीआई

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); 
      } 
     } 
    } 

जॉब आईडी प्रदर्शित करने का प्रयास करते समय आकर्षण के रूप में काम करता है, लेकिन अब मैं नौकरी का नाम भी प्रदर्शित करना चाहता हूं। मैं इस अपवाद

System.out.println(jobClient.getJob(jobId).getJobName()); 

:

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) 

jobClientnull नहीं है तो मैं मुद्रण कार्य आईडी के बाद इस लाइन को जोड़ा। मुझे यह पता है क्योंकि मैंने कथन की जांच के साथ कोशिश की है, लेकिन यह jobClient.getJob(jobId)null है। मुझसे यहां क्या गलत हो रहा है?

एपीआई मैं ठीक किया जाना चाहिए के अनुसार

,

http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/JobClient.html#getJob(org.apache.hadoop.mapred.JobID)

पहले एक बार से आप काम चल रहा है jobClient से RunningJob मिलता तो इसे नाम http://hadoop.apache.org/mapreduce/docs/r0.21.0/api/org/apache/hadoop/mapred/RunningJob.html#getJobName()

किसी को भी इस से पहले की तरह कुछ किया? मैं इस जानकारी को प्राप्त करने के लिए jsoup का उपयोग कर सकता हूं, लेकिन मुझे लगता है कि यह जानकारी प्राप्त करने का यह बेहतर तरीका है।

<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> 

बाउंटी अद्यतन:

यहाँ मेरी आयात कर रहे हैं:

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; 

यहाँ System.out.println(jobId) के उत्पादन में है:

प्रश्न अद्यतन यहाँ मेरी Hadoop/HBase निर्भरता है

job_201207031810_1603 

वर्तमान में केवल एक ही काम चल रहा है।

+1

क्या संस्करण का उपयोग कर रहे हैं? 0.21 अपने डॉक्टर लिंक में पसंद है? –

+0

हाय थॉमस अच्छा अवलोकन है मैं अपना प्रश्न –

+0

अपडेट करूँगा तो आपका क्लस्टर आपकी निर्भरताओं की तरह सीडीएच 4 से 0.23.1 पर चलता है? –

उत्तर

17

JobClient के आंतरिक वर्ग NetworkedJob पर एक नज़र डालें।
(स्रोत: /home/user/hadoop/src/mapred/org/apache/hadoop/mapred/JobClient.java)

इसके निर्माता लाइन 225 में JobClient से Configuration वस्तु लाने की कोशिश करता है, लेकिन यह बाद से अशक्त है new JobClient(InetSocketAddress jobTrackAddr, Configuration conf) यह सेट नहीं करता है:

// Set the completion poll interval from the configuration. 
     // Default is 5 seconds. 
     Configuration conf = JobClient.this.getConf(); 
     this.completionPollIntervalMillis = conf.getInt(COMPLETION_POLL_INTERVAL_KEY, 
      DEFAULT_COMPLETION_POLL_INTERVAL); //NPE occurs here! 

समाधान के लिए, यह मैन्युअल रूप से सेट JobClient वस्तु बनाने के बाद।यह आपकी समस्या का समाधान होगा:

.. 
JobClient jobClient = new JobClient(jobtracker, conf); 
jobClient.setConf(conf); 
.... 

Sidenote:

मैं के माध्यम से Configuration वस्तु instantiated:

Configuration conf = new Configuration(); 
conf.addResource(new Path("/path_to/core-site.xml")); 
conf.addResource(new Path("/path_to/hdfs-site.xml")); 
+0

उत्कृष्ट अवलोकन सर! यदि आप मैन्युअल रूप से जॉब क्लाइंट को कॉन्फ़िगर करते हैं, तो काम करता है, अभी तक –

+0

@GandalfStormCrow को असाइन नहीं कर सकता है, आप किसी भी समय लोरैंड के उत्तर के बगल में छोटे +250 बटन पर क्लिक करके बक्षीस का पुरस्कार दे सकते हैं – HypnoticSheep

संबंधित मुद्दे