2010-05-14 7 views
7

Tôi đã thử in các giá trị bằng cách sử dụng System.out.println(), nhưng chúng sẽ không xuất hiện trên bảng điều khiển. Làm thế nào để tôi in ra các giá trị trong một ứng dụng bản đồ/giảm cho các mục đích gỡ lỗi bằng cách sử dụng Hadoop?Gỡ lỗi ứng dụng hadoop

Cảm ơn, Deepak.

+1

Tham khảo ở đây https://stackoverflow.com/questions/23235343/debugging -hadoop-in-eclipse – Mash

Trả lời

5

Những điểm trang @SquareCog đến là một nguồn rất tốt thông tin về gỡ lỗi một công việc MapReduce khi bạn đang chạy nó trên một đám mây.

Trước khi bạn đạt đến điểm đó mặc dù bạn nên xem xét viết các bài kiểm tra đơn vị cho người lập bản đồ và bộ giảm tốc của bạn, vì vậy bạn có thể xác minh rằng logic cơ bản hoạt động. Nếu bạn quan tâm đến các bài kiểm tra đơn vị để kiểm tra lái xe bản đồ của bạn và giảm logic kiểm tra mrunit, mà làm việc trong một thời trang tương tự như JUnit.

+1

Umm trang tôi chỉ vào các cuộc đàm phán về MRUnut :) Nhưng chắc chắn. – SquareCog

+0

@SquareCog - Tệ của tôi, tôi cho rằng tôi biết bạn đã liên kết trang nào. Đó là một nguồn thông tin tốt: +) –

5

Các dòng được in bằng System.out.println và System.err.println chuyển tới nhật ký mà Hadoop viết trên cơ sở mỗi công việc. Bạn có thể xem chúng bằng cách sử dụng giao diện người dùng web bằng cách nhấp qua các tác vụ riêng lẻ.

Xem bài viết trên blog này từ Cloudera cho rất nhiều lời khuyên về việc kiểm tra và gỡ lỗi các tác vụ Hadoop: http://www.cloudera.com/blog/2009/07/advice-on-qa-testing-your-mapreduce-jobs/

3

Tôi muốn thêm, bạn có thể sử dụng CountersHadoop JavaDoc để gỡ lỗi. Ví dụ. nếu bạn muốn kiểm tra, tần suất một dòng nhất định trong chương trình của bạn được thông qua.

0

System.out.println không được chuyển hướng đến thiết bị đầu cuối mà được ghi vào tệp nhật ký. Các tệp nhật ký nằm trong thư mục Hadoop của bạn theo mặc định. Vì vậy, bạn có thể nhập vào thiết bị đầu cuối cat /hadoop-homedirectory/logs/userlogs/jobID/attemptID/stdout Bạn cũng có thể truy cập thông qua giao diện web của mình. Nhập ip: 50070/nhật ký/nhật ký người dùng.

0

Nếu bạn sử dụng MRUnit & Phê duyệt kiểm tra, nó rất dễ dàng để in ra quá trình của một bản đồ giảm công việc. Có một đoạn video về nó ở đây: http://t.co/leExFVrf

Ví dụ mã

HadoopApprovals.verifyMapReduce(new WordCountMapper(), 
          new WordCountReducer(), 0, "cat cat dog"); 

Sẽ tạo ra kết quả:

[cat cat dog] 
-> maps via WordCountMapper to -> 
(cat, 1) 
(cat, 1) 
(dog, 1) 

-> reduces via WordCountReducer to -> 
(cat, 2) 
(dog, 1)