2011-12-22 12 views
7

Tôi đang cố gắng tìm ra đầu ra của tác vụ Bản đồ được lưu vào đĩa trước khi nó có thể được sử dụng bởi tác vụ Giảm.Trong Hadoop, khung công tác sẽ lưu đầu ra của tác vụ Bản đồ trong một ứng dụng Map-Reduce thông thường ở đâu?

Lưu ý: - phiên bản sử dụng là Hadoop 0.20.204 với các API mới

Ví dụ, khi ghi đè lên các phương pháp bản đồ trong lớp bản đồ:

public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 
    String line = value.toString(); 
    StringTokenizer tokenizer = new StringTokenizer(line); 
    while (tokenizer.hasMoreTokens()) { 
     word.set(tokenizer.nextToken()); 
     context.write(word, one); 
    } 

    // code that starts a new Job. 

} 

Tôi quan tâm để tìm hiểu nơi context.write() kết thúc bằng văn bản dữ liệu. Cho đến nay tôi đã chạy vào:

FileOutputFormat.getWorkOutputPath(context); 

nào mang lại cho tôi vị trí sau trên HDFS:

hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 

Khi tôi cố gắng sử dụng nó như là đầu vào cho một công việc nó mang lại cho tôi những lỗi sau:

org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/tmp/outputs/1/_temporary/_attempt_201112221334_0001_m_000000_0 

Lưu ý: công việc được bắt đầu trong Mapper, vì vậy về mặt kỹ thuật, các thư mục tạm thời nơi nhiệm vụ Mapper đang viết nó ra tồn tại khi ne w bắt đầu công việc. Sau đó, một lần nữa, nó vẫn nói rằng đường dẫn đầu vào không tồn tại.

Bất kỳ ý tưởng nào về vị trí đầu ra tạm thời được ghi vào? Hoặc có lẽ vị trí mà tôi có thể tìm thấy đầu ra của tác vụ Bản đồ trong một công việc có cả bản đồ và giai đoạn Giảm là gì?

+0

BTW, có vẻ như FileOutputhFormat # getWorkOutputPath cung cấp vị trí của thư mục đầu ra tạm thời cho công việc chứ không phải cho tác vụ bản đồ theo tài liệu api. 'Khi tôi cố gắng sử dụng nó làm đầu vào cho một công việc khác, nó mang lại cho tôi lỗi sau:' - thường các tệp tạm thời bị xóa khi công việc được hoàn thành hoặc nếu không nút sẽ dễ dàng hoàn thành. –

+0

OK, điểm công bằng, nhưng tôi đang bắt đầu công việc trong khi công việc khác đang thực hiện. Tôi đang làm bản đồ lồng nhau giảm. Vì vậy, các công việc bên ngoài là bận rộn chờ đợi trong khi công việc bên trong đang thực hiện, do đó, không nên có bất kỳ xóa các tập tin tạm thời. – inquire

+0

Nhưng ok, những thứ đủ công bằng sẽ bị xóa, có nghĩa là chúng ở đâu đó trước khi chúng bị xóa. Tôi cần phải tìm ra nơi đó. : D – inquire

Trả lời

3

Vì vậy, tôi đã tìm hiểu điều gì đang thực sự xảy ra.

Đầu ra của người lập bản đồ được đệm cho đến khi nó chiếm khoảng 80% kích thước của nó và tại thời điểm đó, nó bắt đầu kết xuất vào đĩa cục bộ và tiếp tục thừa nhận các mục vào bộ đệm.

Tôi muốn lấy đầu ra trung gian của trình ánh xạ và sử dụng nó làm đầu vào cho công việc khác, trong khi trình ánh xạ vẫn đang chạy. Nó chỉ ra rằng điều này là không thể mà không cần sửa đổi nhiều triển khai hadoop 0.20.204. Cách hệ thống hoạt động ngay cả sau khi tất cả những thứ được chỉ định trong ngữ cảnh bản đồ:

map .... { 
    setup(context) 
    . 
    . 
    cleanup(context) 
} 

và dọn dẹp được gọi, vẫn không đổ vào thư mục tạm thời.

Sau đó, toàn bộ bản đồ tính toán mọi thứ cuối cùng sẽ được hợp nhất và được chuyển vào đĩa và trở thành đầu vào cho các giai đoạn xáo trộn và sắp xếp trước Trình giảm tốc.

Cho đến nay tất cả những gì tôi đã đọc và xem xét, thư mục tạm thời nơi kết quả cuối cùng sẽ là cuối cùng, là thư mục mà tôi đã đoán trước.

FileOutputFormat.getWorkOutputPath(context) 

Tôi đã quản lý những gì tôi muốn làm theo một cách khác. Dù sao bất kỳ câu hỏi nào có thể có về điều này, hãy cho tôi biết.

2

Trình theo dõi tác vụ bắt đầu một quy trình JVM riêng biệt cho mỗi tác vụ Bản đồ hoặc Giảm.

Đầu ra của trình ánh xạ (dữ liệu trung gian) được ghi vào hệ thống tệp cục bộ (KHÔNG HDFS) của mỗi nút nô lệ người lập bản đồ. Khi dữ liệu được chuyển vào Reducer, chúng tôi sẽ không thể truy cập các tệp tạm thời này.

Nếu bạn thấy gì về đầu ra Trình ánh xạ của mình, tôi khuyên bạn nên sử dụng IdentityReducer?

4

Khuôn khổ giảm bản đồ sẽ lưu trữ đầu ra trung gian vào đĩa cục bộ thay vì HDFS vì điều này sẽ gây ra việc sao chép tệp không cần thiết.

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