Tôi đã viết một công việc Mapreduce để trích xuất một số thông tin từ tập dữ liệu. Tập dữ liệu là xếp hạng của người dùng về phim. Số lượng người dùng khoảng 250K và số lượng phim là khoảng 300k. Đầu ra của bản đồ là <user, <movie, rating>*> and <movie,<user,rating>*>
. Trong bộ giảm tốc, tôi sẽ xử lý các cặp này.Cách khắc phục "Tác vụ try_201104251139_0295_r_000006_0 không thể báo cáo trạng thái trong 600 giây".
Nhưng khi tôi chạy các công việc, các mapper hoàn thành như mong đợi, nhưng giảm tốc luôn luôn phàn nàn rằng
Task attempt_* failed to report status for 600 seconds.
Tôi biết điều này là do thất bại trong việc cập nhật trạng thái, vì vậy tôi thêm một cuộc gọi đến context.progress()
trong mã của tôi như thế này:
int count = 0;
while (values.hasNext()) {
if (count++ % 100 == 0) {
context.progress();
}
/*other code here*/
}
Thật không may, điều này không hữu ích. Vẫn còn nhiều nhiệm vụ giảm thất bại.
Đây là nhật ký:
Task attempt_201104251139_0295_r_000014_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000012_1, Status : FAILED
Task attempt_201104251139_0295_r_000012_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000006_1, Status : FAILED
Task attempt_201104251139_0295_r_000006_1 failed to report status for 600 seconds. Killing!
BTW, các lỗi xảy ra trong giảm để sao chép giai đoạn, nhật ký nói:
reduce > copy (28 of 31 at 26.69 MB/s) > :Lost task tracker: tracker_hadoop-56:localhost/127.0.0.1:34385
Thanks for the help.
Bạn có thể xem xét việc ban hành context.progress() gọi hơn thường xuyên. Mã của bạn nên hoạt động miễn là thời gian giữa các lệnh gọi context.progress() không vượt quá giới hạn (600 giây trong cấu hình của bạn). – cabad