2017-05-11 9 views
10

Önceden, RunningJob'u almak için org.apache.hadoop.mapred.JobClient#getJob(org.apache.hadoop.mapred.JobID) kullanıyordum. Bu çağrı, iş tamamlama geri çağırma yönteminden yapıldı, ancak bana göre, işin zaten tamamlanmış olması durumunda yukarıdaki getJob() yönteminin bulamıyor ve null değerini döndürdüğü bir zamanlama sorunu var. İşin küme UI'sinden tamamlandığını doğrulayabilirim.Var olan mapreduce işini kümeden alma (iş çalışıyor veya tamamlanmış olabilir)

ayrı RunningJob tutulması, org.apache.hadoop.mapreduce.JobID verilen mapred işin org.apache.hadoop.mapreduce.Job nesneyi almak için bir yolu, işi o anda çalışan veya tamamlandıktan bakılmaksızın, var mı?

Ben böyle bir şey yukarı kod çalıştı:

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

Birazdan jobId görebilir ve ayrıca küme nesneyi görebilirsiniz .. ama cluster.getJob() yöntem null döndürür, böylece iş kendisi null .

Burada eksik olduğum bir şey var mı?

cevap

5

sorun benim sistemde MR geçmişi sunucusunu etkinleştirme gerekli bir son iplik yükseltme ile birlikteydi. Bu sorunu çözdü. Kısa bir süre önce MR v1'den v2'ye yükseltme yaptım ve bu yükseltmede, tamamlanan tüm işler artık geçmiş sunucusuna taşındı.

0

Sen JobStatus[] dönmek getAllJobStatuses() bakın:

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

Çalışan işlere ihtiyacım yok .. Hem çalıştırmayı hem de tamamlanmış işleri geri döndüren bir API'ye ihtiyacım var .. –

+0

Bu getAllJobStatuses() aracılığıyla edinilebilir. Çalışan işleri tamamlanmış olanlardan ayıran düzenlemeyi yaptım. – Denis

+0

Tamamlanmış işler için mr sayaçlarına ihtiyacım var. –

İlgili konular