Ai đó có thể giải thích bằng cách sử dụng ví dụ về số từ, tại sao Spark sẽ nhanh hơn Map Reduce? câu trả lờiTại sao Spark nhanh hơn Bản đồ Hadoop Giảm
Trả lời
bafna đem đến cấu trúc bộ nhớ-side của câu chuyện, nhưng tôi muốn thêm hai sự kiện quan trọng khác: DAG và hệ sinh thái
- Spark sử dụng "đánh giá lười biếng" để tạo thành một đồ thị acyclic đạo (DAG) của các giai đoạn tính toán liên tiếp. Bằng cách này, kế hoạch thực hiện có thể được tối ưu hóa, ví dụ: để giảm thiểu xáo trộn dữ liệu xung quanh. Ngược lại, điều này nên được thực hiện thủ công trong MapReduce bằng cách điều chỉnh từng bước MR. (Sẽ dễ hiểu hơn nếu bạn quen với việc tối ưu hóa kế hoạch thực hiện trong RDBMS hoặc thực hiện kiểu DAG của Apache Tez)
- Hệ sinh thái Spark đã thiết lập một bộ linh kiện đa năng để xử lý SQL, ML, Streaming, Các nhiệm vụ khai phá đồ thị. Nhưng trong hệ sinh thái hadoop bạn phải cài đặt các gói khác để làm những việc riêng lẻ này.
Và tôi muốn nói thêm rằng, ngay cả khi dữ liệu của bạn là quá lớn đối với bộ nhớ chính, bạn vẫn có thể sử dụng tia lửa bằng cách chọn để tồn tại cho bạn dữ liệu trên đĩa. Mặc dù bằng cách này, bạn từ bỏ những ưu điểm của xử lý trong bộ nhớ, bạn vẫn có thể hưởng lợi từ tối ưu hóa thực hiện DAG.
Tôi nghĩ có ba lý do chính.
Hai lý do chính xuất phát từ thực tế là, thông thường, một lý do không chạy một công việc MapReduce duy nhất, mà là một tập hợp các công việc theo thứ tự.
Một trong những hạn chế chính của MapReduce là nó vẫn giữ nguyên tập dữ liệu đầy đủ cho HDFS sau khi chạy từng công việc. Điều này là rất tốn kém, bởi vì nó phát sinh cả ba lần (để nhân rộng) kích thước của tập dữ liệu trong đĩa I/O và một số lượng tương tự của mạng I/O. Spark có cái nhìn toàn diện hơn về một đường ống hoạt động. Khi đầu ra của một hoạt động cần được đưa vào một hoạt động khác, Spark truyền dữ liệu trực tiếp mà không cần ghi vào lưu trữ liên tục. Đây là một sự đổi mới trên MapReduce đến từ giấy Dryad của Microsoft, và không phải là bản gốc của Spark.
Cải tiến chính của Spark là giới thiệu một bộ nhớ đệm trong bộ nhớ trừu tượng. Điều này làm cho Spark lý tưởng cho khối lượng công việc mà nhiều hoạt động truy cập vào cùng một dữ liệu đầu vào. Người dùng có thể hướng dẫn Spark để cache bộ dữ liệu đầu vào trong bộ nhớ, vì vậy chúng không cần phải được đọc từ đĩa cho mỗi thao tác.
Điều gì về công việc Spark sẽ làm sôi động xuống một công việc MapReduce đơn lẻ? Trong nhiều trường hợp, chúng cũng chạy nhanh hơn trên Spark so với MapReduce. Lợi thế chính mà Spark có ở đây là nó có thể khởi chạy các tác vụ nhanh hơn nhiều. MapReduce bắt đầu một JVM mới cho mỗi tác vụ, có thể mất vài giây với việc tải các JAR, JITing, phân tích cú pháp cấu hình XML, v.v. Spark giữ một JVM thực thi chạy trên mỗi nút, do đó khởi chạy một nhiệm vụ đơn giản là tạo RPC cho nó và chuyển một Runnable đến một hồ bơi thread, trong đó có trong các chữ số duy nhất của mili giây.
Cuối cùng, quan niệm sai lầm phổ biến có thể đáng nhắc đến là Spark bằng cách nào đó chạy hoàn toàn trong bộ nhớ trong khi MapReduce thì không. Điều này chỉ đơn giản là không phải vậy. Việc triển khai shuffle của Spark hoạt động rất giống với MapReduce: mỗi bản ghi được tuần tự hóa và ghi ra đĩa ở phía bản đồ và sau đó được lấy và deserialized ở phía bên giảm.
Câu trả lời hay nhất, bây giờ với phát hành thứ hai của Spark ra bạn cũng có thể đề cập đến một động cơ Tungsten tôi nghĩ. Nó sử dụng tối ưu hóa bytecode không có sẵn trong MapReduce. – MaxNevermind
- 1. pandas python: tại sao bản đồ nhanh hơn?
- 2. Bản đồ Hadoop Giảm: Thuật toán
- 3. Hadoop trên EC2 và Bản đồ Đàn hồi Giảm
- 4. Tại sao giảm nhanh hơn tổng hoặc sumBy?
- 5. bản đồ hadoop giảm mãi mãi để hoàn thành
- 6. Làm cách nào để gỡ lỗi bản đồ Hadoop giảm
- 7. InstantiationException trong chương trình giảm bản đồ hadoop
- 8. Khuôn khổ tập hợp Mongodb có nhanh hơn bản đồ/giảm không?
- 9. Tại sao `(bản đồ digitToInt). show` quá nhanh?
- 10. tập hợp 'bản đồ' bên trong Spark
- 11. Tại sao vector nhanh hơn bản đồ trong một thử nghiệm, nhưng không phải là bản đồ kia?
- 12. Tại sao Bản đồ của Groovy lại tốt hơn Array?
- 13. Tại sao bản đồ sẽ nhanh hơn nhiều so với unordered_map?
- 14. Tại sao String.equals() nhanh hơn chính nó?
- 15. Tại sao DataTable nhanh hơn DataReader
- 16. Bản đồ giảm công việc bị kẹt ở bản đồ 0% giảm 0%
- 17. Tại sao `-1 * x` nhanh hơn` -x` và tại sao?
- 18. spark - filter trong bản đồ
- 19. Tại sao \% (\) nhanh hơn \ (\) trong Vim?
- 20. Tại sao .index nhanh hơn .all?
- 21. Tại sao Crystal lại nhanh hơn Ruby?
- 22. Tại sao chuỗi.HasPrefix nhanh hơn byte.HasPrefix?
- 23. Cái nào nhanh hơn và tại sao?
- 24. Tại sao tệp_get_contents nhanh hơn memcache_get?
- 25. Tại sao emplace_back nhanh hơn push_back?
- 26. Tại sao ToUpperInvariant() nhanh hơn ToLowerInvariant()?
- 27. Tại sao Object.keys nhanh hơn hasOwnProperty?
- 28. Tại sao numpy.dot nhanh hơn numpy.einsum?
- 29. Tại sao Array.reverse_each nhanh hơn Array.reverse.each
- 30. Tại sao MSMQ nhanh hơn WCF QueueService?
bản sao có thể có của [Tại sao Spark nhanh khi đếm từ?] (Http://stackoverflow.com/questions/28850952/why-is-spark-fast-when-word-count) – zero323
Một bản sao có thể khác [Đang lưu vào bộ nhớ cache lợi thế duy nhất của tia lửa trên bản đồ-giảm?] (http://stackoverflow.com/questions/24705724/is-caching-the-only-advantage-of-spark-over-map-reduce) – zaxliu