Apache Spark là gì?
Apache Spark là một hệ thống xử lý phân tán nguồn mở được sử dụng cho các khối lượng công việc dữ liệu lớn. Hệ thống này sử dụng khả năng ghi vào bộ nhớ đệm nằm trong bộ nhớ và thực thi truy vấn tối ưu hóa nhằm giúp truy vấn phân tích nhanh dữ liệu có kích thước bất kỳ. Apache Spark cung cấp các API phát triển bằng ngôn ngữ Java, Scala, Python và R và hỗ trợ tái sử dụng mã trên nhiều khối lượng công việc, chẳng hạn như xử lý lô dữ liệu, truy vấn tương tác, phân tích theo thời gian thực, máy học và xử lý đồ thị. Bạn sẽ thấy hệ thống này được các tổ chức trong mọi ngành công nghiệp sử dụng, bao gồm tại FINRA, Yelp, Zillow, DataXu, Urban Institute và CrowdStrike.
Apache Spark có lịch sử như thế nào?
Apache Spark bắt đầu vào năm 2009 như một dự án nghiên cứu tại AMPLab của UC Berkley với sự tham gia hợp tác giữa sinh viên, các nhà nghiên cứu và giảng viên, tập trung vào các lĩnh vực ứng dụng chuyên sâu về dữ liệu. Mục tiêu của Spark là tạo ra một khung mới, được tối ưu hóa cho việc xử lý lặp lại nhanh như máy học và phân tích dữ liệu tương tác, đồng thời vẫn giữ lại được khả năng điều chỉnh quy mô và khả năng chịu lỗi của Hadoop MapReduce. Báo cáo nghiên cứu đầu tiên có tựa đề, “Spark: Cluster Computing with Working Sets” được xuất bản vào tháng 6 năm 2010, và Spark có nguồn mở theo giấy phép BSD. Vào tháng 6 năm 2013, Spark bước vào trạng thái ươm tạo tại Quỹ Phần mềm Apache (ASF), và được thành lập thành Dự án cấp cao nhất của Apache vào tháng 2 năm 2014. Spark có thể chạy độc lập, chạy trên Apache Mesos hoặc thường xuyên nhất là chạy trên Apache Hadoop.
Apache Spark hoạt động như thế nào?
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.
Sự khác biệt chính: Apache Spark so với Apache Hadoop
Ngoài sự khác biệt trong thiết kế của Spark và Hadoop MapReduce, nhiều tổ chức đã nhận thấy các khung dữ liệu lớn này có thể bổ sung cho nhau, sử dụng cùng nhau để giải quyết vấn đề rộng lớn hơn trong kinh doanh.
Hadoop là một khung nguồn mở có Hệ thống tệp phân tán Hadoop (HDFS) làm kho lưu trữ, có YARN là phương pháp quản lý tài nguyên điện toán được sử dụng bởi các ứng dụng khác nhau và triển khai mô hình lập trình MapReduce như một công cụ thực thi. Trong triển khai Hadoop điển hình, các công cụ thực thi khác nhau cũng được triển khai như Spark, Tez và Presto.
Spark là một khung nguồn mở tập trung vào truy vấn tương tác, máy học và khối lượng công việc theo thời gian thực. Spark không có hệ thống lưu trữ riêng, nhưng chạy phân tích trên các hệ thống lưu trữ khác như HDFS hoặc các kho dữ liệu phổ biến khác như Amazon Redshift, Amazon S3, Couchbase, Cassandra và các kho dữ liệu khác. Spark trên Hadoop tận dụng YARN để chia sẻ cụm và tập dữ liệu chung như các công cụ Hadoop khác, việc này đảm bảo mức độ dịch vụ và phản hồi nhất quán.
Apache Spark mang lại những lợi ích gì?
Apache Spark có rất nhiều lợi ích để khiến công cụ này trở thành một trong những dự án hoạt động tích cực nhất trong hệ sinh thái Hadoop. Các dịch vụ này bao gồm:
Nhanh
Thông qua khả năng ghi vào bộ nhớ đệm nằm trong bộ nhớ và thực thi truy vấn được tối ưu hóa, Spark có thể truy vấn phân tích nhanh dữ liệu có kích thước bất kỳ.
Thân thiện với nhà phát triển
Apache Spark mặc định hỗ trợ Java, Scala, R và Python, cung cấp cho bạn nhiều ngôn ngữ để xây dựng các ứng dụng của mình. Các API này tạo điều kiện thuận lợi cho các nhà phát triển, bởi vì API ẩn đi sự phức tạp của quá trình xử lý phân tán sau các toán tử cấp cao đơn giản, làm giảm đáng kể lượng mã cần thiết.
Nhiều khối lượng công việc
Apache Spark đi kèm với khả năng chạy nhiều khối lượng công việc, bao gồm truy vấn tương tác, phân tích theo thời gian thực, máy học và xử lý đồ thị. Một ứng dụng có thể kết hợp nhiều khối lượng công việc một cách trơn tru.
Khối lượng công việc Apache Spark là gì?
Khung Spark bao gồm:
- Spark Core làm nền móng cho nền tảng
- Spark SQL cho các truy vấn tương tác
- Spark Streaming để phân tích theo thời gian thực
- Spark MLlib dành cho máy học
- Spark GraphX dành cho xử lý đồ thị
Spark Core
Spark Core là nền móng cho nền tảng. Công cụ này chịu trách nhiệm quản lý bộ nhớ, phục hồi sau lỗi, lên lịch, phân phối và giám sát các công việc và tương tác với các hệ thống lưu trữ. Spark Core được hiển thị thông qua giao diện lập trình ứng dụng (API) được xây dựng dành cho Java, Scala, Python và R. Các API này ẩn đi sự phức tạp của hoạt động xử lý phân tán đằng sau các toán tử cấp cao, đơn giản.
MLlib
Machine Learning
Spark bao gồm MLlib, một thư viện thuật toán để thực hiện máy học trên dữ liệu ở quy mô lớn. Các mô hình Máy học có thể được các nhà khoa học dữ liệu đào tạo với R hoặc Python trên bất kỳ nguồn dữ liệu Hadoop nào, được lưu bằng MLlib và được nhập vào một quy trình chạy trên Java hoặc Scala. Spark được thiết kế dành cho phép điện toán nhanh và có tính tương tác chạy trong bộ nhớ nhằm giúp phép máy học chạy nhanh chóng. Các thuật toán bao gồm khả năng phân loại, hồi quy, phân cụm, lọc cộng tác và khai thác mẫu.
Spark Streaming
Thời gian thực
Spark Streaming là một giải pháp theo thời gian thực tận dụng khả năng lên lịch nhanh của Spark Core để thực hiện phân tích truyền liên tục. Công cụ này tải nhập dữ liệu theo lô nhỏ và cho phép phân tích dữ liệu đó bằng chính mã ứng dụng được viết để phân tích theo lô. Điều này cải thiện năng suất của nhà phát triển, bởi vì họ có thể sử dụng cùng một mã để xử lý theo lô và cho các ứng dụng truyền liên tục theo thời gian thực. Spark Streaming hỗ trợ dữ liệu từ Twitter, Kafka, Flume, HDFS và ZeroMQ và nhiều nguồn khác trong hệ sinh thái Spark Packages.
Spark SQL
Truy vấn tương tác
Spark SQL là một công cụ truy vấn phân tán cung cấp các truy vấn có tính tương tác có độ trễ thấp với tốc độ nhanh hơn tới 100 lần so với MapReduce. Công cụ này bao gồm một trình tối ưu hóa dựa trên chi phí, lưu trữ theo cột và tạo mã cho các truy vấn nhanh, đồng thời điều chỉnh quy mô lên hàng nghìn nút. Các chuyên viên phân tích kinh doanh có thể sử dụng SQL tiêu chuẩn hoặc Ngôn ngữ truy vấn Hive để truy vấn dữ liệu. Các nhà phát triển có thể sử dụng các API, có sẵn trong Scala, Java, Python và R. Công cụ này hỗ trợ nhiều nguồn dữ liệu khác nhau, bao gồm JDBC, ODBC, JSON, HDFS, Hive, ORC và Parquet. Các kho dữ liệu phổ biến khác như Amazon Redshift, Amazon S3, Couchbase, Cassandra, MongoDB, Salesforce.com, Elasticsearch và nhiều kho dữ liệu thuộc hệ sinh thái Spark Packages.
GraphX
Xử lý đồ thị
Spark GraphX là một khung xử lý đồ thị phân tán được xây dựng trên Spark. GraphX cung cấp ETL, phân tích thăm dò và điện toán đồ thị lặp lại để giúp người dùng xây dựng một cách tương tác và chuyển đổi cấu trúc dữ liệu đồ thị ở quy mô lớn. Công cụ này đi kèm với một API rất linh hoạt và một bộ các thuật toán Đồ thị phân tán được tuyển chọn.
Apache Spark có các trường hợp sử dụng nào?
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:
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.
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.
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.
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.
Việc triển khai Apache Spark trên đám mây hoạt động như thế nào?
Spark là khối lượng công việc lý tưởng trên đám mây, bởi vì đám mây cung cấp hiệu năng, khả năng điều chỉnh quy mô, độ tin cậy, độ sẵn sàng và lợi ích kinh tế khi sản xuất quy mô lớn. Nghiên cứu ESG cho thấy 43% số người được hỏi coi đám mây là nền tảng triển khai chính của họ cho Spark. Những lý do hàng đầu để khách hàng xem đám mây là lợi thế đối với Spark là thời gian triển khai nhanh hơn, độ sẵn sàng cao hơn, cập nhật tính năng/chức năng thường xuyên hơn, độ linh hoạt cao hơn, độ bao phủ về mặt địa lý lớn hơn cũng như chi phí gắn liền với lượng sử dụng thực tế.
AWS cung cấp các dịch vụ gì cho Apache Spark?
Amazon EMR là nơi tốt nhất để triển khai Apache Spark trên đám mây vì nền tảng này kết hợp khả năng tích hợp và thử nghiệm nghiêm ngặt của phân phối Hadoop & Spark thương mại với quy mô, tính đơn giản và tiết kiệm chi phí của đám mây. Nền tảng cho phép bạn khởi chạy các cụm Spark trong vài phút mà không cần cung cấp nút, thiết lập cụm, cấu hình Spark hoặc tinh chỉnh cụm. EMR cho phép bạn cung cấp một, hàng trăm hoặc hàng nghìn phiên bản điện toán trong vài phút. Bạn có thể sử dụng tính năng Tự động điều chỉnh quy mô để EMR tự động tăng quy mô theo tài nguyên cho các cụm Spark nhằm xử lý dữ liệu ở mọi kích thước và thu nhỏ khi công việc của bạn hoàn thành để tránh phải trả tiền cho dung lượng không dùng đến. Bạn có thể giảm chi phí bằng cách tuân theo điều khoản định trước và tiết kiệm tới 75% khi sử dụng Phiên bản dự trữ Amazon EC2 hoặc chạy các cụm của mình trên dung lượng điện toán AWS dự phòng và tiết kiệm tới 90% bằng cách sử dụng EC2 Spot.
Bắt đầu sử dụng Apache Spark trên AWS bằng cách tạo tài khoản ngay hôm nay.