1. Apache Iceberg: Lịch sử và Kiến trúc [0]

thumbnail Apache Iceberg là một định dạng bảng mở giúp mang lại các tính năng giống cơ sở dữ liệu quan hệ cho dữ liệu trong hồ dữ liệu, ngay cả khi dữ liệu đó chỉ là các tệp Parquet.

1.1. Sự phát triển từ Kho dữ liệu đến Hồ dữ liệu [3]

  1. Kho dữ liệu (Data Warehouse) [4]
    • Kho dữ liệu là các cơ sở dữ liệu lớn chứa dữ liệu từ nhiều cơ sở dữ liệu nhỏ hơn, thường là cơ sở dữ liệu quan hệ.
    • Dữ liệu được thu thập qua đêm bằng quy trình ETL (Extract, Transform, Load) và sẵn sàng cho báo cáo, phân tích vào ngày hôm sau.
    • Đây là một quy trình theo lô, từng là công nghệ tuyệt vời nhưng đã dần nhường chỗ cho các giải pháp khác do vấn đề về quy mô.
  2. Hồ dữ liệu (Data Lake) [8]
    • Khoảng 15 năm trước, Hồ dữ liệu xuất hiện, ban đầu dưới dạng hệ thống tệp phân tán lớn như Hadoop.
    • Dữ liệu từ các nguồn khác nhau (cơ sở dữ liệu vận hành, thiết bị di động, dữ liệu streaming ban đầu) được đưa vào hồ dữ liệu.
    • Thay vì tập trung vào lược đồ đầu vào và ETL phức tạp, dữ liệu được trích xuất và tải (Extract, Load), sau đó mới chuyển đổi (Transform) sau.
    • Ngày nay, hồ dữ liệu thường là các kho lưu trữ đám mây như S3.
    • Một sự thay đổi chính là giảm sự chú trọng vào lược đồ (schema), vì việc quản lý lược đồ được coi là rất phức tạp.
    • Tuy nhiên, theo thời gian, lược đồ trở nên quan trọng vì mọi người vẫn muốn biết định dạng dữ liệu, coi dữ liệu là dạng bảng và chạy các truy vấn SQL.
  3. Nhu cầu về sự nhất quán và quản lý lược đồ [26]
    • Apache Iceberg, một dự án mã nguồn mở từ Netflix, ra đời để giải quyết các vấn đề về nhất quán dữ liệu.
    • Trong một hệ thống tệp phân tán lớn, việc có các bảng nhỏ nằm rải rác ở nhiều tệp khác nhau gây khó khăn cho việc sửa đổi và duy trì cái nhìn nhất quán về dữ liệu.
    • Nhu cầu về tính giao dịch (transactionality) cũng là một lợi ích mong muốn.
    • Sự chuyển đổi từ kho dữ liệu sang hồ dữ liệu đã làm mất đi một số tính năng quan trọng, dẫn đến sự ra đời của Iceberg và các công nghệ tương tự.

1.2. Cách thức hoạt động của Apache Iceberg [32]

  1. Các lớp cấu trúc của Iceberg [34]
    • Iceberg xây dựng các lớp trên các tệp dữ liệu (thường là Parquet) để quản lý metadata.
    • Lớp dữ liệu: Bao gồm các tệp dữ liệu thực tế, ví dụ như các tệp Parquet chứa dữ liệu. [34]
    • Tệp Manifest: Ghi lại danh sách các tệp dữ liệu thuộc về một bảng và có thể chứa metadata bổ sung như giá trị min/max của cột để tối ưu hóa truy vấn. [48]
    • Manifest List: Tập hợp nhiều tệp Manifest, cho phép quản lý nhiều lần nạp dữ liệu (ingest) và là một cách để thu thập nhiều sự kiện nạp dữ liệu vào một bộ sưu tập duy nhất. [64]
    • Tệp Metadata: Chứa thông tin về bảng, bao gồm các snapshot (ảnh chụp nhanh) của bảng tại các thời điểm khác nhau. Mỗi snapshot trỏ đến một Manifest List, từ đó trỏ đến các tệp Manifest và cuối cùng là các tệp dữ liệu. [77]
      • Điều này cho phép xem các phiên bản nhất quán của dữ liệu ngay cả khi dữ liệu và lược đồ đang thay đổi.
      • Iceberg có thể quản lý nhiều snapshot, cho phép quay lại các phiên bản trước đó của bảng.
  2. Catalog [92]
    • Lớp trên cùng là Catalog, nó ánh xạ tên bảng (ví dụ: "thermostats") tới tệp Metadata tương ứng.
    • Catalog giúp tra cứu và xác định vị trí của các tệp metadata của bảng Iceberg.
  3. Cơ sở hạ tầng vật lý [97]
    • Iceberg chủ yếu bao gồm các tệp (Parquet, JSON) được lưu trữ trên các kho lưu trữ đám mây như S3.
    • Nó không phải là một tiến trình máy chủ mà là một đặc tả (specification).
    • Các thành phần như Catalog có thể là Hive Metastore, cơ sở dữ liệu JDBC, hoặc thậm chí là SQLite.

1.3. Lợi ích và Ứng dụng của Iceberg [105]

  1. Ngữ nghĩa giống cơ sở dữ liệu quan hệ cho Hồ dữ liệu [105]
    • Iceberg cho phép lưu trữ dữ liệu trong hồ dữ liệu với các ngữ nghĩa giống như cơ sở dữ liệu quan hệ, ngay cả khi đó chỉ là các tệp Parquet.
    • Điều này mang lại sự linh hoạt trong cách truy vấn dữ liệu.
  2. Khả năng truy cập và tích hợp [107]
    • Không có một máy chủ trung tâm; thay vào đó, có một bộ thư viện cho phép lập trình bằng Java, Python, Flink, Spark, v.v.
    • Các công cụ khác như Presto có thể thực hiện các truy vấn phức tạp trên các bảng Iceberg.
    • Nhiều công cụ tuân theo tiêu chuẩn mở của Iceberg để cho phép các loại truy vấn mong muốn.
  3. Tích hợp với Streaming (Ví dụ: Kafka) [112]
    • Trong thế giới streaming, Kafka thường là nguồn cấp dữ liệu cho hồ dữ liệu.
    • Thay vì có quy trình riêng biệt cho streaming và hồ dữ liệu, Iceberg cho phép bật ngữ nghĩa Iceberg trực tiếp trên dữ liệu streaming.
    • Confluent Tableflow là một ví dụ, cho phép dữ liệu trong một chủ đề Kafka (topic) được truy cập như một bảng Iceberg.
    • Các thay đổi đối với chủ đề Kafka hoặc lược đồ của nó sẽ tự động cập nhật các tệp metadata của Iceberg.
    • Điều này loại bỏ nhu cầu sao chép dữ liệu thủ công giữa các hệ thống.
  4. Các tính năng nâng cao và tiềm năng [119]
    • Iceberg hỗ trợ các hoạt động như cập nhật, upsert và xóa dữ liệu.
    • Nó cung cấp các cơ chế để thực hiện các giao dịch.
    • Iceberg là một công nghệ quan trọng mang lại nhiều khả năng mới cho việc quản lý và phân tích dữ liệu.