2012-04-29 19 views
5

Tôi có chương trình "chỉ bản đồ" (không giảm giai đoạn). Kích thước của tệp đầu vào đủ lớn để tạo 7 tác vụ bản đồ và tôi đã xác minh rằng bằng cách tìm đầu ra được tạo ra (part-000 to part006). Bây giờ, cụm của tôi có 8 nút mỗi với 8 lõi và 8 GB bộ nhớ và hệ thống tập tin được chia sẻ được lưu trữ tại nút đầu.Làm thế nào để lên lịch cho các tác vụ Bản đồ Hadoop trong cụm nút đa lõi 8?

Câu hỏi của tôi là tôi có thể chọn giữa chạy tất cả 7 tác vụ bản đồ trong 1 nút hoặc chạy 7 tác vụ bản đồ trong 7 nút nô lệ khác nhau (1 nhiệm vụ cho mỗi nút). Nếu tôi có thể làm như vậy, thì những gì thay đổi trong mã của tôi và tập tin cấu hình là cần thiết.

Tôi đã thử đặt tham số "mapred.tasktracker.map.tasks.maximum" thành 1 và 7 trong mã của mình nhưng tôi không tìm thấy bất kỳ chênh lệch thời gian đáng kể nào. Trong tệp cấu hình của tôi, nó được đặt thành 1.

Trả lời

4

"mapred.tasktracker.map.tasks.maximum" đề với số lượng tác vụ bản đồ sẽ được khởi chạy trên mỗi nút, không phải số lượng nút được sử dụng cho mỗi tác vụ bản đồ. Trong kiến ​​trúc Hadoop, có 1 tasktracker cho mỗi nút (slaves) và 1 công việc theo dõi trên một nút chính (master). Vì vậy, nếu bạn đặt thuộc tính mapred.tasktracker.map.tasks.maximum, nó sẽ chỉ thay đổi số lượng tác vụ bản đồ được thực hiện trên mỗi nút. Phạm vi của "mapred.tasktracker.map.tasks.maximum"1/2*cores/node-2*cores/node

Các số nhiệm vụ bản đồ mà bạn muốn tổng thể nên được thiết lập sử dụng setNumMapTasks(int)

1

Bây giờ, cụm tôi có 8 nút mỗi với 8 lõi và 8 GB bộ nhớ và hệ thống tệp được chia sẻ được lưu trữ tại nút đầu.

Khi bạn nói hệ thống tệp được chia sẻ lưu trữ nút đầu, bạn có nghĩa là dữ liệu được lưu trữ trên HDFS hoặc trên một số NFS như hệ thống tệp được gắn trên mỗi nút không? Tôi đoán bạn có nghĩa là HDFS, nhưng nếu bạn đang sử dụng NFS hoặc một cái gì đó tương tự thì bạn sẽ thấy thông lượng cao hơn với HDFS (bạn muốn di chuyển mã xử lý vào dữ liệu, thay vì di chuyển dữ liệu đến máy xử lý)

Tệp nhập liệu của bạn lớn đến cỡ nào và kích thước phân tách, định dạng tệp (văn bản, chuỗi vv), nhân tố sao chép và methof nén?

Tùy thuộc vào câu trả lời cho các câu hỏi trên, Với thiết lập 8x8 của bạn, bạn có thể nhận được thông lượng tốt hơn nếu bạn giảm kích thước phân chia bản đồ và tăng nhân rộng.

1

Bạn chắc chắn nên chạy 7 tác vụ bản đồ trên 7 nút khác nhau, nếu có thể. Toàn bộ lợi thế của MapReduce là có thể song song với máy tính của bạn để mỗi tác vụ chạy hiệu quả nhất có thể. Nếu bạn chạy 7 tác vụ bản đồ trên một nút, mỗi tác vụ sẽ cạnh tranh với cùng một tài nguyên (RAM, CPU, IO) trên nút đơn đó.

Một thiết lập tiêu chuẩn cho mapred.tasktracker.map.tasks.maximum là một trong mỗi lõi, do đó bạn có thể thay đổi cài đặt của bạn để 8.

Ngoài ra, nếu bạn có một công việc Bản đồ chỉ, bạn sẽ muốn có một lý do chính đáng để thiết lập số lượng người vẽ bản đồ đến một số nhất định. Đặt số lượng tác vụ bản đồ chỉ là "gợi ý" cho trình theo dõi công việc về số lượng bản đồ để chạy, nhưng điều này cuối cùng được quyết định bởi trình theo dõi công việc dựa trên cách DFS lưu trữ dữ liệu đầu vào của bạn. This wiki has more details.

Tuy nhiên, bạn muốn kiểm soát số lượng tác vụ giảm trong một số trường hợp nhất định. Ví dụ, nếu tôi muốn một danh sách các số được sắp xếp, tôi sẽ muốn đảm bảo rằng tất cả dữ liệu của tôi được truyền qua một bộ giảm tốc duy nhất.

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