2015-09-14 22 views
11

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

+3

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

+1

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

Trả lời

15

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

  1. 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)
  2. 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.

Một số câu trả lời thông tin về Quora: herehere.

6

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ự.

  1. 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.

  2. 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.

  3. Đ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.

+1

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

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