2017-05-11 13 views
10

Trước đây, tôi đã sử dụng org.apache.hadoop.mapred.JobClient#getJob(org.apache.hadoop.mapred.JobID) để nhận số RunningJob. Cuộc gọi này được thực hiện từ phương thức gọi lại hoàn thành công việc, tuy nhiên, dường như với tôi rằng có vấn đề về thời gian nếu công việc đã hoàn thành thì phương thức trên getJob() không thể tìm thấy và trả về giá trị rỗng. Tôi có thể xác nhận rằng công việc đã được hoàn thành từ giao diện người dùng cụm.Nhận bản đồ hiện có về việc phân chia công việc từ cụm (công việc có thể đang chạy hoặc hoàn thành)

Cách nhau RunningJob, có cách nào để nhận đối tượng org.apache.hadoop.mapreduce.Job của công việc được bản đồ cho org.apache.hadoop.mapreduce.JobID, bất kể công việc hiện đang chạy hay đã hoàn thành chưa?

Tôi cố gắng để mã hóa lên một cái gì đó như:

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

tôi có thể thấy jobId đúng, và cũng có thể thấy đối tượng cụm .. nhưng phương pháp cluster.getJob() trả về null, vì vậy bản thân công việc là null .

Có điều gì tôi thiếu ở đây không?

Trả lời

5

Vấn đề là với với một nâng cấp sợi gần đây mà yêu cầu cho phép máy chủ lịch sử MR trên hệ thống của tôi. Điều này đã khắc phục được sự cố. Gần đây tôi đã nâng cấp từ MR v1 lên v2 và trong quá trình nâng cấp đó, tất cả các công việc đã hoàn tất hiện được chuyển đến máy chủ lịch sử.

0

Bạn tìm kiếm getAllJobStatuses() rằng trở 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

Tôi không cần các công việc đang chạy .. Tôi cần một API có thể trả về cả hoạt động cũng như công việc đã hoàn thành .. –

+0

Điều này có thể lấy được thông qua getAllJobStatuses(). Tôi đã thực hiện chỉnh sửa tách các công việc đang chạy khỏi các công việc đã hoàn thành. – Denis

+0

Tôi cần bộ đếm mr để hoàn thành công việc. –

Các vấn đề liên quan