2013-01-03 28 views
9

Hầu hết các chương trình Hadoop MapReduce là như thế này:gì là việc sử dụng các lớp cấu hình trong các chương trình Hadoop

public class MyApp extends Configured Implements Tool { 
    @Override 
    public int run(String[] args) throws Exception { 
     Job job = new Job(getConf()); 
     /* process command line options */ 
     return job.waitForCompletion(true) ? 0 : 1; 
    } 
    public static void main(String[] args) throws Exception { 
     int exitCode = ToolRunner.run(new MyApp(), args); 
     System.exit(exitCode); 
    } 
} 

việc sử dụng Configured là gì? Dưới dạng ToolConfigured cả hai đều có getConf()setConf() điểm chung. Nó cung cấp gì cho ứng dụng của chúng tôi?

Trả lời

9

Configured là lớp triển khai Configurable. Configured là lớp cơ sở có triển khai getConf()setConf().

Chỉ kéo dài lớp cơ sở này cho phép lớp mở rộng cấu hình này được định cấu hình bằng cách sử dụng Configuration và có nhiều triển khai cho Configuration.

Khi mã của bạn thực hiện các dòng sau,

ToolRunner.run(new MyApp(), args); 

Bên trong nó sẽ làm điều này

ToolRunner.run(tool.getConf(), tool, args); 

Trong trường hợp trên tool là dụ MyApp lớp học mà là một thực hiện Tool mà cũng giống như bạn nói có getConf() nhưng nó chỉ là một giao diện. Việc triển khai được thực hiện từ Configured lớp cơ sở. Nếu bạn tránh mở rộng Configured lớp trong mã ở trên, thì bạn sẽ phải tự mình thực hiện getConf()setConf().

3

Configured là một thực hiện mặc định của giao diện Configurable - về cơ bản phương pháp setConf của nó vẫn giữ được một biến Ví dụ tin vào thông qua Configuration đối tượng và getConf() lợi nhuận mà tham khảo

Tool là một phần mở rộng của giao diện Configurable, cung cấp một sự bổ sung run(..) và được sử dụng với ToolRunner để phân tích các tùy chọn dòng lệnh (sử dụng GenericOptionsParser) và xây dựng một đối tượng Configuration sau đó được chuyển đến phương thức setConf(..).

Lớp chính của bạn thường sẽ mở rộng Được định cấu hình sao cho các phương thức giao diện có thể định cấu hình được yêu cầu trong Công cụ sẽ được triển khai cho bạn.

Nói chung, bạn nên sử dụng lớp tiện ích ToolRunner để khởi chạy các công việc MapReduce của bạn vì nó xử lý nhiệm vụ chung của phân tích đối số dòng lệnh và xây dựng đối tượng Cấu hình. Tôi sẽ xem Tài liệu API cho ToolRunner để biết thêm thông tin.

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