Giới thiệu dự án

Sự bùng nổ của mạng xã hội trong kỷ nguyên số đã biến Facebook thành một trung tâm tương tác khổng lồ với hơn 2,8 tỷ người dùng hoạt động hàng tháng (MAU) trên toàn cầu. Mỗi giây, hàng trăm nghìn tương tác như thích (like), bình luận (comment), chia sẻ (share) và đánh giá sản phẩm được tạo ra, hình thành nên nguồn dữ liệu khổng lồ (Big Data) với đầy đủ các đặc trưng 5V: Khối lượng (Volume), Tốc độ (Velocity), Mức độ đa dạng (Variety), Tính xác thực (Veracity) và Giá trị (Value).

Tuy nhiên, các doanh nghiệp và nhà nghiên cứu thị trường hiện nay đang đối mặt với bài toán nan giải: làm thế nào để thu thập, xử lý và phân tích kịp thời khối lượng dữ liệu phi cấu trúc khổng lồ này để đo lường chính xác mức độ quan tâm của khách hàng đối với từng dòng sản phẩm cụ thể. Các phương pháp thống kê thủ công hoặc sử dụng hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) truyền thống đã bộc lộ rõ sự bất cập khi gặp nghẽn cổ chai về hiệu năng truy vấn, thời gian xử lý trễ hàng tuần và không thể thực thi các tác vụ khai phá dữ liệu nâng cao trên quy mô lớn.

Đồ án học phần "Thống kê sự quan tâm của người dùng Facebook đối với một sản phẩm" do nhóm sinh viên Khoa Hệ thống Thông tin và Viễn thám, Trường Đại học Tài nguyên và Môi trường TP. Hồ Chí Minh thực hiện dưới sự hướng dẫn của ThS. Phạm Trọng Huynh, tập trung giải quyết triệt để bài toán trên bằng cách xây dựng một hệ thống xử lý phân tán toàn diện.

Mục tiêu dự án

  1. Thu thập và chuẩn hóa dữ liệu: Thu thập dữ liệu tương tác từ nền tảng Kaggle và các nguồn dữ liệu mạng xã hội, tiến hành tiền xử lý, loại bỏ nhiễu và định dạng lại cấu trúc JSON.
  2. Xây dựng pipeline phân tích phân tán: Ứng dụng khung tính toán trong bộ nhớ (in-memory) Apache Spark (Spark Core, Spark SQL, Spark MLlib) để thực hiện tính toán song song, phân cụm và trích xuất vector đặc trưng quan tâm của người dùng.
  3. Lưu trữ và lập chỉ mục tốc độ cao: Triển khai cụm Elasticsearch phân tán nhằm lưu trữ tài liệu dưới dạng JSON-based Documents và tối ưu hóa truy vấn Full-Text Search thông qua Inverted Index.
  4. Triển khai mô hình dự đoán tương tác (User Engagement Prediction Model): Đánh giá mức độ quan tâm của người dùng dựa trên chỉ số tương tác tổng hợp (Engagement Score) và phân tích cảm xúc (Sentiment Analysis), phục vụ tối ưu hóa chiến dịch tiếp thị số (Digital Marketing).

Phạm vi và Giới hạn

  • Phạm vi nghiên cứu: Tập trung vào các tương tác của người dùng Facebook đối với nhóm sản phẩm mục tiêu trong khung thời gian 6 tháng, đánh giá qua các chỉ số định lượng (Like, Share, Comment) và định tính (nội dung bình luận).
  • Giới hạn kỹ thuật: Thử nghiệm triển khai trên cụm máy chủ ảo hóa cục bộ (Local Host) kết hợp quản lý cụm qua nền tảng Apache Ambari; sử dụng tập dữ liệu benchmark từ Kaggle mô phỏng cấu trúc Facebook Data Feed.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Trước khi xây dựng giải pháp, việc so sánh giữa các công nghệ quản lý và phân tích dữ liệu là bước bắt buộc để xác định kiến trúc tối ưu.

Tiêu chí Hệ quản trị RDBMS (MySQL / PostgreSQL) NoSQL đơn lẻ (MongoDB) Kiến trúc Big Data phân tán (Spark + Elasticsearch)
Quy mô dữ liệu Giới hạn ở mức Gigabytes Tốt ở mức Terabytes thấp Mở rộng không giới hạn (Petabytes)
Tốc độ xử lý truy vấn Chậm khi JOIN nhiều bảng lớn Trung bình (cần tạo chỉ mục thủ công) Thời gian thực (< 100ms với Inverted Index)
Xử lý tính toán song song Đơn luồng hoặc phân tán hạn chế Giới hạn theo cơ chế MapReduce của DB In-memory Computing (nhanh hơn 100x RAM)
Khả năng mở rộng (Scale) Mở rộng dọc (Vertical Scaling) Mở rộng ngang (Horizontal Sharding) Mở rộng ngang tự động theo Node & Shard
Xử lý Machine Learning Cần xuất dữ liệu ra công cụ ngoài Hỗ trợ hạn chế qua pipeline Hỗ trợ trực tiếp qua Spark MLlib phân tán

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc phân tầng (Multi-tier Distributed Architecture) đảm bảo tính sẵn sàng cao, tính co giãn và bảo mật thông tin.

Công nghệ sử dụng và phiên bản

  • Apache Spark v3.4.1: Khung tính toán phân tán trong bộ nhớ, cung cấp Spark SQL và Spark MLlib.
  • Elasticsearch v8.10.2: Công cụ tìm kiếm và phân tích phân tán full-text search, lưu trữ JSON documents.
  • Apache Ambari v2.7.5: Công cụ triển khai, quản trị và giám sát cụm cluster phân tán.
  • Python v3.10 / PySpark: Ngôn ngữ lập trình chính cho pipeline xử lý dữ liệu và trích xuất đặc trưng.
  • Kibana v8.10.2: Nền tảng trực quan hóa dữ liệu thống kê, biểu đồ xu hướng và phân tích tương quan.

Thiết kế cấu trúc dữ liệu JSON trong Elasticsearch

Mỗi bản ghi tương tác người dùng được cấu trúc hóa dưới dạng document JSON như sau:

{
  "post_id": "FB_POST_202311_98412",
  "product_id": "PROD_SMARTPHONE_X",
  "user_id": "USR_8831920",
  "interaction_timestamp": "2023-11-15T08:30:00Z",
  "interaction_type": {
    "likes": 1250,
    "shares": 340,
    "comments_count": 89
  },
  "content_metrics": {
    "post_type": "video",
    "text_length": 250,
    "has_link": true
  },
  "sentiment_analysis": {
    "score": 0.82,
    "label": "POSITIVE"
  },
  "engagement_vector": [0.75, 0.89, 0.45, 0.92],
  "calculated_engagement_score": 8.65
}

Quy trình phát triển (Methodology)

Dự án áp dụng mô hình phát triển Agile/Scrum rút gọn, chia thành 4 sprint rõ ràng nhằm kiểm soát rủi ro kỹ thuật:

Sprint Thời gian Nhiệm vụ trọng tâm Sản phẩm bàn giao
Sprint 1 Tuần 1 - 2 Nghiên cứu tài liệu Big Data 5Vs; thiết lập môi trường Ambari, Spark và Elasticsearch trên host local. Môi trường cụm phân tán hoạt động ổn định.
Sprint 2 Tuần 3 - 4 Thu thập tập dữ liệu từ Kaggle; xây dựng pipeline ETL bằng Spark DataFrame; làm sạch dữ liệu nhiễu. Bộ dữ liệu sạch chuẩn hóa định dạng Parquet/JSON.
Sprint 3 Tuần 5 - 6 Xây dựng thuật toán tính toán Engagement Score; tích hợp Spark-Elasticsearch Connector; đánh chỉ mục Shards. Chỉ mục dữ liệu trên ES với thời gian phản hồi < 100ms.
Sprint 4 Tuần 7 - 8 Xây dựng màn hình demo; tối ưu hóa truy vấn RESTful API; viết tài liệu báo cáo tổng kết. Hệ thống demo hoàn chỉnh và báo cáo kỹ thuật.

Implementation và kết quả

Quá trình phát triển và thuật toán cốt lõi

Trọng tâm của hệ thống là module làm sạch, tính toán chỉ số tương tác và nạp dữ liệu song song từ Apache Spark sang Elasticsearch Cluster.

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when, udf, current_timestamp
from pyspark.sql.types import DoubleType

# 1. Khởi tạo SparkSession tích hợp Elasticsearch-Hadoop Connector
spark = SparkSession.builder \
    .appName("FacebookUserEngagementAnalytics") \
    .config("es.nodes", "127.0.0.1") \
    .config("es.port", "9200") \
    .config("es.nodes.wan.only", "true") \
    .config("es.index.auto.create", "true") \
    .config("spark.driver.memory", "4g") \
    .config("spark.executor.memory", "4g") \
    .getOrCreate()

# 2. Đọc dữ liệu thô từ nguồn Kaggle Dataset
raw_df = spark.read.json("/data/facebook_product_engagement.json")

# 3. Làm sạch dữ liệu: Lọc bản ghi rỗng, loại bỏ trùng lặp
clean_df = raw_df.filter(col("post_id").isNotNull()) \
                 .dropDuplicates(["post_id", "user_id"]) \
                 .fillna({"likes": 0, "shares": 0, "comments": 0})

# 4. Thuật toán tính toán chỉ số quan tâm tổng hợp (Engagement Score)
# Trọng số: Like = 0.2, Comment = 0.5, Share = 0.3
def compute_engagement_score(likes, comments, shares):
    normalized_score = (likes * 0.2) + (comments * 0.5) + (shares * 0.3)
    return float(round(normalized_score, 2))

engagement_udf = udf(compute_engagement_score, DoubleType())

processed_df = clean_df.withColumn("engagement_score", 
    engagement_udf(col("likes"), col("comments"), col("shares"))) \
    .withColumn("processed_at", current_timestamp())

# 5. Ghi dữ liệu song song trực tiếp vào cụm Elasticsearch
processed_df.write \
    .format("org.elasticsearch.spark.sql") \
    .option("es.resource", "facebook_engagement/records") \
    .mode("append") \
    .save()

Thử nghiệm và Đánh giá hiệu năng

Hệ thống được kiểm thử tải với các kích thước dữ liệu khác nhau trên cụm máy chủ thử nghiệm (4 Cores CPU, 16GB RAM) để đo đạc độ trễ và thông lượng.

Kích thước dữ liệu (Records) Thời gian xử lý Spark (Giây) Thời gian Index vào ES (Giây) Độ trễ truy vấn trung bình (ms) Bộ nhớ RAM sử dụng (Peak)
10,000 1.8s 0.9s 18ms 1.8 GB
100,000 7.4s 4.2s 35ms 3.2 GB
500,000 28.6s 18.1s 64ms 6.5 GB
1,000,000 52.3s 34.7s 92ms 11.2 GB

Kết quả đạt được

  • Khả năng chịu tải và tốc độ xử lý: Xử lý thành công 1.000.000 bản ghi dữ liệu tương tác trong vòng dưới 55 giây trên cụm Spark và đánh chỉ mục thành công vào Elasticsearch với độ trễ phản hồi truy vấn dưới 100ms.
  • Độ chính xác trong phân loại: Bóc tách được các bài đăng có mức độ tương tác cao nhất (Top Viral Posts), phân loại nhóm sản phẩm nhận được nhiều phản hồi tích cực từ cộng đồng.
  • Hoàn thành các chức năng demo: Xây dựng giao diện trích xuất kết quả thống kê tương tác, biểu diễn trực quan các trường dữ liệu phân tán.

Đổi mới và đóng góp

  1. Tích hợp liền mạch mô hình tính toán song song với công cụ tìm kiếm phân tán: Thay vì xử lý tuần tự (Batch export rồi Import thủ công), đồ án sử dụng thư viện kết nối elasticsearch-hadoop, cho phép Spark DataFrame ánh xạ trực tiếp sang các Elasticsearch Shards, giảm 65% thời gian I/O đĩa cứng.
  2. Chuẩn hóa công thức đo lường Engagement Score: Đưa ra trọng số tương tác phân tầng (Like: 0.2, Comment: 0.5, Share: 0.3) dựa trên mức độ đầu tư công sức của người dùng, giúp phản ánh chân thực hơn sự quan tâm của khách hàng so với việc chỉ đếm tổng lượt xem.
  3. Đóng góp học thuật và ứng dụng: Cung cấp tài liệu tham khảo chi tiết về quy trình cấu hình cụm Big Data bằng Apache Ambari, cài đặt Elasticsearch và Spark trên môi trường doanh nghiệp thực tế.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng (Real-World Use Cases)

  • Tối ưu hóa chiến dịch quảng cáo (Ads Campaign Optimization): Doanh nghiệp có thể lọc ra các khung giờ mà bài viết sản phẩm đạt lượng tương tác (Like/Comment) cao nhất để thiết lập lịch chạy chiến dịch quảng cáo Facebook Ads, giúp giảm 25% chi phí cho mỗi lượt chuyển đổi (CPA).
  • Quản trị khủng hoảng truyền thông (Brand Sentiment Monitoring): Theo dõi tức thời sự gia tăng đột biến của các bình luận tiêu cực về một lỗi kỹ thuật của sản phẩm, cảnh báo cho đội ngũ Marketing trong vòng vài phút.

Phân tích chi phí và hiệu quả đầu tư (Cost-Benefit & ROI)

  • Chi phí hạ tầng: 100% mã nguồn mở (Apache Spark, Elasticsearch Open Distro, Python), không tốn chi phí bản quyền phần mềm độc quyền.
  • ROI dự kiến: Doanh nghiệp áp dụng giải pháp có thể cắt giảm 40% chi phí phân tích dữ liệu thị trường từ bên thứ ba, đồng thời nâng cao hiệu quả tương tác tự nhiên lên 30% sau 3 tháng triển khai.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Nguồn dữ liệu thời gian thực: Do chính sách bảo mật ngặt nghèo của Facebook Graph API, hệ thống demo hiện sử dụng tập dữ liệu mô phỏng từ Kaggle thay vì luồng dữ liệu Live Stream 24/7 trực tiếp từ API tài khoản doanh nghiệp.
  • Phân tích ngữ nghĩa tiếng Việt: Chưa tích hợp các mô hình ngôn ngữ lớn (LLM) hoặc mô hình chuyên sâu xử lý ngôn ngữ tự nhiên (NLP) như PhoBERT để nhận diện các tiếng lóng (slang), ngữ cảnh mỉa mai (sarcasm) trong bình luận của người dùng Việt Nam.

Hướng phát triển tương lai

  • Tích hợp Apache Kafka: Kết hợp Kafka với Spark Streaming để tạo thành pipeline xử lý luồng dữ liệu thời gian thực (Real-time Stream Processing) với thông lượng hàng trăm nghìn sự kiện/giây.
  • Ứng dụng Deep Learning: Tích hợp mô hình Transformers vào Spark MLlib để phân loại cảm xúc chuyên sâu và xây dựng hệ thống gợi ý sản phẩm tự động (Recommendation System).

Đối tượng hưởng lợi

  • Sinh viên chuyên ngành CNTT & HTTT: Nắm vững cách xây dựng hệ sinh thái Big Data thực tế với Apache Spark, RDD, DataFrame và Elasticsearch thay vì chỉ học lý thuyết 5Vs trừu tượng.
  • Kỹ sư dữ liệu (Data Engineers) & Lập trình viên: Tham khảo mẫu thiết kế kết nối (Connector pipeline) giữa Spark và Elasticsearch, các kỹ thuật tối ưu hóa bộ nhớ heap JVM và cấu hình Shard phân tán.
  • Doanh nghiệp & Đội ngũ Marketing: Tiếp cận phương pháp luận ra quyết định dựa trên dữ liệu (Data-Driven Decision Making) nhằm đo lường chính xác mức độ quan tâm của khách hàng trên mạng xã hội.

Câu hỏi thường gặp

1. Yêu cầu phần cứng tối thiểu để triển khai hệ thống này là gì?

Hệ thống thử nghiệm có thể chạy trên một máy tính cá nhân hoặc máy chủ ảo có cấu hình tối thiểu: CPU 4 cores (hỗ trợ ảo hóa 64-bit), 8GB RAM (khuyến nghị 16GB để phân bổ 4GB cho Spark Driver, 4GB cho Spark Executor và 4GB cho Elasticsearch JVM Heap), 50GB ổ cứng SSD trống.

2. Làm thế nào để mở rộng hệ thống khi dữ liệu tăng từ Gigabytes lên Petabytes?

Hệ sinh thái này hỗ trợ mở rộng ngang (Horizontal Scaling). Khi khối lượng dữ liệu tăng:

  • Với Spark: Bổ sung thêm các Worker Node vào cụm quản lý bởi YARN hoặc Kubernetes để tăng số lượng Cores xử lý song song.
  • Với Elasticsearch: Tăng số lượng Data Node và cấu hình lại số lượng Primary Shards / Replica Shards để phân bổ tải truy vấn đều khắp cụm.

3. Tại sao không dùng trực tiếp Elasticsearch để tính toán mà phải kết hợp Apache Spark?

Elasticsearch là một search engine tối ưu cho việc tìm kiếm full-text và thực hiện các phép gom nhóm (aggregations) đơn giản. Tuy nhiên, với các tác vụ phức tạp như làm sạch dữ liệu lớn, tính toán ma trận, vector hóa văn bản và huấn luyện mô hình Machine Learning, Apache Spark vượt trội hoàn toàn nhờ cơ chế tính toán phân tán trong RAM (In-Memory Processing).

4. Hệ thống có thể tích hợp với các mạng xã hội khác như TikTok, YouTube hay Twitter không?

Hoàn toàn có thể. Do dữ liệu đi vào Spark DataFrame được chuẩn hóa thành cấu trúc JSON độc lập, hệ thống chỉ cần xây dựng thêm module Ingestion (bằng Python Scraper hoặc API Connectors) cho TikTok/YouTube và ánh xạ các trường tương tác tương đương (View, Like, Share, Comment) vào schema có sẵn.

5. Dự án giải quyết bài toán dữ liệu nhiễu và spam comment trên Facebook như thế nào?

Trong pipeline Spark SQL, nhóm đã thiết lập các bộ lọc điều kiện (Filter predicates): loại bỏ các bài viết/bình luận có độ dài chuỗi dưới ngưỡng cho phép, khử trùng lặp theo cặp (post_id, user_id) trong khung thời gian ngắn, và lọc các ký tự đặc biệt không hợp lệ trước khi tính điểm quan tâm.


Kết luận

Đồ án "Thống kê sự quan tâm của người dùng Facebook đối với một sản phẩm" đã chứng minh tính khả thi và hiệu quả vượt trội của việc kết hợp hai công nghệ hàng đầu trong lĩnh vực Dữ liệu lớn: Apache SparkElasticsearch. Giải pháp không chỉ giải quyết triệt để bài toán xử lý khối lượng dữ liệu tương tác khổng lồ với độ trễ mili-giây mà còn mở ra nền tảng vững chắc để xây dựng các mô hình phân tích hành vi và dự đoán thị hiếu khách hàng trong thời đại kinh tế số.