Hadoop có nghĩa là HDFS, YARN, MapReduce, và rất nhiều thứ khác. Ý bạn là Spark vs MapReduce ? Bởi vì Spark chạy trên / với Hadoop, đó là điểm chính.
Lý do chính để sử dụng Spark là vì tốc độ và điều này xuất phát từ thực tế là việc thực thi nó có thể giữ dữ liệu trong bộ nhớ giữa các giai đoạn thay vì luôn tồn tại trở lại HDFS sau Bản đồ hoặc Giảm. Ưu điểm này rất rõ rệt đối với các tính toán lặp, trong đó có hàng chục giai đoạn mà mỗi lần chạm vào cùng một dữ liệu. Đây là nơi mọi thứ có thể nhanh hơn "100 lần". Đối với các công việc đơn giản, một lần giống như ETL mà MapReduce được thiết kế, nói chung nó không nhanh hơn.
Một lý do khác để sử dụng Spark là ngôn ngữ cấp cao đẹp hơn so với MapReduce. Nó cung cấp một khung nhìn giống như lập trình chức năng bắt chước Scala, đẹp hơn nhiều so với viết mã MapReduce. (Mặc dù bạn phải sử dụng Scala hoặc sử dụng API Java hoặc Python kém phát triển cho Spark). Crunch và Cascading đã cung cấp một sự trừu tượng tương tự trên đầu MapReduce, nhưng đây vẫn là một lĩnh vực mà Spark rất đẹp.
Cuối cùng Spark có các tiểu dự án còn non trẻ nhưng đầy hứa hẹn cho ML, phân tích biểu đồ và phát trực tuyến, trong đó đưa ra một API tương tự, mạch lạc. Với MapReduce, bạn sẽ phải chuyển sang một số dự án khác cho việc này (Mahout, Giraph, Storm). Thật tuyệt khi có nó trong một gói, mặc dù chưa 'nướng'.
Tại sao bạn không sử dụng Spark? diễn giải bản thân:
- Spark chủ yếu là Scala, với các API Java được port; MapReduce có thể thân thiện hơn và bản địa hơn cho các nhà phát triển dựa trên Java
- Hiện tại có nhiều chuyên gia về MapReduce hơn Spark
- Đối với các công việc song song dữ liệu, một lần, giống như ETL, MapReduce được thiết kế cho, MapReduce có trọng lượng nhẹ hơn so với tương đương Spark
- Spark khá trưởng thành và bây giờ YARN cũng vậy, nhưng Spark-on-YARN vẫn còn khá mới. Cả hai có thể chưa được tích hợp tối ưu. Ví dụ cho đến gần đây tôi không nghĩ Spark có thể yêu cầu YARN phân bổ dựa trên số lõi? Đó là: MapReduce có thể dễ hiểu, quản lý và điều chỉnh hơn