2017-05-11 8 views
10

पहले, मैं प्राप्त करने के लिए org.apache.hadoop.mapred.JobClient#getJob(org.apache.hadoop.mapred.JobID) का उपयोग कर रहा था। यह कॉल जॉब पूर्णता कॉलबैक विधि से बनाया गया था, हालांकि, मुझे लगता है कि एक समय मुद्दा है जहां नौकरी पहले से ही पूरी हो चुकी है तो उपर्युक्त getJob() विधि इसे नहीं ढूंढ पाती है और शून्य लौटाती है। मैं पुष्टि कर सकता हूं कि नौकरी क्लस्टर यूआई से पूरी की गई थी।क्लस्टर से मौजूदा मैप्रिडस नौकरी प्राप्त करना (नौकरी चलाना या पूरा हो सकता है)

अलग RunningJob रखते हुए, वहाँ एक रास्ता org.apache.hadoop.mapreduce.JobID दिया एक mapred नौकरी के org.apache.hadoop.mapreduce.Job वस्तु पाने के लिए भले ही काम अभी चल रहा है या पूरा हो गया है है?

मैं की तरह कुछ ऊपर कोड करने के लिए करने की कोशिश की:

Cluster cluster = jobClient.getClusterHandle(); Job job = cluster.getJob(JobID.forName(jobId)); log.info("Trying to get actual job with id {} , found {} on cluster {}", JobID.forName(jobId), job, cluster);

मैं सही jobId देख सकते हैं, और यह भी क्लस्टर वस्तु देख सकते हैं .. लेकिन cluster.getJob() विधि अशक्त देता है, तो काम ही रिक्त है ।

क्या ऐसा कुछ है जिसे मैं यहां याद कर रहा हूं?

उत्तर

5

समस्या हाल ही में एक धागा उन्नयन है कि मेरे सिस्टम पर एमआर इतिहास सर्वर को सक्षम करने की आवश्यकता के साथ साथ था। इस मुद्दे को ठीक किया गया। मैंने हाल ही में एमआर v1 से v2 में अपग्रेड किया है और उस अपग्रेड में, सभी पूर्ण नौकरियां अब इतिहास सर्वर पर ले जाया गया है।

0

आप getAllJobStatuses() कि वापसी JobStatus[] के लिए देखो:

List<JobStatus> runningJobs = new ArrayList<JobStatus>(); 
    List<JobStatus> completedJobs = new ArrayList<JobStatus>(); 
    for (JobStatus job : cluster.getAllJobStatuses()) { 
    if (!job.isJobComplete()) { 
     runningJobs.add(job); 
    } 
    else { 
     completedJobs.add(job) 
    } 
    } 

    // list of running JobIDs 
    for (JobStatus rjob : runningJobs) { 
     System.out.println(rjob.getJobID().toString()); 
    } 
    // list of completed JobIDs 
    for (JobStatus cjob : completedJobs) { 
     System.out.println(cjob.getJobID().toString()); 
    } 

    // to print out short report on running jobs: 
    // displayJobList(runningJobs.toArray(new JobStatus[0])); 
+0

मुझे नौकरी चलाने की ज़रूरत नहीं है .. मुझे एक एपीआई चाहिए जो दोनों चल रहे और साथ ही पूर्ण नौकरियों को वापस कर सके .. –

+0

यह getAllJobStatuses() के माध्यम से प्राप्त किया जा सकता है। मैंने संपादन किया जो पूर्ण कार्य से चल रही नौकरियों को अलग करता है। – Denis

+0

मुझे पूर्ण नौकरियों के लिए श्री काउंटर की आवश्यकता है। –

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