Apache Spark là một framework mã nguồn mở để xử lý song song các tác vụ dữ liệu lớn trên các hệ thống được phân cụm. Đây là một trong những framework xử lý phân tán được sử dụng rộng rãi nhất trên thế giới.
Apache Spark là gì?
Song song với sự gia tăng vượt bậc của dữ liệu ngày nay trên tất cả các lĩnh vực, Apache Spark đã trở thành một trong những framework phổ biến nhất để xử lý dữ liệu phân tán quy mô lớn, chạy trên hàng triệu máy chủ, cả tại chỗ và trên đám mây.
Apache Spark là một công cụ phân tích nhanh, đa năng để xử lý dữ liệu quy mô lớn chạy trên YARN, Apache Mesos, Kubernetes, nằm độc lập hoặc trên dịch vụ đám mây. Với các toán tử và thư viện cấp cao dành cho SQL, xử lý luồng (stream processing), học máy và xử lý đồ thị, Spark giúp dễ dàng xây dựng các ứng dụng song song trong Scala, Python, R hoặc SQL bằng cách sử dụng interactive shell, notebook hoặc ứng dụng đóng gói (packaged applications). Spark hỗ trợ phân tích theo batch và tương tác bằng cách sử dụng mô hình lập trình chức năng và công cụ truy vấn liên quan Catalyst, chuyển đổi công việc thành kế hoạch và lịch hoạt động bên trong truy vấn trên các node trong một cụm.
Ngoài công cụ xử lý dữ liệu Spark, còn có các thư viện dành cho SQL và DataFrames, học máy, GraphX, tính toán biểu đồ và xử lý luồng. Các thư viện này có thể được sử dụng cùng nhau trên các tập dữ liệu lớn từ nhiều nguồn dữ liệu khác nhau, chẳng hạn như HDFS, Alluxio, Apache Cassandra, Apache HBase hoặc Apache Hive.
Các thành phần Apache Spark
Tại sao cần đến Apache Spark?
Apache Spark tiếp tục nỗ lực phân tích dữ liệu lớn mà Apache Hadoop đã bắt đầu từ hơn 15 năm trước và đã trở thành framework hàng đầu để xử lý dữ liệu phân tán ở quy mô lớn.
Việc sử dụng Hadoop ngày càng tăng cùng với sự phổ biến của phân tích dữ liệu lớn vào đầu những năm 2010, các hạn chế về hiệu suất của Hadoop MapReduce đã trở thành một điểm yếu, bị tắc nghẽn bởi mô hình xuất kết quả checkpoint vào ổ lưu trữ. Đồng thời việc áp dụng Hadoop đã bị cản trở bởi mô hình lập trình cấp thấp của MapReduce.
Apache Spark bắt đầu như một dự án nghiên cứu tại UC Berkeley trong AMPLab, với mục tiêu duy trì các lợi ích của framework xử lý có khả năng mở rộng, phân tán, có khả năng chịu lỗi của MapReduce, đồng thời hiệu quả hơn và dễ sử dụng hơn. Spark hiệu quả hơn MapReduce đối với các data pipelines và thuật toán lặp vì nó sử dụng các tác vụ nhẹ đa luồng. Lưu trữ dữ liệu trong bộ nhớ qua các lần lặp, loại bỏ nhu cầu ghi vào đĩa giữa các giai đoạn. Spark sử dụng DataFrame phân tán có khả năng chịu lỗi để nâng cao hiệu suất song song và giúp dễ sử dụng với SQL.
Spark là nền tảng phần mềm ở cấp cao nhất vào năm 2014 đến nay, hàng trăm nghìn kỹ sư dữ liệu và nhà khoa học đang làm việc với Spark trên hơn 16.000 doanh nghiệp và tổ chức. Một lý do khiến Spark chiếm ưu thế hơn Hadoop là vì quá trình xử lý dữ liệu trong bộ nhớ có thể hoàn thành một số tác vụ nhanh hơn tới 100 lần so với MapReduce. Những khả năng này được tạo ra trong một cộng đồng mở bởi hơn 1.000 người đóng góp trên hơn 250 công ty. Những người sáng lập Databricks đã bắt đầu nỗ lực và chỉ riêng nền tảng của họ đã tạo ra hơn 1 triệu máy ảo mỗi ngày để phân tích dữ liệu.
Tại sao hiệu suất của Spark tốt hơn với GPU?
Với mỗi bản phát hành Spark, các cải tiến đã được triển khai để giúp lập trình dễ dàng hơn và thực thi nhanh hơn. Apache Spark 3.0 tiếp tục xu hướng này với những cải tiến nhằm cải thiện hiệu suất Spark SQL và khả năng tăng tốc bởi GPU của NVIDIA.
Bộ xử lý đồ họa (GPU) phổ biến nhờ mức giá thấp và đang giải quyết các vấn đề hiệu suất điện toán ngày nay bằng cách tăng tốc các máy chủ đa nhân để xử lý song song. CPU gồm một số core được tối ưu hóa để xử lý nối tiếp. Nhưng GPU có kiến trúc song song lớn bao gồm hàng nghìn core nhỏ hơn, hiệu quả hơn được thiết kế để xử lý nhiều tác vụ cùng một lúc. Chúng có khả năng xử lý dữ liệu nhanh hơn nhiều so với cấu hình chỉ có CPU. GPU đã góp phần thúc đẩy sự phát triển của đào tạo mô hình học sâu (DL) và học máy(ML) trong vài năm qua. Tuy nhiên, 80% thời gian của nhà khoa học dữ liệu vẫn dành cho việc xử lý trước (preprocessing) dữ liệu .
Trong khi Spark tính toán trên các node dưới dạng phân vùng, trong một phân vùng, việc tính toán trước đây được thực hiện trên các core CPU. Spark đã giảm thiểu các vấn đề I/O gặp phải trong Hadoop bằng cách thêm tính năng xử lý dữ liệu trong bộ nhớ, nhưng giờ đây, việc nghẽn cổ chai đã chuyển từ thành phần I/O sang thành phần xử lý cho số lượng ứng dụng ngày càng tăng. Vấn đề về hiệu suất này có thể được khắc phục nhờ sự kết hợp với GPU.
Để đáp ứng và vượt qua các yêu cầu về xử lý dữ liệu,NVIDIA đã cộng tác với cộng đồng Apache Spark để đưa GPU vào quá trình xử lý gốc của Spark thông qua việc phát hành Spark 3.0 và công cụ tăng tốc NVIDIA RAPIDS mã nguồn mở cho Spark. Lợi ích của việc cải thiện hiệu suất Spark với GPU là rất lớn:
- Quá trình xử lý dữ liệu, truy vấn và đào tạo mô hình được hoàn thành nhanh hơn, giảm thời gian đưa ra kết quả.
- Cơ sở hạ tầng được tăng tốc bởi GPU có thể được sử dụng cho cả framework Spark và ML/DL, loại bỏ nhu cầu về các cụm riêng biệt và cho phép toàn bộ quy trình truy cập vào khả năng tăng tốc GPU.
- Cần ít máy chủ hơn, giảm chi phí cơ sở hạ tầng.
Công cụ tăng tốc RAPIDS cho Apache Spark
RAPIDS là một bộ thư viện phần mềm nguồn mở và API để thực thi quy trình phân tích và khoa học dữ liệu từ đầu đến cuối hoàn toàn trên GPU, cho phép tăng tốc đáng kể, đặc biệt là trên các tập dữ liệu lớn. Được xây dựng dựa trên NVIDIA CUDA và UCX, Công cụ tăng tốc RAPIDS dành cho Apache Spark cho phép các hoạt động SQL/DataFrame được tăng tốc bởi GPU và các biến động trên Spark mà không cần thay đổi mã lập trình.
SQL/DataFrame được cải thiện
Spark 3.0 hỗ trợ các trình tối ưu hóa SQL để xử lý dữ liệu bằng cách sử dụng các tập columnar thay vì rows. Dữ liệu columnar thân thiện với GPU và tính năng này là thứ mà công cụ tăng tốc RAPIDS tích hợp để tăng tốc các toán tử SQL và DataFrame. Với trình tăng tốc RAPIDS, trình tối ưu hóa truy vấn Catalyst đã được sửa đổi để xác định các toán tử trong gói truy vấn có thể được tăng tốc bằng API RAPIDS, chủ yếu là ánh xạ một-một và lên lịch cho các toán tử đó trên GPU trong cụm Spark khi thực thi kế hoạch truy vấn.
Tăng tốc các hoạt động Shuffle
Spark thực hiện việc sắp xếp, phân nhóm hoặc nối dữ liệu theo giá trị phải di chuyển dữ liệu giữa các phân vùng khi tạo DataFrame mới từ DataFrame hiện có giữa các giai đoạn. Quá trình này được gọi là Shuffle và bao gồm I/O với ổ lưu trữ, tuần tự hóa dữ liệu và I/O mạng. Việc triển khai xáo RAPIDS Accelerator shuffle mới sử dụng UCX để tối ưu hóa việc truyền dữ liệu GPU, duy trì càng nhiều dữ liệu trên GPU càng tốt. Tìm ra con đường nhanh nhất để di chuyển dữ liệu giữa các node bằng cách sử dụng tốt nhất các tài nguyên phần cứng sẵn có, bao gồm cả việc bỏ qua CPU để thực hiện chuyển GPU sang bộ nhớ GPU giữa các node.
Accelerator-aware Scheduling (Lập lịch có sự hỗ trợ của bộ tăng tốc)
Là một phần sáng kiến quan trọng của Spark nhằm hợp nhất tốt việc học sâu và xử lý dữ liệu trên Spark, GPU hiện là tài nguyên có thể lập lịch trình trong Apache Spark 3.0. Điều này cho phép Spark lên lịch cho bộ thực thi với số lượng GPU được chỉ định và cho phép người dùng chỉ định số lượng GPU mà mỗi tác vụ yêu cầu. Spark chuyển các yêu cầu tài nguyên này đến trình quản lý cụm cơ bản, Kubernetes, YARN hoặc Standalone. Người dùng cũng có thể định cấu hình tập lệnh khám phá có thể phát hiện GPU nào được người quản lý cụm chỉ định. Điều này giúp đơn giản hóa đáng kể việc chạy các ứng dụng ML cần GPU, vì người dùng trước đây phải giải quyết vấn đề thiếu lập lịch GPU trong các ứng dụng Spark.
XGBoost được cải thiện
XGBoos có khả năng mở rộng, phân bổ gradient-boosted với thư viện ML. Là thư viện ML hàng đầu cho việc phân tích hồi quy, phân loại và xếp hạng. Nhóm RAPIDS hợp tác chặt chẽ với tổ chức XGBoost Common Machine Learning (DMLC) và XGBoost hiện bao gồm khả năng tăng tốc GPU một cách liền mạch, có thể cài đặt sẵn. Spark 3.0 XGBoost hiện cũng được tích hợp với Rapids Accelerator cải thiện hiệu suất, độ chính xác và chi phí với khả năng tăng tốc GPU của các hoạt động Spark SQL/DataFrame, tăng tốc GPU trong thời gian đào tạo XGBoost và sử dụng bộ nhớ GPU hiệu quả với các tính năng được lưu trữ tối ưu trong bộ nhớ.
Với Spark 3.0, giờ đây bạn có thể có một quy trình duy nhất, từ nhập dữ liệu đến chuẩn bị dữ liệu cho đến đào tạo mô hình trên cụm hỗ trợ với GPU
Khoa học dữ liệu toàn diện, được tăng tốc với NVIDIA GPU
RAPIDS trừu tượng hóa sự phức tạp của khoa học dữ liệu được cải thiện bằng cách xây dựng và tích hợp với các hệ sinh thái phân tích phổ biến như PyData và Apache Spark, cho phép người dùng thấy được lợi ích ngay lập tức. So với các triển khai dựa trên CPU tương tự, RAPIDS mang lại cải tiến hiệu suất gấp 50 lần cho các quy trình phân tích dữ liệu cổ điển và học máy (ML) trên quy mô lớn, giúp giảm đáng kể tổng chi phí sở hữu (TCO) cho các hoạt động khoa học dữ liệu lớn.
Các ví dụ thực tế về việc tăng tốc quá trình học máy từ đầu đến cuối với Spark
Adobe
Dựa trên quan hệ đối tác chiến lược AI với NVIDIA, Adobe là một trong những công ty đầu tiên hợp tác với bản phát hành của Spark 3.0 chạy trên Databricks. Tại hội nghị NVIDIA GTC, Adobe Intelligence Services đã cung cấp kết quả đánh giá về giải pháp email thông minh Spark 3.0 và XGBoost dựa trên GPU để tối ưu hóa việc gửi thông điệp tiếp thị. Trong các thử nghiệm ban đầu, Adobe đã đạt được mức cải thiện hiệu suất gấp 7 lần và tiết kiệm 90% chi phí. Hiệu suất đạt được trong Spark 3.0 nâng cao độ chính xác của mô hình bằng cách cho phép các nhà khoa học đào tạo các mô hình với bộ dữ liệu lớn hơn và đào tạo lại mô hình thường xuyên hơn. Điều này giúp xử lý hàng terabyte dữ liệu mới mỗi ngày, điều này rất quan trọng đối với các nhà khoa học dữ liệu hỗ trợ hệ thống đề xuất trực tuyến hoặc phân tích dữ liệu nghiên cứu mới. Ngoài ra, xử lý nhanh hơn có nghĩa là cần ít tài nguyên phần cứng hơn để mang lại kết quả, giúp tiết kiệm chi phí đáng kể. Khi được hỏi về những tiến bộ này, William Yan, giám đốc cấp cao về Machine Learning tại Adobe cho biết: “Chúng tôi nhận thấy hiệu suất nhanh hơn đáng kể với Spark 3.0 được tăng tốc bởi NVIDIA so với chạy Spark với CPU. Với những mức tăng hiệu suất GPU, những khả năng hoàn toàn mới sẽ mở ra để nâng cao các tính năng do AI điều khiển trong bộ ứng dụng Adobe Experience Cloud.”
Verizon media
Verizon Media xây dựng quy trình Spark ML phân tán để đào tạo mô hình XGBoost và điều chỉnh siêu tham số trên cụm dựa với GPU. Verizon Media đã đạt được mức cải thiện hiệu suất gấp 3 lần so với giải pháp XGBoost chỉ có CPU, nâng cao khả năng thực hiện tìm kiếm siêu tham số nhằm tìm ra siêu tham số tốt nhất cho các mô hình được tối ưu hóa và độ chính xác tối đa.
Uber
Uber áp dụng học sâu trong toàn bộ hoạt động kinh doanh, từ nghiên cứu xe tự lái đến dự báo hành trình di chuyển và ngăn chặn gian lận. Uber đã phát triển Horovod , một framework đào tạo học sâu phân tán cho TensorFlow, Keras, PyTorch và Apache MXNet, để giúp tăng tốc các dự án học sâu dễ dàng hơn với GPU và cách tiếp cận song song dữ liệu với đào tạo phân tán. Horvod hiện đã hỗ trợ Spark 3.0 với tính năng lập lịch GPU và lớp KerasEstimator mới sử dụng công cụ ước tính Spark với Spark ML Pipelines để tích hợp tốt hơn và dễ sử dụng. Điều này cho phép các mô hình TensorFlow và PyTorch được đào tạo trực tiếp trên Spark DataFrames, tận dụng khả năng của Horovod để mở rộng song song tới hàng trăm GPU mà không cần bất kỳ mã chuyên dụng nào để đào tạo phân tán. Với các API lập lịch và xử lý theo cột nhận biết trình tăng tốc mới trong Apache Spark 3.0, công việc ETL sản xuất có thể chuyển dữ liệu cho Horovod để chạy chương trình đào tạo học sâu phân tán với GPU trong cùng một quy trình.
Tại sao Apache Spark lại quan trọng đối với…
Spark 3.0 đánh dấu một cột mốc quan trọng để các nhà khoa học dữ liệu và kỹ sư dữ liệu cộng tác về phân tích và AI, vì các hoạt động ETL hiện được tăng tốc trong khi các ứng dụng ML và DL tận dụng cùng cơ sở hạ tầng GPU.
Các nhóm nghiên cứu Khoa học dữ liệu
Sự kỳ diệu của khoa học dữ liệu bị cản trở bởi nhiều nhiệm vụ đơn giản cần thiết để sắp xếp dữ liệu thành dạng có thể sử dụng được. Phần lớn quá trình đó liên quan đến việc sắp xếp dữ liệu phi cấu trúc như mã ZIP, ngày tháng và số SKU trên hàng triệu hoặc hàng tỷ bản ghi. Tập dữ liệu càng lớn thì quá trình càng mất nhiều thời gian. Theo một số ước tính, việc chuẩn bị dữ liệu có thể tiêu tốn 80% thời gian của nhà khoa học dữ liệu.
Hadoop là một công nghệ đột phá để thực hiện phân tích dữ liệu trên quy mô lớn, giúp các nhà khoa học dữ liệu có thể thực hiện các truy vấn đối với các kho dữ liệu rất lớn. Tuy nhiên, thời gian xử lý dài, đặc biệt khi cần quét lặp lại trên tập dữ liệu hiện có, như trường hợp thường xảy ra trong việc sắp xếp và khám phá dữ liệu.
Spark được xây dựng có mục đích cho các truy vấn lặp lại trên các tập dữ liệu lớn. Với tốc độ nhanh hơn tới 100 lần so với Hadoop/MapReduce, ngay lập tức gây ấn tượng với các nhà khoa học dữ liệu. Spark cũng có thể dễ dàng đáp ứng các ngôn ngữ phát triển theo định hướng khoa học dữ liệu như Python, R và Scala. Bởi vì hầu hết các nhà khoa học dữ liệu thích làm việc với một công cụ lập trình duy nhất nên Spark có thể dễ dàng thích ứng với nhu cầu của từng người dùng.
Spark SQL giới thiệu một khái niệm trừu tượng hóa dữ liệu được gọi là DataFrames hỗ trợ cả dữ liệu có cấu trúc và phi cấu trúc có thể được thao tác bằng nhiều ngôn ngữ khác nhau. Nó cho phép ngôn ngữ SQL quen thuộc được áp dụng cho dữ liệu phi cấu trúc theo những cách chưa từng có trước đây. Spark ML cung cấp một bộ API cấp cao, được xây dựng dựa trên DataFrames để xây dựng các quy trình hoặc quy trình công việc ML. Điều này cung cấp khả năng mở rộng xử lý dữ liệu được phân vùng với sự dễ dàng của SQL để thao tác dữ liệu.
Đội ngũ kỹ sư dữ liệu
Các kỹ sư dữ liệu thu hẹp khoảng cách giữa các nhà khoa học và nhà phát triển dữ liệu. Trong khi các nhà khoa học dữ liệu chọn loại dữ liệu và thuật toán phù hợp để giải quyết vấn đề thì các kỹ sư dữ liệu làm việc với các nhà khoa học và nhà phát triển dữ liệu về mọi thứ liên quan đến việc tạo đường dẫn dữ liệu để chuyển đổi, lưu trữ và phân tích trích xuất dữ liệu nhằm xây dựng các ứng dụng phân tích dữ liệu lớn.
Spark loại bỏ sự phức tạp khỏi phương trình lưu trữ. Vì framework này có thể hoạt động với hầu hết mọi bộ lưu trữ cơ bản, bao gồm hệ thống tệp phân tán Hadoop, nên đây là một framework linh hoạt hơn Hadoop và có khả năng thích ứng cao hơn với sự kết hợp giữa cơ sở hạ tầng đám mây và tại chỗ. Spark cũng có thể dễ dàng kết hợp các nguồn dữ liệu phát trực tuyến, biến nó thành một công cụ thích hợp cho thế hệ ứng dụng internet vạn vật.
Bài viết liên quan