Làm chủ PySpark trên Linux: Xử lý hàng trăm GB dữ liệu với Python

Python tutorial - IT technology blog
Python tutorial - IT technology blog

Tại sao Pandas là chưa đủ cho Big Data?

Nếu bạn thường xuyên dùng Pandas để xử lý dữ liệu, chắc hẳn bạn đã từng gặp cảnh máy tính “đứng hình” khi file CSV vượt quá dung lượng RAM. Mình từng thử load một file log 20GB trên chiếc laptop 16GB RAM và kết quả là hệ thống treo cứng chỉ sau vài giây. Đây chính là giới hạn vật lý của Python thuần túy: nó chỉ chạy trên một lõi CPU và bị bó buộc bởi dung lượng RAM của máy đơn lẻ.

Apache Spark ra đời để giải quyết bài toán này. Thay vì cố nhồi nhét dữ liệu vào một chỗ, Spark chia nhỏ chúng ra để xử lý song song trên nhiều lõi CPU hoặc thậm chí là hàng trăm máy máy chủ trong một cụm (cluster).

PySpark đóng vai trò là thư viện Python giúp bạn điều khiển sức mạnh phân tán đó. Bạn không cần học Java hay Scala phức tạp. Chỉ với cú pháp Python quen thuộc, bạn có thể xử lý hàng tỷ dòng dữ liệu một cách mượt mà.

Cài đặt PySpark trên môi trường Linux

Để PySpark vận hành ổn định trên Ubuntu hoặc CentOS, chúng ta cần thiết lập môi trường Java chuẩn. Spark không chạy trực tiếp trên Python mà vận hành thông qua máy ảo Java (JVM).

1. Cài đặt Java (JRE/JDK)

Kinh nghiệm thực tế cho thấy Spark hoạt động ổn định nhất với Java 8 hoặc 11. Đừng vội cài các bản mới nhất như Java 21 vì rất dễ phát sinh lỗi tương thích thư viện.

sudo apt update
sudo apt install openjdk-11-jdk -y
# Kiểm tra lại phiên bản
java -version

2. Tải và thiết lập Apache Spark

Bạn nên chọn bản Spark đã được build sẵn cho Hadoop. Ở ví dụ này, mình sử dụng bản 3.5.0, một phiên bản khá ổn định hiện nay:

wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
tar -xvzf spark-3.5.0-bin-hadoop3.tgz
sudo mv spark-3.5.0-bin-hadoop3 /opt/spark

3. Cài đặt thư viện PySpark qua pip

Dù đã có bộ source Spark trong máy, bạn vẫn cần cài thêm package để Python có thể gọi được các hàm của Spark:

pip install pyspark

Cấu hình biến môi trường: Bước quan trọng nhất

Nhiều bạn cài xong nhưng gõ lệnh pyspark máy lại báo “command not found”. Lỗi này xuất phát từ việc hệ điều hành chưa biết Spark và Java nằm ở đâu.

Hãy mở file cấu hình shell của bạn (.bashrc hoặc .zshrc):

nano ~/.bashrc

Thêm các dòng sau vào cuối file để định nghĩa đường dẫn:

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export PYSPARK_PYTHON=python3

Lưu lại và kích hoạt cấu hình mới bằng lệnh:

source ~/.bashrc

Viết script PySpark đầu tiên: Phân tích dữ liệu thực tế

Hãy thử giải quyết bài toán đếm từ trong một tập dữ liệu lớn. Đây là nền tảng của các hệ thống tìm kiếm hay phân tích hành vi người dùng.

Tạo file pyspark_demo.py:

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, split, col

# Khởi tạo SparkSession - "Trái tim" của ứng dụng
spark = SparkSession.builder \
    .appName("LogAnalysisApp") \
    .getOrCreate()

# Trong thực tế, bạn sẽ dùng spark.read.csv("path/to/bigfile.csv")
data = [("PySpark xử lý dữ liệu rất nhanh",), 
        ("Linux là môi trường tuyệt vời cho Big Data",), 
        ("Python và Spark là cặp bài trùng",)]

df = spark.createDataFrame(data, ["content"])

# Tách câu thành các từ riêng biệt
words_df = df.select(explode(split(col("content"), " ")).alias("word"))

# Thống kê tần suất xuất hiện
word_counts = words_df.groupby("word").count().orderBy("count", ascending=False)

word_counts.show()
spark.stop()

Thực thi script bằng lệnh chuyên dụng của Spark:

spark-submit pyspark_demo.py

Giám sát hiệu năng với Spark Web UI

Làm việc với dữ liệu hàng TB mà không biết hệ thống đang chạy ra sao là một sai lầm lớn. Khi script đang chạy, hãy mở trình duyệt và truy cập http://localhost:4040.

Tại đây, bạn cần chú ý đặc biệt đến tab Stages. Nếu bạn thấy một task chạy mất 20 phút trong khi các task khác chỉ mất vài giây, đó là dấu hiệu của “Data Skew” (lệch dữ liệu). Hiện tượng này xảy ra khi một lõi CPU phải gánh 90% khối lượng công việc, khiến toàn bộ hệ thống bị kéo chậm lại.

Ngoài ra, nếu muốn thử nghiệm nhanh, bạn chỉ cần gõ pyspark vào terminal. Nó sẽ mở ra một môi trường tương tác (REPL) giống như Jupyter Notebook nhưng dành riêng cho Big Data, cực kỳ hữu ích để debug các đoạn code nhỏ trước khi đưa vào script chính.

Xử lý Big Data không quá xa vời nếu bạn nắm vững cách Spark phân phối công việc. Hy vọng hướng dẫn này giúp bạn tự tin triển khai các dự án dữ liệu lớn trên nền tảng Linux.

Share: