2011-01-04 33 views
30

Đúng nếu tôi sai, nhưng hiểu biết của tôi là Hadoop không sử dụng MPI để liên lạc giữa các nút khác nhau.Tại sao Hadoop không triển khai bằng MPI?

Lý do kỹ thuật cho điều này là gì?

Tôi có thể gây nguy hiểm cho một vài dự đoán, nhưng tôi không biết đủ về cách thức thực hiện MPI "dưới mui xe" để biết tôi có đúng hay không.

Nghĩ lại thì tôi cũng không hoàn toàn quen thuộc với nội bộ của Hadoop. Tôi hiểu khuôn khổ ở một mức độ khái niệm (bản đồ/kết hợp/trộn/giảm và cách hoạt động ở mức cao) nhưng tôi không biết chi tiết thực hiện gritty nitty. Tôi đã luôn luôn giả định Hadoop đang truyền các cấu trúc dữ liệu tuần tự (có lẽ là GPBs) qua kết nối TCP, ví dụ như trong giai đoạn trộn. Hãy cho tôi biết nếu điều đó không đúng.

Trả lời

23

Một trong những tính năng lớn của Hadoop/map-reduce là khả năng chịu lỗi. Dung sai lỗi không được hỗ trợ trong hầu hết các cài đặt MPI hiện tại (bất kỳ?) Nào. Nó đang được nghĩ đến cho các phiên bản tương lai của OpenMPI.

Sandia labs có phiên bản giảm bản đồ sử dụng MPI nhưng không có khả năng chịu lỗi.

+0

Vì vậy, bạn đang nói lý do không phải là vốn có của MPI mô hình chính nó, chỉ cần triển khai hiện tại? Vì vậy, có vẻ như hiện tại, các thông điệp mạng bị hỏng hoặc các nút không ổn định có thể làm giảm hệ thống MPI. Giả sử cả hai yếu tố này đều bị xóa. Có lý do nào để không triển khai Hadoop bằng cách sử dụng MPI không? – artif

+0

Tôi nghĩ đây là một câu trả lời hợp lý. –

1

Trong MapReduce 2.0 (MRv2) hoặc các ứng dụng sợi có thể được viết (hoặc là được chuyển đến chạy) trên đầu trang của sợi.

Do đó về cơ bản sẽ có một MapReduce Apache Hadoop thế hệ tiếp theo (MAPREDUCE-279) và một cách để hỗ trợ nhiều mô hình lập trình trên đầu trang của nó. Vì vậy, người ta có thể viết các ứng dụng MPI trên YARN. Mô hình lập trình MapReduce sẽ luôn được hỗ trợ như mặc định.

http://wiki.apache.org/hadoop/PoweredByYarn Nên đưa ra ý tưởng về tất cả các ứng dụng được phát triển trên đầu trang YARN bao gồm Open MPI.

+0

Hamster - https://issues.apache.org/jira/browse/MAPREDUCE-2911 –

18

MPI là Giao diện truyền tin nhắn. Ngay trong tên - không có địa phương dữ liệu. Bạn gửi dữ liệu đến một nút khác để nó được tính toán. Do đó, MPI bị ràng buộc mạng về hiệu suất khi làm việc với dữ liệu lớn.

MapReduce với hệ thống tệp phân tán Hadoop sao chép dữ liệu để bạn có thể thực hiện tính toán của mình trong bộ nhớ cục bộ - truyền trực tuyến khỏi ổ đĩa và chuyển thẳng đến bộ xử lý. Do đó MapReduce tận dụng bộ nhớ cục bộ để tránh tắc nghẽn mạng khi làm việc với dữ liệu lớn.

Điều này không có nghĩa là MapReduce không sử dụng mạng ... nó có: và việc trộn ngẫu nhiên thường là phần chậm nhất của công việc! Nhưng nó sử dụng nó càng ít, và càng hiệu quả càng tốt.

Tóm lại: Hadoop (và nội dung của Google trước đó) không sử dụng MPI vì nó không thể sử dụng MPI và đã hoạt động. Các hệ thống MapReduce được phát triển đặc biệt để giải quyết những thiếu sót của MPI theo các xu hướng về phần cứng: khả năng đĩa bùng nổ (và dữ liệu với nó), tốc độ đĩa trì trệ, mạng chậm, bộ xử lý gigahertz đạt đỉnh, đa lõi tiếp quản luật Moore.

+16

Đây là một câu trả lời khá sai lầm. Hầu hết các chương trình MPI không gửi TẤT CẢ dữ liệu qua mạng. Chúng thường là các mô phỏng song song và chỉ gửi các bản cập nhật tối thiểu cho các láng giềng khi tiến trình mô phỏng diễn ra. Ví dụ: trao đổi hào quang trong mã thủy động lực học. Đối với MapReduce, MPI không có ý nghĩa bởi vì nó không đáng tin cậy: nếu một quá trình chết, toàn bộ công việc sẽ chết. Đây là lý do chính mà MPI không phải là một cơ sở tuyệt vời cho MapReduce. MPI dành cho các ứng dụng được kết hợp chặt chẽ trên các mạng nhanh, đáng tin cậy (siêu máy tính), trong khi MapReduce được thiết kế để chạy các khối lượng công việc khó xử song song trên phần cứng chậm, không đáng tin cậy. – tgamblin

+2

-1 cho thông tin không chính xác. Các "thông điệp" được truyền không phải là toàn bộ tập dữ liệu, và các ứng dụng MPI chắc chắn có thể có vị trí dữ liệu. MPI và Hadoop có phần trực giao, và nơi chúng trùng lặp không phải là nơi bạn đã trả lời câu hỏi này. Việc thực hiện bằng cách sử dụng Hadoop hoàn toàn có thể sử dụng MPI và làm việc tốt, nó chỉ là một môi trường nhiều xương trần hơn để làm việc trong đó ít tốn kém hơn Hadoop (nhưng với lợi ích của nhiều cơ hội để tối ưu hóa). –

4

Sự thật là Hadoop có thể được triển khai bằng MPI. MapReduce đã được sử dụng thông qua MPI miễn là MPI đã được xung quanh. MPI có các chức năng như 'bcast' - phát tất cả dữ liệu, 'alltoall' - gửi tất cả dữ liệu tới tất cả các nút, 'reduce' và 'allreduce'. Hadoop loại bỏ yêu cầu để triển khai rõ ràng việc phân phối dữ liệu của bạn và thu thập các phương thức kết quả của bạn bằng cách đóng gói một lệnh truyền đi với lệnh giảm.Điều ngược lại là bạn cần đảm bảo rằng vấn đề của bạn phù hợp với chức năng 'giảm' trước khi bạn triển khai Hadoop. Nó có thể là vấn đề của bạn là phù hợp hơn cho 'phân tán'/'thu thập' và bạn nên sử dụng Torque/MAUI/SGE với MPI thay vì Hadoop. Cuối cùng, MPI không ghi dữ liệu của bạn vào đĩa như được mô tả trong bài đăng khác, trừ khi bạn làm theo phương thức nhận của bạn bằng ghi vào đĩa. Nó hoạt động giống như Hadoop thực hiện bằng cách gửi quá trình/dữ liệu của bạn đến nơi khác để thực hiện công việc. Phần quan trọng là để hiểu vấn đề của bạn với đủ chi tiết để chắc chắn MapReduce là chiến lược song song hiệu quả nhất, và lưu ý rằng nhiều chiến lược khác tồn tại.

1

Không có hạn chế nào ngăn chương trình MPI sử dụng đĩa cục bộ. Và tất nhiên các chương trình MPI luôn cố gắng làm việc cục bộ trên dữ liệu - trong RAM hoặc trên đĩa cục bộ - giống như tất cả các ứng dụng song song. Trong MPI 2.0 (không phải là phiên bản trong tương lai, nó đã ở đây trong một thập kỷ), có thể thêm và xóa các quy trình một cách linh hoạt, điều này có thể thực hiện các ứng dụng có thể khôi phục từ ví dụ: một quá trình chết trên một số nút.

Có lẽ hadoop không sử dụng MPI vì MPI thường yêu cầu mã hóa trong C hoặc Fortran và có nền văn hóa phát triển khoa học/học thuật hơn, trong khi hadoop dường như được thúc đẩy bởi các chuyên gia CNTT với độ lệch Java mạnh mẽ. MPI rất thấp và dễ bị lỗi. Nó cho phép sử dụng rất hiệu quả phần cứng, RAM và mạng. Hadoop cố gắng cao cấp và mạnh mẽ, với một hình phạt hiệu quả. Lập trình MPI đòi hỏi kỷ luật và chăm sóc tuyệt vời để được di chuyển, và vẫn yêu cầu biên dịch từ mã nguồn trên mỗi nền tảng. Hadoop có tính di động cao, dễ cài đặt và cho phép phát triển ứng dụng khá nhanh chóng và dơ bẩn. Đó là một phạm vi khác.

Tuy nhiên, có lẽ hype hadoop sẽ được theo sau bởi các giải pháp thay thế hiệu quả hơn về tài nguyên, có lẽ dựa trên MPI.

0

Nếu chúng ta chỉ nhìn vào phần Bản đồ/Giảm và lập kế hoạch của Hadoop, thì tôi cho rằng MPI là một phương pháp/công nghệ tốt hơn nhiều. MPI hỗ trợ nhiều hình thức trao đổi khác nhau như phát sóng, rào cản, thu thập tất cả, phân tán/thu thập (hoặc gọi nó là giảm bản đồ). Nhưng Hadoop cũng có HDFS. Với điều này, dữ liệu có thể ngồi gần hơn với các nút xử lý. Và nếu bạn nhìn vào vấn đề không gian của Hadoop giống như các công nghệ được sử dụng cho, đầu ra của các bước giảm thực sự là khá lớn, và bạn sẽ không muốn có tất cả thông tin đó làm thay đổi mạng của bạn. Đó là lý do tại sao Hadoop lưu mọi thứ vào đĩa. Nhưng các thông điệp điều khiển có thể đã sử dụng MPI, và các thông điệp MPI chỉ có thể có con trỏ (url hoặc xử lý tập tin) cho dữ liệu thực tế trên ...

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