Apache Spark là gì? Tổng quan về Apache Spark, khám phá nền tảng xử lý dữ liệu mạnh mẽ

Nguyễn Đình Tiến
Nguyễn Đình Tiến

6/27/20257 phút đọc

896
0
Apache Spark là gì? Tổng quan về Apache Spark, khám phá nền tảng xử lý dữ liệu mạnh mẽ

APACHE SPARK

I. Khái niệm tổng quan

    Apache Spark là một open source cluster computing framework được phát triển sơ khởi vào năm 2009 bởi AMPLab tại đại học California. Sau này, Spark đã được trao cho Apache Software Foundation vào năm 2013 và được phát triển cho đến nay. Nó cho phép xây dựng các mô hình dự đoán nhanh chóng với việc tính toán được thực hiện trên một nhóm các máy tính, có có thể tính toán cùng lúc trên toàn bộ tập dữ liệu mà không cần phải trích xuất mẫu tính toán thử nghiệm. Tốc độ xử lý của Spark có được do việc tính toán được thực hiện cùng lúc trên nhiều máy khác nhau. Đồng thời việc tính toán được thực hiện ở bộ nhớ trong (in-memories) hay thực hiện hoàn toàn trên RAM.

 

II. Các thành phần của Apache Spark

     Matei Zaharia, cha đẻ của Spark, sử dụng Hadoop từ những ngày đầu. Đến năm 2009 ông viết Apache Spark để giải quyết những bài toán học máy ở đại học UC Berkely vì Hadoop MapReduce hoạt động không hiệu quả cho những bài toán này. Rất sớm sau đó ông nhận ra rằng Spark không chỉ hữu ích cho học máy mà còn cho cả việc xử lý luồng dữ liệu hoàn chỉnh.

     Thành phần trung của Spark là Spark Core: cung cấp những chức năng cơ bản nhất của Spark như lập lịch cho các tác vụ, quản lý bộ nhớ, fault recovery, tương tác với các hệ thống lưu trữ…Đặc biệt, Spark Core cung cấp API để định nghĩa RDD (Resilient Distributed DataSet) là tập hợp của các item được phân tán trên các node của cluster và có thể được xử lý song song.

     Spark có thể chạy trên nhiều loại Cluster Managers như Hadoop YARN, Apache Mesos hoặc trên chính cluster manager được cung cấp bởi Spark được gọi là Standalone Scheduler.

  • Spark SQL cho phép truy vấn dữ liệu cấu trúc qua các câu lệnh SQL. Spark SQL có thể thao tác với nhiều nguồn dữ liệu như Hive tables, Parquet, và JSON.
  • Spark Streaming cung cấp API để dễ dàng xử lý dữ liệu stream,
  • MLlib Cung cấp rất nhiều thuật toán của học máy như: classification, regression, clustering, collaborative filtering…
  • GraphX là thư viện để xử lý đồ thị.

 

III. Cách thức hoạt động của Apache Spark

      Hadoop MapReduce là một mô hình lập trình để xử lý các tập dữ liệu lớn bằng thuật toán phân tán song song. Các nhà phát triển có thể viết toán tử song song hàng loạt mà không phải lo lắng về phân phối công việc và khả năng chịu lỗi. Tuy nhiên, một thách thức đối với MapReduce là quy trình nhiều bước tuần tự cần thiết để chạy một công việc. Với mỗi bước, MapReduce đọc dữ liệu từ cụm, thực hiện các thao tác và ghi lại kết quả vào HDFS. Bởi vì mỗi bước đều yêu cầu đọc đĩa và ghi, MapReduce hoàn thành công việc chậm hơn do độ trễ của I/O đĩa.

      Spark được tạo ra để giải quyết các hạn chế của MapReduce bằng cách thực hiện xử lý trong bộ nhớ, giảm số bước trong một công việc và bằng cách sử dụng lại dữ liệu trên nhiều thao tác song song. Với Spark, chỉ cần thực hiện một bước là dữ liệu được đọc vào bộ nhớ, các thao tác được thực hiện và kết quả được ghi lại, từ đó giúp việc thực thi nhanh hơn nhiều. Spark cũng sử dụng lại dữ liệu bằng cách sử dụng bộ nhớ đệm nằm trong bộ nhớ để tăng tốc đáng kể các thuật toán máy học liên tục gọi một hàm trên cùng một tập dữ liệu. Việc tái sử dụng dữ liệu được thực hiện thông qua việc tạo DataFrames, một khung trừu tượng trên Tập dữ liệu phân tán linh hoạt (RDD), là một tập hợp các đối tượng được lưu trong bộ nhớ đệm và được tái sử dụng trong nhiều hoạt động của Spark. Điều này làm giảm đáng kể độ trễ khiến Spark có tốc độ nhanh hơn nhiều lần so với MapReduce, đặc biệt là khi thực hiện máy học và phân tích tương tác.

 

IV. Các tính năng nổi bật của Apache Spark

  • “Spark as a Service”: Giao diện REST để quản lí (submit, start, stop, xem trạng thái) spark job, spark context
  • Tăng tốc, giảm độ trễ thực thi job xuống mức chỉ tính bằng giây bằng cách tạo sẵn spark context cho các job dùng chung.
  • Stop job đang chạy bằng cách stop spark context
  • Bỏ bước upload gói jar lúc start job làm cho job được start nhanh hơn.
  • Cung cấp hai cơ chế chạy job đồng bộ và bất đồng bộ
  • Cho phép cache RDD theo tên , tăng tính chia sẻ và sử dụng lại RDD giữa các job
  • Hỗ trợ viết spark job bằng cú pháp SQL
  • Dễ dàng tích hợp với các công cụ báo cáo như: Business Intelligence, Analytics, Data Integration Tools

 

V. Resilient Distributed Datasets (RDDs)

      Về bộ nhớ, Spark giải quyết các vấn đề vấn đề xung quanh định nghĩa Resilient Distributed Datasets (RDDs). RDDs hỗ trợ hai kiểu thao tác thao tác: transformations và action. Thao tác chuyển đổi(tranformation) tạo ra dataset từ dữ liệu có sẵn. Thao tác actions trả về giá trị cho chương trình điều khiển (driver program) sau khi thực hiện tính toán trên dataset.

       Spark thực hiện đưa các thao tác RDD chuyển đổi vào DAG (Directed Acyclic Graph) và bắt đầu thực hiện. Khi một action được gọi trên RDD, Spark sẽ tạo DAG và chuyển cho DAG scheduler. DAG scheduler chia các thao tác thành các nhóm (stage) khác nhau của các task. Mỗi Stage bao gồm các task dựa trên phân vùng của dữ liệu đầu vào có thể pipline với nhau và có thể thực hiện một cách độc lập trên một máy worker. DAG scheduler sắp xếp các thao tác phù hợp với quá trình thực hiện theo thời gian sao cho tối ưu nhất. Ví dụ: các thao tác map sẽ được đưa vào cùng một stage do không xảy ra shuffle dữ liệu giữa các stage. Kết quả cuối cùng của DAG scheduler là một tập các stage. Các Stages được chuyển cho Task Scheduler. Task Scheduler sẽ chạy các task thông qua cluster manager (Spark Standalone/Yarn/Mesos). Task scheduler không biết về sự phụ thuộc của các stages. Nó chỉ chịu trách nhiệm thực hiện sắp xếp các task một cách tối ưu nhất.

        Mỗi Worker bao gồm một hoặc nhiều Excuter. Các excuter chịu trách nhiệm thực hiện các task trên các luồng riêng biệt. Việc chia nhỏ các task giúp đem lại hiệu năng cao hơn, giảm thiểu ảnh hưởng của dữ liệu không đối xứng (kích thước các file không đồng đều).

       Quá trình Spark xây dựng DAG: Có hai kiểu chuyển đổi có thể áp dụng trên các RDDs đó là chuyển đổi hẹp và chuyển đổi rộng:

  • Chuyển đổi hẹp: không yêu cầu xáo trộn dữ liệu vượt qua các phân vùng (partition).Ví dụ như các thao tác map, filter,..
  • Chuyển đổi rộng yêu cầu dữ liệu phải xáo trộn. Ví dụ: reduceByKey, sortByKey, groupByKey,…

     Spark truy cập dữ liệu được lưu trữ ở các nguồn khác nhau như: HDFS, Local Disk, RAM. Cache Manager sử dụng Block Manager để quản lý dữ liệu. Cache Manager quản lý dữ liệu nào được Cache trên RAM, thông thường là dữ liệu được sử dụng thường xuyên nhất, nó cũng có thể được xác định thủ công bằng tay sử dụng phương thức persit hoặc cache. Nếu kích thước RAM không đủ chứa dữ liệu thì dữ liệu sẽ được lưu trữ sang Tachyon và cuối cùng là lưu trữ lên đĩa. Khi dữ liệu(RDD) không được lưu trữ trên RAM, khi có nhu cầu sử dụng đến, chúng sẽ được recompute lại. Nó sử dụng một khái niệm là “storage level” để quản lý cấp độ của lưu trữ của dữ liệu.

 

VI. Spark Languages

      Lập trình viên có thể viết các ứng dụng Spark bằng nhiều ngôn ngữ khác nhau. Năm 2014, 84% người dùng sử dụng Scala, trong khi Java và Python cùng là 38% (Người dùng có thể sử dụng nhiều hơn 1 ngôn ngữ trong các ứng dụng của mình). Đến năm 2015, Spark hỗ trợ thêm ngôn ngữ R, rất nhanh chóng có tới 18% người dùng R, Python cũng tăng lên 58%. Ngày này càng nhiều người sử dụng Spark hơn vào trong công việc. Dưới đây là thống kê khi Spark mới thêm ngôn ngữ R.

 

VII. Các trường hợp sử dụng Apache Spark

       Spark là một hệ thống xử lý phân tán đa mục đích được sử dụng cho khối lượng công việc có dữ liệu lớn. Hệ thống này đã được triển khai trong mọi loại trường hợp sử dụng dữ liệu lớn để phát hiện các mẫu và cung cấp thông tin chuyên sâu theo thời gian thực. Các ví dụ về trường hợp sử dụng bao gồm:

    a. Dịch vụ tài chính

    Spark được sử dụng trong ngân hàng để dự đoán tỷ lệ khách hàng rời bỏ và đề xuất các sản phẩm tài chính mới. Trong ngân hàng đầu tư, Spark được sử dụng để phân     tích giá cổ phiếu nhằm dự đoán xu hướng trong tương lai.

    b. Chăm sóc sức khỏe

    Spark được sử dụng để xây dựng dịch vụ chăm sóc bệnh nhân toàn diện bằng cách cung cấp dữ liệu cho nhân viên y tế tuyến đầu để phục vụ cho mọi tương tác với         bệnh nhân. Spark cũng có thể được sử dụng để dự đoán/đề xuất phương pháp điều trị cho bệnh nhân.

    c. Sản xuất

    Spark được sử dụng để loại bỏ thời gian ngừng hoạt động của thiết bị kết nối internet bằng cách đề xuất thời điểm thực hiện bảo trì phòng ngừa.

    d. Bán lẻ

    Spark được sử dụng để thu hút và giữ chân khách hàng thông qua các dịch vụ và ưu đãi được cá nhân hóa.

 

VIII. Một số công ty nổi tiếng sử dụng Apache Spark