Đánh giá hiệu năng của spark hadoop năm 2024

Nếu các bạn đang làm các công việc liên quan tới Big Data thì có thể nhận thấy rằng một hệ thống dữ liệu lớn hiện đại, thông thường không thể thiếu được hai thành phần là Hadoop và Spark. Một để lưu trữ và một để xử lý dữ liệu. Cái hay của Spark là nó có khả năng tích hợp rất mạnh mẽ trong Hadoop Ecosystem, có thể xử lý dữ liệu dạng Batch/ Near realtime, có sẵn các API phục vụ Machine Learning/ Graph Processing chạy phân tán với độ ổn định cực cao.

Bản thân dự án của mình đang sử dụng Spark Streaming để xử lý near-real time nguồn dữ liệu khoảng 50 tỉ records mỗi ngày, peak 1 triệu records/s. Tổng dữ liệu nó xử lý mỗi ngày vào khoảng 5TB với tài nguyên cấp khoảng 400Gb Ram.

1. Apache Spark History

Apache Spark bắt đầu tại University of California, Berkeley vào năm 2009 với tên là “Spark research project”, được giới thiệu public lần đầu tiên sau một năm [2010] trong một bài báo có tựa đề “Spark: Cluster Computing with Working Sets” viết bởi 5 nhà nghiên cứu của AMPlab — UC Berkeley. Vào thời điểm đó, Hadoop MapReduce là công cụ lập trình song song mạnh mẽ và cũng là dự án open-source đầu tiên để xử lý xử lý song song dữ liệu trên các cụm servers với hàng ngàn node. AMPlab đã làm việc với nhiều người dùng MapReduce sớm để hiểu những lợi ích và nhược điểm của mô hình lập trình mới này và do đó có thể tổng hợp danh sách các vấn đề qua một số use cases và bắt đầu thiết kế general-computing platforms. Ngoài ra, nhóm nghiên cứu cũng đã làm việc với Hadoop users tại UC Berkeley để hiểu nhu cầu của họ đối với nền tảng, cụ thể là các nhóm đang học máy quy mô lớn bằng thuật toán lặp cần thực hiện multi passes dữ liệu.

Trong suốt quá trình tìm hiểu, nhóm nghiên cứu nhận ra 2 vấn đề:

  1. Cluster Computing có tiềm năng phát triển mạnh mẽ bởi các ứng dụng mới hoàn toàn có thể xây dựng và sử dụng hệ thống, dữ liệu hiện có.
  2. Công cụ MapReduce khiến việc xây dựng các ứng dụng lớn trở nên khó khăn và không hiệu quả.

Từ đó nhóm quyết định phát triển Spark với mục tiêu cốt lõi là giúp việc xây dựng ứng dụng có thể phát triển dễ dàng cùng với khả năng scale-up linh hoạt để xử lý tập dữ liệu lớn và rất lớn, nhóm đã thiết kế một API dựa trên Functional Programming có thể viết ứng dụng một cách ngắn gọn. Sau đó triển khai API này qua một công cụ mới có thể thực hiện chia sẻ dữ liệu trong bộ nhớ hiệu quả, cho phép tái sử dụng qua các bước tính toán. Spark cung cấp tập hợp các Computing Engine và Libraries cho việc xử lý dữ liệu song song trên hệ thống lên tới hàng ngàn Servers, ngoài ra nó còn hỗ trợ nhiều ngôn ngữ lập trình được sử dụng rộng rãi [Python, Java, Scala và R], bao gồm các thư viện cho các tác vụ khác nhau, từ SQL đến Streaming, Machine Learning và graph-parallel computation. Năm 2013, dự án Spark được trao tặng cho Apache Software Foundation, open-source project này sau đó nhận được sự công nhận và đóng góp mạnh mẽ cộng đồng. Cuối cùng, 26/5/2014, Apache release Spark ver1.0 sẵn sàng apply trong môi trường production.

2. The Spark Components

  • Spark Core: là engine thực thi chung làm nền tảng cho Spark. Tất cả các chức năng khác được xây dựng dựa trên base là Spark Core. Nó cung cấp khả năng tính toán trên bộ nhớ RAM và cả bộ dữ liệu tham chiếu trong các hệ thống external storage.
  • Spark SQL: là một thành phần nằm trên Spark Core, giới thiệu một khái niệm trừu tượng hóa dữ liệu mới gọi là SchemaRDD, cung cấp hỗ trợ cho dữ liệu có cấu trúc và bán cấu trúc.
  • Spark Streaming: tận dụng khả năng lập lịch memory-base của Spark Core để thực hiện streaming analytics. Nó lấy dữ liệu theo mini-batches và thực hiện các phép biến đổi RDD [Bộ dữ liệu phân tán có khả năng phục hồi] trên các mini-batches dữ liệu đó.
  • MLlib [Machine Learning Library]: là một framework machine learning phân tán trên Spark tận dụng khả năng tính toán tốc độ cao nhờ distributed memory-based của kiến ​​trúc Spark.
  • GraphX: ​​là một framework xử lý đồ thị phân tán. Nó cung cấp một API để thực hiện tính toán biểu đồ có thể mô hình hóa các biểu đồ do người dùng xác định bằng cách sử dụng API đã được tối ưu sẵn.

3. Spark vs Hadoop MapReduce

Về cơ chế hoạt động của MapReduce [MR]: Input data được đọc từ HDFS [component phụ trách việc lưu trữ trong Hadoop] → xử lý bằng các thao tác chỉ định → output được ghi vào HDFS → data tiếp tục được load → thao tác tiếp theo được thực hiện → output tiếp tục ghi vào HDFS … chuỗi các step [read-process-write] đó được lặp cho đến khi hoàn thành công việc. Vì input được chia thành các block độc lập với nhau, các task map-reduce được thực hiện song song, nên về cơ bản nó hữu ích để xử lí những bộ dữ liệu lớn. Tuy nhiên, MR vẫn còn những tồn tại là quá trình xử lý không thực sự hiệu quả trong trường hợp phải lặp lại nhiều step, vì mỗi step cần thiết phải ghi output vào HDFS trước khi step tiếp theo được thực hiện → việc này tạo ra các vấn đề trong việc lưu trữ và replicate, tăng độ trễ xử lý do phần lớn thực hiện trên Disk vốn có hiệu suất I/O không cao. Bên cạnh đó là việc develop, debug với MR có phần khó khăn vì code dài dòng.

Thực thi word-count với mô hình Map-Reduce

Cơ chế hoạt động của Spark: khắc phục những tồn tại của Hadoop MapReduce, Spark đưa ra một khái niệm mới RDD — Resilient Distributed Dataset đóng vai trò như 1 cấu trúc dữ liệu cơ bản trong Spark, RDD được định nghĩa là trừu tượng cho một tập hợp các phần tử bất biến [bản chất là được lưu trên các ô nhớ read-only], được phân vùng có thể được chia sẻ, tác động song song. Qua đó, input data từ storage system chỉ cần load 1 lần duy nhất, các step thực hiện biến đổi, xử lý input data được lên kế hoạch, optimize và thực hiện một cách liên tục cho đến khi output được trả khi kết thúc công việc. Toàn bộ quá trình đó được diễn ra trên bộ nhớ RAM [khi hết RAM sẽ được chuyển sang xử lý trên Disk] tận dụng được hiệu suất I/O cao từ đó có thể giảm thời gian thực thi nhỏ hơn 10–100 lần Hadoop MapReduce.

Chủ Đề