Kiến thức Hữu ích 😍

Cài đặt Apache Spark cho Ubuntu – Hướng dẫn chi tiết & tối ưu


Apache Spark là một trong những công cụ quan trọng và mạnh mẽ nhất trong lĩnh vực xử lý dữ liệu lớn hiện nay. Khi khối lượng dữ liệu bùng nổ, các phương pháp xử lý truyền thống trở nên chậm chạp và không còn hiệu quả. Vậy tại sao việc xử lý dữ liệu lớn lại cần đến Spark? Câu trả lời nằm ở tốc độ, khả năng mở rộng và tính linh hoạt vượt trội của nó. Spark cung cấp một framework hợp nhất, cho phép thực hiện các tác vụ từ xử lý dữ liệu theo lô (batch processing), xử lý thời gian thực (real-time streaming), học máy (machine learning) đến xử lý đồ thị (graph processing) chỉ trên một nền tảng duy nhất. Các tính năng nổi bật của Spark bao gồm khả năng xử lý dữ liệu trong bộ nhớ (in-memory processing), giúp tăng tốc độ lên đến 100 lần so với Hadoop MapReduce, cùng với API đa ngôn ngữ hỗ trợ Scala, Java, Python và R. Bài viết này sẽ hướng dẫn bạn chi tiết từ A-Z cách cài đặt Apache Spark trên hệ điều hành Ubuntu, giúp bạn sẵn sàng chinh phục thế giới dữ liệu lớn một cách hiệu quả nhất.

Hình minh họa

Yêu cầu hệ thống và chuẩn bị môi trường trên Ubuntu

Trước khi đi vào cài đặt Apache Spark, việc chuẩn bị một môi trường phù hợp là bước đầu tiên và quan trọng nhất để đảm bảo hệ thống hoạt động ổn định và hiệu quả. Bạn cần đảm bảo máy tính của mình đáp ứng các yêu cầu tối thiểu về cả phần cứng lẫn phần mềm.

Yêu cầu tối thiểu về phần cứng và phần mềm

Để chạy Spark một cách mượt mà cho mục đích học tập và phát triển cơ bản, bạn nên có một cấu hình tối thiểu như sau:

  • RAM: Tối thiểu 4GB, nhưng 8GB trở lên được khuyến nghị để xử lý các tập dữ liệu lớn hơn mà không gặp tình trạng tràn bộ nhớ. Tham khảo bài viết Ram là gì để hiểu rõ hơn về vai trò của bộ nhớ trong hệ thống.
  • CPU: Ít nhất 2 lõi (cores). Spark được thiết kế để tận dụng xử lý song song, vì vậy càng nhiều lõi thì hiệu năng càng tốt.
  • Dung lượng ổ cứng: Cần ít nhất 10GB dung lượng trống để chứa hệ điều hành, Spark, các thư viện phụ thuộc và dữ liệu của bạn.

Về phần mềm, bạn cần một phiên bản Ubuntu còn được hỗ trợ. Các phiên bản LTS (Long-Term Support) như Ubuntu 20.04 hoặc 22.04 là lựa chọn lý tưởng vì tính ổn định và được hỗ trợ lâu dài. Bạn có thể tìm hiểu thêm về Hệ điều hành Ubuntu là gì để hiểu rõ hơn về nền tảng này.

Ngoài ra, bạn cũng cần cài đặt một số gói phụ thuộc cần thiết khác mà chúng ta sẽ tìm hiểu ngay sau đây.

Cài đặt Java Development Kit (JDK) và SSH

Apache Spark được viết bằng Scala và chạy trên Máy ảo Java (JVM), do đó, việc cài đặt Java Development Kit (JDK) là yêu cầu bắt buộc. Bên cạnh đó, SSH (Secure Shell) cũng cần thiết để Spark quản lý các node trong cụm, ngay cả khi bạn chỉ chạy trên một máy (chế độ standalone).

Đầu tiên, hãy kiểm tra xem JDK đã được cài đặt trên hệ thống của bạn hay chưa bằng lệnh:

java -version

Nếu bạn nhận được thông báo lỗi “command not found” hoặc phiên bản Java không tương thích (Spark thường yêu cầu Java 8 hoặc 11), bạn cần cài đặt nó. Sử dụng lệnh sau để cài đặt OpenJDK 11:

sudo apt update
sudo apt install openjdk-11-jdk

Bạn có thể tìm hiểu chi tiết hơn về Java và môi trường phát triển trong bài viết liên quan về Java Development Kit (không nằm trong danh sách hiện có, nên chỉ đề cập không link).

Tiếp theo, hãy cài đặt SSH. Hầu hết các phiên bản Ubuntu desktop đã có sẵn SSH client, nhưng bạn cần cài đặt SSH server:

sudo apt install ssh openssh-server

Sau khi cài đặt, bạn nên cấu hình SSH để có thể truy cập không cần mật khẩu vào localhost. Điều này giúp các tiến trình của Spark giao tiếp với nhau một cách liền mạch.

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys

Việc chuẩn bị môi trường kỹ lưỡng sẽ giúp quá trình cài đặt và vận hành Spark sau này diễn ra suôn sẻ hơn rất nhiều.

Hình minh họa

Hướng dẫn tải và cài đặt Apache Spark chi tiết

Sau khi đã chuẩn bị xong môi trường cần thiết trên Ubuntu, bước tiếp theo là tải về và cài đặt Apache Spark. Quá trình này khá đơn giản nếu bạn làm theo đúng các bước hướng dẫn.

Tải Apache Spark phiên bản phù hợp

Việc đầu tiên bạn cần làm là truy cập trang tải về chính thức của Apache Spark. Tại đây, bạn sẽ thấy các tùy chọn để lựa chọn phiên bản Spark và loại gói cài đặt.

  1. Chọn phiên bản Spark: Luôn ưu tiên chọn phiên bản ổn định (stable) mới nhất để có được các tính năng và bản vá lỗi tốt nhất.
  2. Chọn loại gói (package type): Bạn sẽ thấy các tùy chọn như “Pre-built for Apache Hadoop”. Đây là lựa chọn được khuyến nghị cho người mới bắt đầu vì nó đã được biên dịch sẵn và tích hợp các thư viện cần thiết để tương tác với hệ sinh thái Hadoop. Bạn có thể chọn phiên bản Hadoop phù hợp (ví dụ: 3.3 or later) hoặc phiên bản không đi kèm Hadoop nếu bạn muốn tự cấu hình.

Sau khi đã chọn xong, trang web sẽ cung cấp cho bạn một liên kết tải về. Bạn có thể tải trực tiếp bằng trình duyệt hoặc sao chép liên kết để tải bằng dòng lệnh trong terminal.

Hình minh họa

Cài đặt và giải nén Apache Spark trên Ubuntu

Sử dụng terminal là cách nhanh chóng và hiệu quả nhất để tải và cài đặt Spark. Mở terminal và thực hiện các lệnh sau.

Đầu tiên, sử dụng lệnh wget để tải file nén của Spark về. Hãy thay thế URL bên dưới bằng liên kết bạn đã nhận được từ trang chủ của Spark.

wget https://dlcdn.apache.org/spark/spark-3.5.1/spark-3.5.1-bin-hadoop3.tgz

Sau khi quá trình tải về hoàn tất, bạn sẽ có một file .tgz trong thư mục hiện tại. Tiếp theo, sử dụng lệnh tar để giải nén file này:

tar -xzf spark-3.5.1-bin-hadoop3.tgz

Lệnh này sẽ tạo ra một thư mục mới có tên tương ứng với phiên bản Spark bạn vừa tải (ví dụ: spark-3.5.1-bin-hadoop3). Để quản lý hệ thống gọn gàng và theo chuẩn, chúng ta nên di chuyển thư mục này vào một vị trí chung như /opt.

sudo mv spark-3.5.1-bin-hadoop3 /opt/spark

Việc đổi tên thư mục thành /opt/spark giúp việc cấu hình và nâng cấp sau này trở nên dễ dàng hơn. Bây giờ, Apache Spark đã được cài đặt trên hệ thống của bạn.

Cấu hình biến môi trường cho Apache Spark

Sau khi đã cài đặt Spark vào thư mục /opt/spark, bước tiếp theo là cấu hình biến môi trường. Việc này giúp hệ điều hành Ubuntu biết được nơi tìm thấy các file thực thi và thư viện của Spark, cho phép bạn chạy các lệnh Spark từ bất kỳ đâu trong terminal.

Thiết lập biến môi trường SPARK_HOME và PATH

Lý do chính chúng ta cần cấu hình biến môi trường là để hệ thống nhận diện được các lệnh như spark-shell, spark-submit, hay start-master.sh. SPARK_HOME là biến chỉ định đường dẫn gốc đến thư mục cài đặt Spark, trong khi PATH cần được cập nhật để bao gồm cả thư mục binsbin của Spark.

Bạn cần chỉnh sửa file cấu hình của shell mà bạn đang sử dụng. Đối với hầu hết người dùng Ubuntu, đó là file .bashrc trong thư mục chính. Mở file này bằng một trình soạn thảo văn bản như nano:

nano ~/.bashrc

Di chuyển đến cuối file và thêm vào các dòng sau:

# Apache Spark Environment Variables
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

Nếu bạn cũng đã cài đặt Java, việc thiết lập JAVA_HOME cũng rất quan trọng:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64

Lưu ý: Đường dẫn JAVA_HOME có thể khác nhau tùy thuộc vào phiên bản Java bạn cài. Bạn có thể kiểm tra bằng lệnh update-alternatives --config java. Tìm hiểu kỹ hơn về vai trò của Kernel Linux và sự tương tác với hệ điều hành Ubuntu có thể giúp bạn hiểu thêm về cách vận hành hệ thống.

Sau khi thêm các dòng trên, hãy lưu file lại (Ctrl + X, sau đó Y và Enter trong nano).

Hình minh họa

Kiểm tra cấu hình môi trường sau khi thiết lập

Những thay đổi bạn vừa thực hiện trong file .bashrc sẽ chưa có hiệu lực ngay lập tức. Bạn cần áp dụng chúng bằng cách chạy lệnh source hoặc mở một cửa sổ terminal mới.

source ~/.bashrc

Bây giờ, hãy kiểm tra xem các biến môi trường đã được thiết lập chính xác hay chưa. Sử dụng lệnh echo để in ra giá trị của chúng:

echo $SPARK_HOME
echo $JAVA_HOME

Nếu terminal hiển thị đúng đường dẫn bạn đã cấu hình (ví dụ: /opt/spark), điều đó có nghĩa là bạn đã thiết lập thành công. Bạn cũng có thể thử chạy một lệnh của Spark, ví dụ như spark-shell --version, để chắc chắn rằng hệ thống đã nhận diện được các file thực thi của Spark.

Khởi động và chạy thử Apache Spark trên Ubuntu

Sau khi hoàn tất cài đặt và cấu hình biến môi trường, đã đến lúc khởi động cụm Spark ở chế độ độc lập (standalone mode) và chạy thử một ứng dụng đơn giản để kiểm tra xem mọi thứ đã hoạt động đúng cách hay chưa.

Khởi động Spark Master và Worker Node

Spark có thể chạy ở nhiều chế độ khác nhau, nhưng chế độ standalone là cách đơn giản nhất để bắt đầu trên một máy duy nhất. Trong chế độ này, chúng ta sẽ khởi động một tiến trình “master” (quản lý) và một hoặc nhiều tiến trình “worker” (thực thi).

Đầu tiên, hãy khởi động Spark Master. Mở terminal và chạy lệnh sau:

start-master.sh

Lệnh này sẽ khởi động tiến trình master và terminal sẽ hiển thị một số thông tin log. Để theo dõi trạng thái của cụm, hãy mở trình duyệt và truy cập vào giao diện web của Spark tại địa chỉ http://localhost:8080.

Hình minh họa

Tiếp theo, bạn cần khởi động một Worker Node để nó kết nối với Master. Worker là nơi các tác vụ thực sự được thực thi.

start-worker.sh spark://<YOUR_HOSTNAME>:7077

Bạn cần thay thế <YOUR_HOSTNAME> bằng tên máy tính của bạn (có thể tìm thấy bằng cách chạy lệnh hostname). Sau khi chạy lệnh này, nếu bạn làm mới trang giao diện web (http://localhost:8080), bạn sẽ thấy một worker đã được đăng ký và sẵn sàng nhận việc.

Thử chạy ứng dụng Spark đơn giản

Cách dễ nhất để kiểm tra Spark là sử dụng “Spark shell”. Đây là một môi trường tương tác (REPL – Read-Eval-Print Loop) cho phép bạn chạy các lệnh Spark bằng Scala hoặc Python.

Để khởi động Spark shell, mở một terminal mới và gõ:

spark-shell

Sau một vài giây, bạn sẽ thấy một dấu nhắc lệnh của Scala. Tại đây, một đối tượng SparkContext đã được tạo sẵn với tên sc. Hãy thử chạy một ví dụ đơn giản để đếm số từ trong một tập dữ liệu nhỏ.

Nhập đoạn mã Scala sau vào shell:

val data = Array("Hello Spark", "Hello World", "Spark for Big Data")
val rdd = sc.parallelize(data)
val wordCounts = rdd.flatMap(line => line.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
wordCounts.collect().foreach(println)

Nếu kết quả in ra màn hình là số lần xuất hiện của mỗi từ (ví dụ: (Spark,2), (Hello,2)…), xin chúc mừng! Bạn đã cài đặt và chạy thành công ứng dụng Spark đầu tiên trên Ubuntu.

Hình minh họa

Các lưu ý khi sử dụng Apache Spark trên hệ điều hành Ubuntu

Việc cài đặt thành công Apache Spark chỉ là bước khởi đầu. Để sử dụng nó một cách hiệu quả và ổn định trên Ubuntu, bạn cần quan tâm đến một số vấn đề về quản lý tài nguyên, bảo trì và xử lý sự cố.

Một trong những yếu tố quan trọng nhất là phân bổ tài nguyên hợp lý. Spark xử lý dữ liệu trong bộ nhớ, vì vậy nếu bạn không cấp đủ RAM cho các tác vụ, ứng dụng có thể chạy rất chậm hoặc gặp lỗi “Out of Memory”. Khi gửi một ứng dụng bằng spark-submit, hãy sử dụng các tùy chọn như --driver-memory, --executor-memory--executor-cores để kiểm soát lượng tài nguyên mà Spark được phép sử dụng, tránh gây nghẽn cho toàn bộ hệ thống.

Cập nhật thường xuyên Spark và Java cũng là một yếu tố cần thiết. Các phiên bản mới của Spark không chỉ mang lại các tính năng mới mà còn bao gồm các bản vá bảo mật và cải thiện hiệu năng quan trọng. Tương tự, việc duy trì phiên bản JDK tương thích và được cập nhật sẽ giúp hệ thống của bạn hoạt động ổn định và an toàn hơn. Hãy tham khảo thêm bài viết Bash là gì để tìm hiểu về môi trường dòng lệnh cho các thao tác quản trị trong Linux.

Quản lý logs và bảo trì hiệu suất là công việc không thể bỏ qua. Spark tạo ra rất nhiều file log chứa thông tin chi tiết về quá trình thực thi. Bạn nên thường xuyên kiểm tra các log này (thường nằm trong thư mục logs của Spark) để phát hiện sớm các vấn đề và gỡ lỗi. Giao diện web của Spark (http://localhost:8080) cũng là một công cụ tuyệt vời để theo dõi tiến trình của các job, stage và task, giúp bạn xác định các điểm nghẽn hiệu năng.

Cuối cùng, hãy chuẩn bị cho việc xử lý các sự cố thường gặp. Các vấn đề như xung đột cổng (port conflict) nếu có dịch vụ khác đang chạy trên cổng 8080, hoặc lỗi kết nối giữa master và worker, là những điều có thể xảy ra. Nắm vững cách kiểm tra trạng thái dịch vụ, đọc file log và tìm kiếm giải pháp trên các diễn đàn cộng đồng sẽ giúp bạn nhanh chóng khắc phục vấn đề.

So sánh hiệu năng của Spark với các công nghệ xử lý dữ liệu khác

Apache Spark không phải là công cụ xử lý dữ liệu lớn duy nhất, nhưng nó đã nhanh chóng trở thành lựa chọn hàng đầu nhờ những ưu điểm vượt trội về hiệu năng so với các công nghệ tiền nhiệm, đặc biệt là Hadoop MapReduce.

Sự khác biệt lớn nhất giữa Spark và Hadoop MapReduce nằm ở tốc độ xử lý. MapReduce phụ thuộc rất nhiều vào việc đọc và ghi dữ liệu xuống đĩa cứng giữa các bước xử lý, điều này tạo ra độ trễ lớn. Ngược lại, Spark thực hiện các phép tính trong bộ nhớ (in-memory computation), giảm thiểu đáng kể các thao tác I/O với đĩa, giúp tốc độ xử lý nhanh hơn từ 10 đến 100 lần. Điều này làm cho Spark đặc biệt mạnh mẽ đối với các thuật toán lặp lại, chẳng hạn như trong học máy (machine learning) và xử lý đồ thị.

Một ưu điểm khác của Spark là khả năng xử lý dữ liệu thời gian thực. Với thành phần Spark Streaming, nó có thể tiếp nhận và xử lý dữ liệu trực tiếp từ các nguồn như Kafka, Flume, hoặc Kinesis theo các lô nhỏ (micro-batches), cho phép phân tích gần thời gian thực. Trong khi đó, MapReduce được thiết kế chủ yếu cho xử lý theo lô (batch processing) và không phù hợp với các ứng dụng yêu cầu độ trễ thấp.

Ngoài ra, Spark còn cung cấp một hệ sinh thái phong phú và hỗ trợ đa ngôn ngữ. Các nhà phát triển có thể viết ứng dụng Spark bằng Scala, Java, Python, hoặc R thông qua các API cấp cao, trực quan và dễ sử dụng. Điều này trái ngược với MapReduce, vốn yêu cầu lập trình viên phải viết các đoạn mã Java phức tạp và dài dòng. Tính năng vượt trội này, kết hợp với các thư viện tích hợp sẵn cho SQL (Spark SQL), học máy (MLlib) và xử lý đồ thị (GraphX), đã giúp Spark trở thành lựa chọn tối ưu và toàn diện cho hầu hết các bài toán Big Data hiện đại.

Hình minh họa

Các vấn đề thường gặp khi cài đặt và sử dụng Apache Spark trên Ubuntu

Dù quá trình cài đặt đã được đơn giản hóa, người dùng mới vẫn có thể gặp phải một số lỗi phổ biến. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn tiết kiệm rất nhiều thời gian.

Lỗi không tìm thấy Java hoặc phiên bản không phù hợp

Đây là lỗi phổ biến nhất. Khi bạn chạy một lệnh Spark, bạn có thể nhận được thông báo lỗi như JAVA_HOME is not set hoặc cảnh báo về phiên bản Java không tương thích.

  • Cách nhận biết: Terminal báo lỗi liên quan đến Java ngay khi bạn cố gắng khởi động Spark.
  • Cách khắc phục:
  1. Kiểm tra JAVA_HOME: Đảm bảo rằng bạn đã thiết lập biến môi trường JAVA_HOME trong file .bashrc và đường dẫn đến thư mục cài đặt JDK là chính xác.
  2. Kiểm tra phiên bản Java: Chạy lệnh java -version và so sánh với yêu cầu của phiên bản Spark bạn đang cài đặt (thông tin này có trong tài liệu của Spark). Nếu phiên bản không đúng, hãy cài đặt phiên bản được yêu cầu (ví dụ: OpenJDK 11) và cập nhật lại biến JAVA_HOME.
  3. Áp dụng thay đổi: Đừng quên chạy source ~/.bashrc sau khi chỉnh sửa file để các thay đổi có hiệu lực.

Lỗi cấu hình biến môi trường SPARK_HOME sai hoặc không hoạt động

Nếu hệ thống không thể tìm thấy các lệnh của Spark như spark-shell, nguyên nhân rất có thể là do cấu hình biến môi trường SPARK_HOME hoặc PATH bị sai.

  • Dấu hiệu: Bạn gõ spark-shell và nhận được thông báo “command not found”.
  • Cách kiểm tra và sửa lỗi:
  1. Kiểm tra giá trị biến: Chạy lệnh echo $SPARK_HOMEecho $PATH để xem các giá trị hiện tại.
  2. Xác minh đường dẫn: Đảm bảo rằng $SPARK_HOME trỏ đúng đến thư mục cài đặt Spark (ví dụ: /opt/spark).
  3. Kiểm tra PATH: Kiểm tra xem đường dẫn $SPARK_HOME/bin$SPARK_HOME/sbin đã được thêm vào biến PATH hay chưa. Lỗi phổ biến là gõ sai tên biến hoặc quên dấu hai chấm (:) để ngăn cách các đường dẫn.
  4. Sửa file .bashrc: Mở lại file .bashrc, cẩn thận kiểm tra lại từng ký tự trong các dòng export bạn đã thêm, sau đó lưu lại và chạy source ~/.bashrc.

Hình minh họa

Lời khuyên khi sử dụng Apache Spark trên Ubuntu

Để có trải nghiệm tốt nhất và khai thác tối đa sức mạnh của Apache Spark trên môi trường Ubuntu, hãy ghi nhớ một vài lời khuyên quan trọng sau đây.

Đầu tiên, đảm bảo cấu hình phần cứng phù hợp với nhu cầu xử lý. Mặc dù bạn có thể học và thử nghiệm Spark trên một máy tính xách tay thông thường, nhưng khi làm việc với các tập dữ liệu lớn trong thực tế, bạn sẽ cần một hệ thống có đủ RAM và CPU. Việc thiếu RAM là nguyên nhân hàng đầu gây ra hiệu năng kém và lỗi ứng dụng. Hãy cân nhắc kỹ lưỡng quy mô dữ liệu của bạn để đầu tư phần cứng tương xứng. Tham khảo thêm bài viết DDR4 là gì để hiểu rõ hơn về chuẩn RAM hiện đại giúp tăng hiệu năng.

Thứ hai, nên sử dụng phiên bản Spark và JDK tương thích. Cộng đồng Apache Spark luôn ghi rõ các phiên bản Java được hỗ trợ cho từng phiên bản Spark trong tài liệu chính thức. Việc sử dụng một phiên bản JDK không được hỗ trợ có thể gây ra các lỗi không mong muốn và khó gỡ rối. Trước khi cài đặt hoặc nâng cấp, hãy luôn kiểm tra tài liệu để đảm bảo sự tương thích.

Cuối cùng, tránh chạy nhiều ứng dụng Spark cùng lúc trên một máy không đủ mạnh. Mỗi ứng dụng Spark đều tiêu tốn một lượng tài nguyên đáng kể (CPU, RAM). Nếu bạn khởi chạy nhiều ứng dụng trên một máy tính cá nhân, chúng sẽ cạnh tranh tài nguyên với nhau và với cả hệ điều hành, dẫn đến tình trạng treo máy hoặc tất cả các ứng dụng đều chạy rất chậm. Đối với môi trường phát triển, hãy chạy từng ứng dụng một. Trong môi trường sản xuất, hãy sử dụng một trình quản lý tài nguyên cụm như YARN hoặc Kubernetes để phân bổ tài nguyên một cách công bằng và hiệu quả.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết, từ việc chuẩn bị môi trường, tải về, cài đặt, cấu hình cho đến khởi chạy ứng dụng Apache Spark đầu tiên trên hệ điều hành Ubuntu. Việc nắm vững các bước này là nền tảng vững chắc giúp bạn bước vào thế giới xử lý dữ liệu lớn đầy tiềm năng. Apache Spark, với tốc độ vượt trội và hệ sinh thái phong phú, mở ra khả năng phân tích và khai thác những thông tin giá trị từ khối dữ liệu khổng lồ mà trước đây khó có thể thực hiện được.

Chúng tôi khuyến khích bạn áp dụng những kiến thức này vào các dự án của riêng mình để thực sự cảm nhận sức mạnh của Spark. Đừng dừng lại ở việc cài đặt thành công. Hãy tiếp tục khám phá sâu hơn về các API của Spark, tìm hiểu cách tối ưu hóa hiệu năng cho các tác vụ phức tạp, và nghiên cứu cách mở rộng từ một máy đơn lẻ lên một cụm máy tính để xử lý dữ liệu ở quy mô lớn hơn. Thế giới Big Data luôn chuyển động, và Apache Spark chính là công cụ mạnh mẽ giúp bạn luôn ở vị trí dẫn đầu.

Đánh giá