2013-05-02 37 views

Trả lời

3

Phương thức run() sẽ được gọi bằng cách sử dụng tính đa hình thời gian chạy Java (nghĩa là ghi đè phương pháp). Như bạn có thể thấy dòng # 569 trên liên kết bên dưới, trình ánh xạ/bộ giảm tốc mở rộng sẽ được khởi tạo bằng cách sử dụng API phản chiếu Java. Lớp MapTask được tên của mở rộng mapper/giảm từ đối tượng cấu hình Job mà chương trình khách hàng có thể đã được cấu hình mở rộng lớp mapper/giảm tốc sử dụng job.setMapperClass()

Sau đây là đoạn code lấy từ Hadoop Source MapTask.java

mapperContext = contextConstructor.newInstance(mapper, job, getTaskID(), 
                input, output, committer, 
                reporter, split); 

    input.initialize(split, mapperContext); 
    mapper.run(mapperContext); 
    input.close();` 

Dòng # 621 là một ví dụ về đa hình thời gian chạy. Trên dòng này, MapTask gọi phương thức run() của trình ánh xạ được cấu hình với 'Mapper Context' làm tham số. Nếu run() không được mở rộng, nó gọi phương thức run() trên org.apache.hadoop.mapreduce.Mapper mà lại gọi phương thức map() trên trình ánh xạ được cấu hình.

Trên dòng # 616 của liên kết ở trên, MapTask tạo đối tượng bối cảnh với tất cả chi tiết cấu hình công việc, v.v. được đề cập bởi @harpun và sau đó chuyển sang phương thức run() trên dòng # 621.

Giải thích ở trên phù hợp để giảm nhiệm vụ cũng như với lớp ReduceTask thích hợp làm lớp nhập chính.

+0

cảm ơn niranjan u plz có thể giải thích tất cả các lớp khung công tác hadoop được thực hiện trong khi chạy bất kỳ công việc đơn giản nào không ?? –

+0

Nó không phải là một câu trả lời đơn giản. Có rất nhiều lớp khung công tác hadoop liên quan đến đó thực sự là toàn bộ lớp phần mềm được thực hiện trước khi các lớp mở rộng được gọi. Tôi sẽ đề nghị tải xuống và đính kèm các nguồn hadoop vào IDE của bạn và sau đó gỡ lỗi bất kỳ công việc nào để hiểu các lớp cấp cao được sử dụng trong ngăn xếp cuộc gọi. –

+0

@NiranjanSarvi, Bạn có thể cho biết lớp MapTask tạo đối tượng của lớp khác là lớp ngữ cảnh không? Có bất kỳ mối quan hệ nào giữa lớp MapTask và lớp Ngữ cảnh bởi vì trong thư viện Context class là một lớp trừu tượng và thậm chí không được lớp Maptask triển khai? Nó đến từ bất kỳ cách nào khác? – Kate

0

Có, phương thức run() của người lập bản đồ được gọi là khung MR khi chạy thử nhiệm vụ bản đồ. Theo như bối cảnh có liên quan, hãy xem tài liệu cho Mapper.Context, đặc biệt là các giao diện được triển khai và javadocs của chúng cung cấp cho bạn tổng quan đầy đủ về thông tin chứa trong ngữ cảnh. Qua bối cảnh, bạn có thể truy cập dữ liệu như:

  • thông tin việc làm (cấu hình việc làm, tên mapper/giảm tốc lớp, tên công việc, working directory)
  • tình trạng của các nỗ lực công việc hiện thực
  • then chốt hiện nay, giá trị, phân tách đầu vào (thông tin cụ thể về tác vụ bản đồ)

Tất nhiên đối tượng ngữ cảnh tương tự tồn tại cho Giảm tốc: Reducer.Context.

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