Sự đánh đổi giữa Storm và Hadoop (MapReduce)


12

Ai đó có thể vui lòng cho tôi biết về sự đánh đổi liên quan khi lựa chọn giữa Storm và MapReduce trong Hadoop Cluster để xử lý dữ liệu không? Tất nhiên, ngoài một điều hiển nhiên, Hadoop (xử lý qua MapReduce trong Cụm Hadoop) là một hệ thống xử lý hàng loạt và Storm là một hệ thống xử lý thời gian thực.

Tôi đã làm việc một chút với Hệ thống sinh thái Hadoop, nhưng tôi chưa làm việc với Storm. Sau khi xem qua rất nhiều bài thuyết trình và bài báo, tôi vẫn không thể tìm được câu trả lời thỏa đáng và toàn diện.

Lưu ý: Thuật ngữ đánh đổi ở đây không có nghĩa là để so sánh với những điều tương tự. Nó có nghĩa là đại diện cho hậu quả của việc có được kết quả theo thời gian thực mà không có trong một hệ thống xử lý hàng loạt.

Câu trả lời:


13

MapReduce : Một khung tính toán phân tán chịu lỗi. MapReduce cho phép bạn vận hành với lượng dữ liệu khổng lồ - với rất nhiều công việc được đưa vào để ngăn ngừa lỗi do phần cứng. MapReduce là một lựa chọn kém cho kết quả tính toán một cách nhanh chóng vì nó chậm. (Một công việc MapReduce điển hình sẽ thực hiện theo thứ tự phút hoặc giờ, không phải micro giây)

Công việc MapReduce lấy một tệp (hoặc một số lưu trữ dữ liệu) làm đầu vào và ghi một tệp kết quả. Nếu bạn muốn những kết quả này có sẵn cho một ứng dụng, bạn có trách nhiệm đặt dữ liệu này ở nơi có thể truy cập được. Điều này có thể chậm và sẽ có độ trễ giữa các giá trị bạn có thể hiển thị và các giá trị đại diện cho hệ thống của bạn ở trạng thái hiện tại.

Một điểm khác biệt quan trọng cần thực hiện khi xem xét sử dụng MapReduce trong việc xây dựng các hệ thống thời gian thực là đào tạo mô hình của bạn và áp dụng mô hình của bạn. Nếu bạn nghĩ rằng các tham số mô hình của bạn không thay đổi nhanh chóng, bạn có thể điều chỉnh chúng bằng MapReduce và sau đó có cơ chế truy cập các tham số phù hợp trước này khi bạn muốn áp dụng mô hình của mình.

Storm : Một hệ thống tính toán trực tuyến, thời gian thực. Storm là khung trực tuyến, nghĩa là, theo nghĩa này, một dịch vụ tương tác với một ứng dụng đang chạy. Trái ngược với MapReduce, nó nhận được các mẩu dữ liệu nhỏ (không phải toàn bộ tệp) khi chúng được xử lý trong ứng dụng của bạn. Bạn xác định DAG của các hoạt động để thực hiện trên dữ liệu. Trường hợp sử dụng phổ biến và đơn giản cho Storm là theo dõi các bộ đếm và sử dụng thông tin đó để điền vào bảng điều khiển thời gian thực.

Storm không có bất cứ điều gì (nhất thiết) phải làm với việc duy trì dữ liệu của bạn. Ở đây, phát trực tuyến là một cách khác để nói giữ thông tin bạn quan tâm và ném phần còn lại đi. Trong thực tế, bạn có thể có một lớp kiên trì trong ứng dụng của bạn đã ghi lại dữ liệu, và do đó đây là một sự phân tách mối quan tâm tốt và hợp lý.

Nếu bạn muốn biết thêm ... Nếu bạn muốn tìm hiểu thêm về các hệ thống thời gian thực phù hợp với các tham số với MR và áp dụng các mô hình theo một cách khác ở đây là các slide để nói về việc xây dựng các công cụ đề xuất thời gian thực trên HBase.

Một bài báo xuất sắc kết hợp việc đếm thời gian thực và kiên trì theo một cách thú vị là Google News Personalization: Filterable Collaborative Filtering

Một cuộc hôn nhân thú vị khác của MR và Storm là SummingBird . Summingbird cho phép bạn xác định các hoạt động phân tích dữ liệu có thể được áp dụng thông qua Storm hoặc MR.


9

Điều này giống như hỏi về sự đánh đổi giữa chảo rán và ngăn kéo đựng đồ bằng bạc của bạn. Chúng không phải là hai thứ bạn so sánh, thực sự. Bạn có thể sử dụng chúng cùng nhau như là một phần của dự án lớn hơn.

Bản thân Hadoop không phải là một thứ, mà là tên của một liên đoàn dịch vụ, như HDFS, Hive, HBase, MapReduce, v.v. Storm là thứ bạn sử dụng với một số dịch vụ này, như HDFS hoặc HBase. Nó là một khung xử lý luồng. Có những cái khác trong hệ sinh thái Hadoop mở rộng, như Spark Streaming.

Khi nào bạn sẽ chọn một khung xử lý luồng? khi bạn cần phản ứng với dữ liệu mới trong thời gian gần. Nếu bạn cần loại công cụ này, bạn cũng sẽ triển khai loại công cụ này.


Tôi đã đề cập đến việc xử lý thông qua MapReduce trong hệ thống Hadoop Echo đơn giản là Hadoop vì đó là thuật ngữ thường được sử dụng (Mặc dù sai về mặt kỹ thuật và tôi đã thay đổi câu hỏi tương ứng).
mbbce

Có thể tôi sai nhưng tôi nghĩ có nhiều thứ hơn là chỉ xử lý gần như thời gian thực. Nếu không có sự đánh đổi giữa họ, mọi người sẽ muốn làm mọi thứ trong thời gian gần như thật. Một cách tiếp cận lai cho phép có được tốt nhất của cả hai thế giới (ở một mức độ nào đó). Đó là lý do Summingbird được tạo ra.
mbbce

1
Một sự khác biệt lớn là một hệ thống xử lý luồng chỉ có thể chạm vào dữ liệu một lần và bản thân nó không có trạng thái dài hạn. Một số vấn đề không thể được giải quyết theo cách này. Đối với các vấn đề mà điều này ổn, việc sử dụng một hệ thống không yêu cầu dữ liệu lưu trữ đầu tiên vào lưu trữ (có thể đọc lại) sẽ nhanh hơn. MapReduce vốn không chậm hơn Storm; Cả hai đều là container. Chúng là những mô hình khác nhau cho các vấn đề khác nhau.
Sean Owen

Bằng cách không có trạng thái bền bỉ lâu dài, điều đó có nghĩa là các hệ thống gần thời gian thực như vậy không thể tích lũy các cập nhật đầu vào trong một thời gian dài? Bạn có thể giới thiệu cho tôi bất kỳ tài nguyên nào thảo luận thêm về điều này?
mbbce

Đây là loại định nghĩa của một hệ thống phát trực tuyến. Nếu bạn tưởng tượng một hệ thống có thể truy cập trạng thái dài hạn theo ý muốn, thì nó không thực sự phát trực tuyến.
Sean Owen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.