2015-04-21 21 views
23

Có ai có thể so sánh Flink và Spark làm nền tảng cho việc học máy không? Đó là khả năng tốt hơn cho các thuật toán lặp? Liên kết tới cuộc thảo luận chung về Flink và Spark: What is the difference between Apache Spark and Apache Flink?Apache Flink vs Apache Spark làm nền tảng cho việc học máy có quy mô lớn?

+1

Flink là một dự án tương đối trẻ và thật khó để so sánh khung triển vọng mới này với dự án khổng lồ như Spark. – ipoteka

+0

Tôi sẽ không trả lời câu hỏi này ngay bây giờ bởi vì chúng tôi sẽ có một cái nhìn sâu sắc hơn trong tương lai gần trên cả hai khuôn khổ ML. Bây giờ tôi hoàn toàn đồng ý với @ipoteka. –

+2

Bạn nên xem Thư viện Học tập Máy mới được tạo ra của Flink: http://ci.apache.org/projects/flink/flink-docs-master/libs/ml/. Như bạn có thể thấy ở đây, chúng tôi đã lên kế hoạch để làm nhiều hơn nữa: http://goo.gl/h9Qmt3 –

Trả lời

22

Tuyên bố từ chối trách nhiệm: Tôi là thành viên PMC của Apache Flink. Câu trả lời của tôi tập trung vào sự khác biệt của việc thực hiện lặp trong Flink và Spark.

Apache Spark thực hiện lặp lại bằng cách bỏ vòng lặp. Điều này có nghĩa là đối với mỗi lần lặp, một tập các nhiệm vụ/toán tử mới được lên lịch và thực thi. Spark thực hiện điều đó rất hiệu quả bởi vì nó rất tốt trong việc lập lịch trình công việc có độ trễ thấp (cùng một cơ chế được sử dụng để phát trực tuyến btw.) Và lưu trữ dữ liệu trong bộ nhớ qua các lần lặp. Do đó, mỗi phép lặp hoạt động trên kết quả của lần lặp trước đó được giữ trong bộ nhớ. Trong Spark, các lần lặp được thực hiện như các vòng lặp thông thường (xem Logistic Regression example).

Flink thực hiện các chương trình với các lần lặp như các luồng dữ liệu tuần hoàn. Điều này có nghĩa là một chương trình luồng dữ liệu (và tất cả các toán tử của nó) được lên lịch một lần và dữ liệu được đưa trở lại từ đuôi của một lần lặp đến đầu của nó. Về cơ bản, dữ liệu đang chảy trong các chu kỳ xung quanh các toán tử trong vòng lặp. Vì các toán tử chỉ được lên lịch một lần, chúng có thể duy trì trạng thái trên tất cả các lần lặp. API của Flink cung cấp hai số iteration operators dành riêng để chỉ định các lần lặp: 1) lặp lại hàng loạt, tương tự khái niệm về việc bỏ vòng lặp và 2) delta iterations. Các phép lặp Delta có thể tăng tốc đáng kể các thuật toán nhất định vì công việc trong mỗi lần lặp lại giảm khi số lần lặp lại tiếp diễn. Ví dụ, lần lặp thứ 10 của việc thực hiện lặp lại PageRank delta hoàn thành nhanh hơn nhiều so với lần lặp đầu tiên.

+0

Cảm ơn bạn đã giải thích! Tôi có hiểu chính xác rằng Flink có thể bảo toàn trạng thái và toán tử trên các nút công nhân giữa các lần lặp không? Điều này có nghĩa là có khả năng ít chi phí trên lặp lại so với Spark gửi nhiệm vụ mỗi lần lặp mới? – Alexander

+4

Có, Flink sẽ giữ các toán tử trên các nhân viên đang chạy (vì vậy bạn có thể giữ trạng thái dễ dàng giữa các lần lặp). Và với điều đó, hãy tiết kiệm thời gian cho việc triển khai lại các tác vụ cho mỗi lần lặp lại. Đặc biệt với tính năng lặp delta được đề cập, lặp lại (trên các phần nhỏ của dữ liệu) chỉ chạy trong vài giây là có thể. –

+0

Nghe hay đấy! Bao lâu là chi phí cố định trong Flink cho mỗi lần lặp? Thứ tự của 0,1 giây? tốt hơn? Giả sử rằng thuật toán không làm gì cả, chỉ cần lặp lại. – Alexander