2011-07-13 37 views
6

Tôi cần thực hiện một số tính toán học máy nặng. Tôi có một số lượng nhỏ các máy không hoạt động trên mạng LAN. Tôi cần bao nhiêu máy để phân phối tính toán của tôi bằng cách sử dụng hadoop/mapreduce/mahout để nhanh hơn đáng kể so với chạy trên một máy tính duy nhất mà không có các khung phân phối này? Đây là một câu hỏi thực tế về chi phí tính toán so với lợi nhuận khi tôi giả định phân phối giữa 2 máy, tổng thời gian sẽ tồi tệ hơn không phân phối và chỉ chạy trên một máy đơn lẻ (chỉ vì tất cả chi phí liên quan đến phân phối tính toán).Trong thực tế, bạn cần bao nhiêu máy để Hadoop/MapReduce/Mahout tăng tốc độ tính toán rất song song?

Lưu ý kỹ thuật: Một số tính toán nặng là rất song song. Tất cả chúng đều miễn là mỗi máy có bản sao riêng của dữ liệu thô.

+0

Bao lâu là một đoạn chuỗi? –

+0

@Shaggy Frog, Jeff Foster. Xin lỗi, lúc đầu tôi không rõ ràng hơn. Câu hỏi không phải là "nó có thể đi nhanh hơn bao nhiêu", đó là "tôi cần bao nhiêu máy để nó nhanh hơn nhiều, chứ không phải là chậm hơn hoặc chỉ phá vỡ ngay cả". Đó là, nó là về chi phí tính toán của hadoop chạy, bản đồ giảm, mahout. Lỗi của tôi vì không rõ ràng hơn. –

Trả lời

8

Chương trình Java "đơn giản" và triển khai dựa trên MapReduce dựa trên Hadoop là những con thú rất khác nhau và khó so sánh. Nó không giống như Hadoop song song một chút chương trình của bạn; nó được viết dưới dạng hoàn toàn khác từ trên xuống dưới.

Hadoop có chi phí đầu tư: chỉ là phí tổn bắt đầu công việc và bắt đầu công nhân như người vẽ bản đồ và bộ giảm tốc. Nó giới thiệu rất nhiều thời gian dành cho việc tuần tự hóa/deserializing dữ liệu, viết nó cục bộ, và chuyển nó sang HDFS.

Triển khai dựa trên Hadoop sẽ luôn sử dụng nhiều tài nguyên hơn. Vì vậy, nó là một cái gì đó để tránh trừ khi bạn không thể tránh nó. Nếu bạn có thể chạy một phép tính không phân tán trên một máy, lời khuyên thực tế đơn giản nhất là không phân phối. Tiết kiệm cho mình những rắc rối.

Trong trường hợp người giới thiệu Mahout, tôi có thể cho bạn biết rằng rất thô lỗ, một công việc Hadoop phải tính toán thêm 2-4 lần so với việc triển khai không phân phối trên cùng một dữ liệu. Rõ ràng là phụ thuộc vô cùng vào thuật toán và lựa chọn điều chỉnh algo. Nhưng để cung cấp cho bạn một số: Tôi sẽ không bận tâm với một cụm Hadoop có dưới 4 máy.

Rõ ràng, nếu tính toán của bạn không thể khớp với một trong các máy của bạn, bạn không còn cách nào khác ngoài phân phối. Sau đó, sự cân bằng là loại thời gian đồng hồ treo tường bạn có thể cho phép so với bao nhiêu công suất tính toán bạn có thể cống hiến. Tham chiếu đến luật của Amdahl là đúng, mặc dù nó không xem xét chi phí đáng kể của Hadoop. Ví dụ, để song song N cách, bạn cần ít nhất N trình lập bản đồ/bộ giảm tốc, và phát sinh N lần trên chi phí cho mỗi bản đồ/bộ giảm tốc. Có một số thời gian khởi động/tắt máy cố định.

6

Xem Amdahl's Law

luật Amdahl là một mô hình cho mối quan hệ giữa tốc độ tăng dự kiến ​​triển khai song song của một thuật toán tương đối so với thuật toán nối tiếp, theo giả định rằng kích thước vấn đề vẫn giữ nguyên khi song song. Ví dụ, nếu đối với một vấn đề nào đó, việc thực hiện song song một thuật toán có thể chạy 12% hoạt động của thuật toán một cách tùy tiện một cách nhanh chóng (trong khi 88% còn lại của các phép toán không song song), luật của Amdahl cho biết tốc độ tối đa của phiên bản song song là 1/(1 - 0,12) = 1,136 lần nhanh như việc triển khai không song song.

Picture of Equation

Nếu không có chi tiết cụ thể rất khó để đưa ra một câu trả lời chi tiết hơn.

1

Tôi biết điều này đã được trả lời, nhưng tôi sẽ ném chiếc mũ của mình vào vòng. Tôi không thể cho bạn một nguyên tắc chung.Việc tăng hiệu suất thực sự phụ thuộc vào nhiều yếu tố:

  1. Làm thế nào song song/loại trừ lẫn nhau tất cả các thành phần/thuật toán là /.
  2. Kích thước của tập dữ liệu
  3. Các trước và sau xử lý các dữ liệu [kể cả tách/lập bản đồ, và giảm/concatinating] Giao thông
  4. Mạng

Nếu bạn có một thuật toán kết nối cao như một mạng Bayes, lưới thần kinh, markov, PCA và EM sau đó rất nhiều thời gian của chương trình hadoop sẽ nhận được các trường hợp được xử lý, chia nhỏ và kết hợp lại. [Giả sử bạn có một số lượng lớn các nút trên mỗi thể hiện (nhiều hơn 1 máy có thể xử lý). Nếu bạn có một tình huống như thế này lưu lượng truy cập mạng sẽ trở thành một vấn đề.

Nếu bạn có một agorithm như tìm đường, hoặc mô phỏng ủ, đó là dễ dàng để tách riêng các trường hợp vào công việc bản đồ/giảm của riêng họ. Các loại thuật toán này có thể rất nhanh.

0

Một khía cạnh khác là nút cổ chai khiến bạn sử dụng mapreduce. Nếu bạn có kích thước dữ liệu hợp lý tốt trong máy đơn của bạn và bạn chỉ đơn thuần là thăm dò tốc độ tăng thì bạn có thể thích sử dụng triển khai GPU. Chúng dễ thiết lập và sử dụng ngay cả trong một máy đơn với kết quả đầy hứa hẹn.

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