Building a Pipeline to Process Clickstream Data

Bài tóm tắt Zillow 2018 3. Quy mô lớn Độ khó: Trung bình

Zillow · 2018 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Clickstream là một trong những dataset lớn nhất: gần một tỷ event/ngày, dataset lớn nhất khoảng 2 TB/ngày chưa nén, bảng rộng nhất khoảng 700 cột (2018). Dùng cho dashboard, cá nhân hoá, gợi ý, ML.

Thay đổi chính

Bốn phiên bản:

  • V1: tải JSON về máy, C# .NET chuyển sang CSV (làm phẳng, tính cột), upload S3, COPY vào Redshift. Lịch bằng SSIS/SQL Server Agent.
  • V2: dữ liệu tăng, gộp ba bước đầu thành đọc–biến đổi–ghi trong bộ nhớ, 8 luồng song song.
  • V3: Hadoop MapReduce (Java) thay .NET, cụm 100 node dựng lên rồi tắt mỗi lần chạy; lịch bằng PowerShell + SQL Server. Code dùng lớp trừu tượng theo version ETL để sửa chung.
  • V4 (2017–2018): xuất JSON về "raw data lake" trên S3, Spark trên EMR chuyển sang Parquet vào data lake; Airflow thay lịch cũ; bảng Hive trên S3 thay bảng Redshift; Hive Metastore để trên RDS cho mọi cụm dùng chung. Mỗi dataset một SubDAG; tối đa 4 dataset chạy cùng lúc và hai dataset lớn không bao giờ chạy cùng nhau (pool 1 slot). Cấu hình bằng YAML. Đổi UDF từ Python sang Scala và bỏ explode + join để giảm shuffle.
  • Kết quả: ETL từ vài giờ xuống khoảng 30 phút. Vẫn chạy song song Redshift và data lake vì nhiều báo cáo và người dùng còn trên Redshift; có bảng phụ lọc sẵn theo dataset để query cũ dễ chuyển.

Vì sao

Bài học cho SWE

  • Kể lại lịch sử phiên bản của một pipeline cho thấy mỗi bước chỉ giải nút thắt kế tiếp, không nhảy thẳng tới kiến trúc cuối.
  • Retry từ bước lỗi (thay vì chạy lại cả pipeline) là lý do chính để tách task trong orchestrator.
  • Khi dời kho dữ liệu, cho người dùng bảng có giao diện giống cũ.

Liên quan