2010-01-13 42 views
8

Tôi đang làm việc trên một dự án liên quan đến việc phân tích một lượng dữ liệu rất lớn, vì vậy tôi đã phát hiện MapReduce khá gần đây và trước khi tôi đi sâu vào nó, tôi muốn đảm bảo rằng kỳ vọng của tôi là chính xác.MapReduce có phù hợp với tôi không?

Sự tương tác với dữ liệu sẽ xảy ra từ giao diện web, vì vậy thời gian phản hồi là rất quan trọng ở đây, tôi đang nghĩ đến giới hạn 10-15 giây. Giả sử dữ liệu của tôi sẽ được tải vào một hệ thống tệp phân tán trước khi tôi thực hiện bất kỳ phân tích nào về nó, loại hiệu năng nào tôi có thể mong đợi từ nó?

Giả sử tôi cần lọc một tệp XML 5 GB đơn giản được tạo tốt, có cấu trúc dữ liệu khá bằng phẳng và 10.000.000 bản ghi trong đó. Và giả sử kết quả sẽ đạt được 100.000 bản ghi. Là 10 giây có thể?

Nếu có, loại phần cứng nào tôi đang xem? Nếu không, tại sao không?

Tôi đặt ví dụ xuống, nhưng bây giờ ước rằng tôi không làm như vậy. 5GB chỉ là một mẫu mà tôi đã nói đến, và trong thực tế, tôi sẽ xử lý rất nhiều dữ liệu. 5 GB có thể là dữ liệu trong một giờ trong ngày và tôi có thể muốn xác định tất cả các bản ghi đáp ứng một tiêu chí nhất định.

Cơ sở dữ liệu thực sự không phải là một lựa chọn cho tôi. Những gì tôi muốn tìm hiểu là hiệu suất nhanh nhất mà tôi có thể mong đợi từ việc sử dụng MapReduce là gì. Nó luôn luôn trong vài phút hoặc vài giờ? Không bao giờ là giây?

+1

Hãy xem xét rằng Bản đồ giảm là về việc gửi tính toán cho dữ liệu (được lưu trữ trên nhiều máy hoạt động trên phần của chúng). Một tệp 5GB duy nhất không thực sự phù hợp với mô hình. – z5h

+1

MapReduce quá mức cần thiết cho một tệp 5GB. Bạn có thể xử lý trên một máy, đặc biệt nếu nó chỉ thay đổi một lần một ngày. Ngoài ra, MapReduce là một khái niệm, không phải là một triển khai thực tế. Nếu bạn định sử dụng nó, bạn sẽ muốn điều tra các triển khai cụ thể. –

+0

Nếu MapReduce (hoặc bất kỳ khái niệm nào khác) là điều thích hợp để sử dụng phụ thuộc rất nhiều vào loại phân tích bạn có, thì tần suất dữ liệu của bạn thay đổi, theo cách nào và loại tiền xử lý nào là có thể. Bạn chắc chắn phải cung cấp thêm chi tiết trước khi bạn có thể mong đợi để có được một câu trả lời hữu ích! –

Trả lời

10

MapReduce là tốt để mở rộng quy mô xử lý các tập dữ liệu lớn, nhưng nó không có ý định đáp ứng. Ví dụ, trong quá trình cài đặt Hadoop, chi phí khởi động thường mất một vài phút. Ý tưởng ở đây là để có một công việc xử lý mà sẽ mất nhiều ngày và đưa nó xuống theo thứ tự giờ, hoặc giờ để phút, vv Nhưng bạn sẽ không bắt đầu một công việc mới để đáp ứng với một yêu cầu web và mong đợi nó để kết thúc trong thời gian để trả lời.

Để chạm vào lý do tại sao đây là trường hợp, hãy xem xét cách MapReduce làm việc (nói chung, tổng quan cấp cao):

  • Một loạt các nút nhận phần dữ liệu đầu vào (gọi là chia tách) và làm một số chế biến (bước bản đồ)

  • các dữ liệu trung gian (đầu ra từ bước cuối cùng) được phân hoạch lại như vậy rằng dữ liệu với các phím như kết thúc lên với nhau. Điều này thường yêu cầu một số chuyển khoản dữ liệu giữa các nút .

  • Các giảm nút (mà không phải là nhất thiết phân biệt với các mapper nút - một máy duy nhất có thể làm nhiều công việc liên tiếp) thực hiện bước giảm.

  • Dữ liệu kết quả được thu thập và hợp nhất để tạo ra tập hợp kết quả cuối cùng.

Mặc dù Hadoop cố gắng giữ vị trí dữ liệu càng cao càng tốt, vẫn còn một số lượng khá xáo trộn xung quanh xảy ra trong quá trình xử lý. Điều này một mình sẽ ngăn cản bạn sao lưu giao diện web đáp ứng với triển khai MapReduce được phân phối.

Chỉnh sửa: như Jan Jongboom đã chỉ ra, MapReduce rất tốt cho việc xử lý trước dữ liệu sao cho các truy vấn web có thể nhanh chóng BECAUSE chúng không cần tham gia vào quá trình xử lý. Hãy xem xét ví dụ nổi tiếng về việc tạo chỉ mục đảo ngược từ một tập hợp lớn các trang web.

+4

Tuy nhiên, bạn có thể tạo một số dữ liệu MapReduce alghoritm và để nó xử lý trước dữ liệu, vì vậy trong webapp của bạn, bạn có thể truy vấn các tập dữ liệu được tối ưu hóa. Bằng cách đó bạn có thể nhận được các truy vấn đáp ứng. –

+1

@Jan Jongboom - chính xác – danben

+0

Tệp XML đó tôi sẽ nhận được dữ liệu và nó sẽ xảy ra mỗi ngày một lần. Vì vậy, tôi có thể xử lý và lưu trữ nó ở định dạng rất dễ tiêu hóa. – PBG

2

Một thực hiện phân phối của MapReduce như Hadoop không phải là thích hợp cho chế biến một XML 5GB

  • Hadoop hoạt động tốt nhất trên số lượng lớn dữ liệu. Mặc dù 5GB là một tệp XML khá lớn, nhưng nó có thể dễ dàng được xử lý trên một máy duy nhất.
  • Tệp đầu vào cho công việc Hadoop cần phải được chia nhỏ để các phần khác nhau của tệp có thể được xử lý trên các máy khác nhau. Trừ khi xml của bạn là không đáng kể, việc tách tệp sẽ không xác định, do đó bạn sẽ cần một bước xử lý trước để định dạng tệp để tách.

Nếu bạn có nhiều tệp 5 GB, thì bạn có thể sử dụng hadoop để phân phối phần tách. Bạn cũng có thể sử dụng nó để hợp nhất kết quả trên các tệp và lưu trữ kết quả theo định dạng để truy vấn nhanh để sử dụng giao diện web của bạn như các câu trả lời khác đã đề cập.

0

Có vẻ như những gì bạn có thể muốn là một cơ sở dữ liệu cũ kỹ. Không hoàn toàn hợp thời trang như bản đồ/giảm, nhưng thường đủ cho các công việc nhỏ như thế này. Tùy thuộc vào mức độ linh hoạt mà bộ lọc của bạn cần, bạn có thể nhập tệp 5GB của mình vào cơ sở dữ liệu SQL hoặc bạn có thể triển khai sơ đồ lập chỉ mục của riêng mình, bằng cách lưu trữ các bản ghi trong các tệp khác nhau, lưu trữ mọi thứ trong bộ nhớ trong một hashtable khổng lồ, hoặc bất cứ điều gì phù hợp với nhu cầu của bạn.

+0

Tôi ước tôi không nói 5GB, mọi người dường như đang bám vào điều này. Dữ liệu chúng ta sẽ xử lý cuối cùng là theo thứ tự 100s GB mỗi ngày và chúng tôi sẽ phải xử lý nhiều ngày dữ liệu. – PBG

+1

Yup, chúng tôi đang chốt lại vì hầu hết các triển khai Mapreduce được thiết kế để xử lý các tập dữ liệu lớn, chứ không phải các tập dữ liệu nhỏ :) –

3

MapReduce là một thuật ngữ chung. Bạn có thể muốn hỏi liệu một khung công tác MapReduce đầy đủ tính năng có kiểm soát công việc hay không, chẳng hạn như Hadoop, là phù hợp với bạn. Câu trả lời vẫn phụ thuộc vào khung công tác, nhưng thông thường, việc kiểm soát công việc, mạng, sao chép dữ liệu và tính năng chịu lỗi của khung MapReduce làm cho nó phù hợp với các nhiệm vụ mất vài phút, hoặc lâu hơn, và đó có thể là câu trả lời ngắn và chính xác cho bạn.

Mô hình MapReduce có thể hữu ích cho bạn nếu các tác vụ của bạn có thể được phân chia giữa những người lập bản đồ độc lập và kết hợp với một hoặc nhiều bộ giảm tốc, ngôn ngữ, khuôn khổ và cơ sở hạ tầng bạn có sẵn.

Không nhất thiết phải có sự phân biệt giữa MapReduce và cơ sở dữ liệu. Một ngôn ngữ khai báo như SQL là một cách tốt để trừu tượng song song, cũng như các khung công tác MapReduce có thể truy vấn như HBase. This article thảo luận về việc triển khai MapReduce của thuật toán k-means và kết thúc bằng một ví dụ SQL thuần túy (giả định rằng máy chủ có thể song song nó).

Lý tưởng nhất, nhà phát triển không cần biết quá nhiều về hệ thống ống nước. Erlang examples muốn thể hiện cách các tính năng ngôn ngữ chức năng xử lý điều khiển quá trình.

Ngoài ra, hãy nhớ rằng có những cách nhẹ để chơi với MapReduce, chẳng hạn như bashreduce.

2

Gần đây tôi đã làm việc trên một hệ thống xử lý khoảng 120GB/giờ với 30 ngày lịch sử. Chúng tôi đã kết thúc bằng cách sử dụng Netezza vì lý do tổ chức, nhưng tôi nghĩ Hadoop có thể là giải pháp thích hợp tùy thuộc vào chi tiết dữ liệu và truy vấn của bạn.

Lưu ý rằng XML rất chi tiết. Một trong những chi phí chính của bạn sẽ đọc/ghi vào đĩa. Nếu bạn có thể, chọn một định dạng nhỏ gọn hơn.

Số lượng nút trong cụm của bạn sẽ tùy thuộc vào loại và số lượng đĩa và CPU. Bạn có thể giả định cho một tính toán thô mà bạn sẽ bị giới hạn bởi tốc độ đĩa. Nếu đĩa 7200rpm của bạn có thể quét ở 50MB/s và bạn muốn quét 500GB trong 10 giây thì bạn cần 1000 nút.

Bạn có thể muốn chơi với EC2 của Amazon, nơi bạn có thể đứng lên cụm Hadoop và thanh toán theo phút hoặc bạn có thể chạy công việc MapReduce trên cơ sở hạ tầng của họ.

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