Courses
Nếu bạn làm việc với xử lý dữ liệu lớn, bạn biết rằng quản lý và phân tích các tệp dữ liệu thiếu tổ chức có thể đầy thách thức và dễ xảy ra lỗi. Nguy cơ mất dữ liệu quý giá chỉ vì một sai sót đơn giản, như lệnh xóa nhầm, luôn là mối lo ngại thường trực.
Apache Iceberg giải quyết những thách thức này bằng cách cung cấp một định dạng bảng mạnh mẽ và đáng tin cậy, hỗ trợ hoàn tác và khôi phục về trạng thái trước đó của dữ liệu. Điều này đảm bảo tính toàn vẹn và nhất quán của dữ liệu, giúp quản lý dữ liệu hiệu quả hơn và ít sai sót hơn.
Trong hướng dẫn này, chúng tôi sẽ giải thích Apache Iceberg là gì, tại sao được sử dụng và cách thức hoạt động. Bạn cũng sẽ học cách bắt đầu sử dụng thông qua các hướng dẫn thực hành, từng bước, giúp bạn quản lý và phân tích dữ liệu hiệu quả hơn.
Apache Iceberg là gì?
Apache Iceberg là một định dạng bảng mở được thiết kế để xử lý hiệu quả các bộ dữ liệu phân tích khổng lồ. Nó cung cấp một cấu trúc bảng hiệu năng cao, mang lại các lợi ích của cơ sở dữ liệu truyền thống như truy vấn SQL, tuân thủ ACID và phân vùng cho các tệp dữ liệu của bạn.
Về bản chất, Apache Iceberg hoạt động như một ống kính, cho phép bạn xem và quản lý một tập hợp các tệp dữ liệu như thể chúng là một bảng thống nhất.
Ưu điểm chính của Apache Iceberg là khả năng xử lý dữ liệu quy mô lớn theo cách tối ưu cao. Nó hỗ trợ các tính năng như tiến hóa lược đồ, phân vùng ẩn và du hành thời gian, khiến nó trở thành giải pháp vững chắc để quản lý các quy trình dữ liệu phức tạp.
Bằng cách trừu tượng hóa sự phức tạp của các định dạng lưu trữ bên dưới, Iceberg cho phép quản lý dữ liệu và truy vấn hiệu quả, trở thành lựa chọn lý tưởng cho xử lý dữ liệu lớn.
Lịch sử Apache Iceberg
Netflix phát triển Apache Iceberg vào năm 2017 để khắc phục các hạn chế của Hive, đặc biệt trong xử lý gia tăng và dữ liệu streaming. Năm 2018, Netflix đóng góp Iceberg cho Apache Software Foundation, biến nó thành dự án mã nguồn mở.
Kể từ đó, Apache Iceberg đã trở thành nền tảng cốt lõi cho kiến trúc data lake hiện đại, được áp dụng rộng rãi trong nhiều ngành.
Dự án liên tục phát triển, tích hợp các tính năng như phân vùng ẩn và tiến hóa lược đồ để đáp ứng nhu cầu của môi trường dữ liệu quy mô lớn.
Năm 2024, Databricks thông báo thỏa thuận mua lại Tabular, một công ty quản lý dữ liệu do các nhà sáng lập ban đầu của Apache Iceberg thành lập. Thương vụ này nhằm thống nhất Apache Iceberg và Delta Lake, tăng cường khả năng tương thích dữ liệu và thúc đẩy tiến trình hướng tới một tiêu chuẩn tương tác mở duy nhất.
Mốc tiến hóa của Apache Iceberg
|
Năm |
Sự kiện |
|
2017 |
Netflix phát triển Apache Iceberg để khắc phục các hạn chế của Hive, đặc biệt cho xử lý gia tăng và dữ liệu streaming. |
|
2018 |
Netflix đóng góp Apache Iceberg cho Apache Software Foundation, biến nó thành dự án mã nguồn mở. |
|
2019 |
Apache Iceberg được nhiều ngành áp dụng nhờ khả năng quản lý dữ liệu mở rộng và hiệu quả. Các tính năng như tiến hóa lược đồ và phân vùng ẩn được giới thiệu. |
|
2020 |
Đóng góp cộng đồng và mức độ chấp nhận tiếp tục tăng, với các cải tiến về hiệu năng và các tính năng mới như du hành thời gian và quản lý siêu dữ liệu. |
|
2021 |
Apache Iceberg đạt được sức hút đáng kể như một định dạng bảng ưa thích cho data lake, tích hợp với các công cụ và nền tảng dữ liệu lớn hàng đầu. |
|
2022 |
Bổ sung các tính năng và tối ưu hóa mới, tăng cường hỗ trợ của Iceberg cho quy trình dữ liệu phức tạp và môi trường dữ liệu quy mô lớn. |
|
2023 |
Apache Iceberg tiếp tục phát triển, tập trung cải thiện khả năng tương thích dữ liệu và khả năng tương tác với các định dạng và hệ thống khác. |
|
2024 |
Databricks thông báo thỏa thuận mua lại Tabular. Thương vụ này nhằm thống nhất Iceberg và Delta Lake. |
Apache Iceberg được dùng để làm gì?
Như đã thấy, Apache Iceberg là một công cụ mạnh mẽ cho quản lý và phân tích dữ liệu trong môi trường quy mô lớn.
Dưới đây là cái nhìn cụ thể hơn về những gì Apache Iceberg được dùng để làm.
Phân tích dữ liệu
Sử dụng các định dạng tệp như ORC hoặc Parquet dễ triển khai, nhưng chạy phân tích trên chúng lại kém hiệu quả. Tuy nhiên, Iceberg cung cấp cho chúng định dạng bảng kèm thông tin siêu dữ liệu để tối ưu truy vấn.
Ví dụ, các tệp dữ liệu thô không lưu thông tin về việc chúng thuộc bảng nào, nhưng các tệp siêu dữ liệu của Iceberg thì có. Điều này cho phép công cụ truy vấn quyết định bảng nào cần đọc và bảng nào có thể bỏ qua, cải thiện đáng kể hiệu quả truy vấn.
Các tệp siêu dữ liệu lưu trữ kiểu thông tin này để phục vụ truy vấn hiệu quả. Ngôn ngữ truy vấn trước tiên tìm tên tệp liên quan trong siêu dữ liệu và chỉ lấy tệp đó để truy vấn nhanh, giảm các lượt đọc dữ liệu không cần thiết.
Cắt tỉa phân vùng (partition pruning)
Partition pruning là kỹ thuật bỏ qua dữ liệu không liên quan và chỉ thao tác trên phần dữ liệu cần thiết.
Ví dụ, nếu cột phân vùng của bạn là "date" và bạn chỉ định một khoảng ngày cụ thể, truy vấn chỉ đọc dữ liệu trong khoảng đó. Điều này giảm lượng dữ liệu đọc từ đĩa, giúp truy vấn bảng Iceberg nhanh và hiệu quả hơn.
Du hành thời gian
Du hành thời gian là tính năng cho phép bạn truy cập các phiên bản cũ hơn của dữ liệu bằng cách lấy snapshot tại một thời điểm cụ thể.
Snapshot là tập hợp đầy đủ các tệp dữ liệu tại một thời điểm nhất định.
Các tệp siêu dữ liệu theo dõi ID snapshot, dấu thời gian và chi tiết lịch sử, cho phép truy cập từng snapshot theo ID hoặc theo dấu thời gian.
Tích hợp
Nhiều hệ thống lưu trữ phổ biến như Google Cloud, AWS và Microsoft Azure hỗ trợ định dạng bảng Iceberg. Bạn có thể lưu tệp dữ liệu trên các nền tảng đám mây đó và sử dụng dịch vụ danh mục bên ngoài hoặc tích hợp sẵn để trỏ tới siêu dữ liệu của chúng.
Sau khi cấu hình dịch vụ danh mục, bạn có thể dùng các framework xử lý dữ liệu lớn như Apache Spark hoặc Apache Flink.
Iceberg cũng hỗ trợ nhiều công cụ truy vấn như SQL, Trino và Presto, cho phép tích hợp liền mạch với các quy trình dữ liệu hiện có.
Cộng đồng
Apache Iceberg có cộng đồng năng động và hiện diện trực tuyến trên nhiều nền tảng cộng tác như Twitter và Github. Nó cũng có workspace Slack chuyên dụng cho những ai muốn tham gia các thảo luận phát triển mới nhất.
Những người đóng góp mã nguồn mở và nhà phát triển Iceberg sẵn sàng kết nối với cộng đồng học tập thông qua các nền tảng xã hội. Điều này giúp bạn dễ dàng tìm được giải pháp khi gặp vấn đề trong quá trình triển khai các tính năng của Iceberg.
Các khái niệm cốt lõi của Apache Iceberg
Apache Iceberg giới thiệu một tập hợp các khái niệm cốt lõi giúp quản lý và truy vấn dữ liệu hiệu quả. Trong phần này, chúng ta sẽ điểm qua chúng.
Quản lý siêu dữ liệu
Iceberg quản lý lược đồ bảng, phân vùng, vị trí tệp và nhiều thứ khác thông qua lớp siêu dữ liệu, lớp này duy trì metadata, danh sách manifest và các tệp manifest ở định dạng JSON.
- Tệp metadata: theo dõi lược đồ và phân vùng của bảng.
- Tệp manifest: chứa thông tin ở cấp tệp, như vị trí, kích thước, phân vùng, và thống kê hàng/cột của tệp dữ liệu.
Iceberg hỗ trợ phiên bản hóa thông qua metadata snapshot. Nó lưu chi tiết về dấu thời gian snapshot, phân vùng và các tệp dữ liệu liên quan. Snapshot là ảnh nhìn toàn bộ dữ liệu của bạn tại một thời điểm cụ thể.
Tiến hóa lược đồ
Tiến hóa lược đồ là quá trình sửa đổi lược đồ bảng để đáp ứng các phần tử dữ liệu mới hoặc nhu cầu thay đổi. Apache Iceberg hỗ trợ tiến hóa lược đồ nguyên bản, cho phép cập nhật lược đồ mà không cần viết lại dữ liệu hoặc di chuyển tốn kém.
Ví dụ, nếu bạn đang quản lý dữ liệu nhân viên và muốn thêm một cột mới cho chỉ số hiệu suất, bạn có thể thêm cột “employee_performance”. Iceberg cập nhật siêu dữ liệu để bổ sung cột này mà không ảnh hưởng dữ liệu hiện có. Cột mới ban đầu có giá trị mặc định và sẽ được cập nhật khi chèn các bản ghi mới.
Phân vùng
Phân vùng chia dữ liệu thành các tập nhỏ hơn, cho phép bạn chỉ truy cập phần dữ liệu cần cho truy vấn thay vì đọc toàn bộ tập dữ liệu.
Iceberg hỗ trợ nhiều chiến lược phân vùng, ví dụ:
- Phân vùng theo khoảng: Chia dữ liệu dựa trên khoảng giá trị trong cột phân vùng, như ngày cụ thể, giá trị số hoặc chuỗi.
- Phân vùng băm: Áp dụng hàm băm lên khóa phân vùng để chia dữ liệu.
- Phân vùng cắt ngắn: Cắt ngắn giá trị của cột phân vùng và nhóm dữ liệu. Ví dụ, cắt ngắn mã zip 533405, 533404, 533689, 533098, 535209 và 535678 còn 3 chữ số sẽ nhóm dữ liệu thành ‘533’ và ‘535’.
- Phân vùng theo danh sách: Khớp giá trị khóa phân vùng với các giá trị trong danh sách, chia dữ liệu tương ứng. Thích hợp cho các giá trị phân loại trong cột phân vùng. Ví dụ, phân vùng các hãng laptop thành nhóm “Lenovo”, "Apple” và “HP”.
Snapshot
Snapshot là tập hợp các tệp manifest hợp lệ tại một thời điểm cụ thể. Mỗi thay đổi bạn thực hiện với dữ liệu sẽ tạo một snapshot mới cùng manifest và siêu dữ liệu cập nhật.
Iceberg sử dụng truy vấn dựa trên snapshot, nghĩa là bạn có thể truy cập toàn bộ tập tệp dữ liệu tại một thời điểm cụ thể bằng cách truy cập dấu thời gian tương ứng. Điều này cho phép truy cập dữ liệu lịch sử và quay lui về phiên bản trước trong trường hợp mất dữ liệu.
Kiến trúc kỹ thuật của Apache Iceberg
Apache Iceberg không lưu dữ liệu trong các bảng. Thay vào đó, nó tổ chức các tệp dữ liệu để hiển thị chúng như một bảng duy nhất.
Hãy cùng xem kiến trúc giúp điều đó trở nên khả thi.

Hình nguồn
Danh mục Iceberg (catalog)
Lớp danh mục chứa tham chiếu hoặc con trỏ tới tệp siêu dữ liệu hiện tại của bảng. Bất cứ khi nào bạn thay đổi dữ liệu, một tệp siêu dữ liệu mới được ghi và con trỏ sẽ trỏ tới tệp siêu dữ liệu mới nhất trong log.
Lớp này tạo điều kiện tuân thủ ACID trong các bảng Iceberg. Ví dụ, các thay đổi đang diễn ra sẽ không hiển thị với giao dịch khác cho đến khi hoàn tất và được ghi nhận vào bảng. Cho đến lúc đó, con trỏ vẫn trỏ tới tệp siêu dữ liệu hiện tại.
Tổng thể, catalog đơn giản hóa việc quản lý tuân thủ ACID trong các bảng Iceberg bằng cách trỏ tới các phiên bản cụ thể của tệp siêu dữ liệu.
Lớp siêu dữ liệu
Lớp này chứa ba loại tệp:
- Tệp metadata: Lưu lược đồ bảng, vị trí, thông tin phân vùng, dấu thời gian snapshot và các thông tin khác.
- Tệp manifest: Theo dõi siêu dữ liệu ở cấp tệp. Chúng lưu thông tin phân vùng, thống kê như số hàng, số cột, chi tiết snapshot và định dạng tệp cho từng tệp dữ liệu.
- Danh sách manifest: Một nhóm tệp manifest tạo thành một snapshot duy nhất gọi là manifest list.
Lớp này duy trì cấu trúc và tính toàn vẹn của bảng, cho phép truy vấn và quản lý dữ liệu hiệu quả.
Lớp dữ liệu
Lớp dữ liệu là thành phần lưu trữ của kiến trúc Iceberg, nơi dữ liệu thực sự tồn tại.
Iceberg hỗ trợ nhiều định dạng dữ liệu, bao gồm Parquet, ORC và Avro. Tính linh hoạt này cho phép lưu trữ tối ưu và xử lý dữ liệu hiệu quả, phù hợp với nhiều loại dữ liệu và trường hợp sử dụng.
Tích hợp và khả năng tương thích của Apache Iceberg
Apache Iceberg tích hợp với nhiều framework xử lý dữ liệu lớn và engine tính toán phổ biến.
Tích hợp với các engine xử lý dữ liệu
Apache Spark
Các bảng Iceberg hoạt động như các hệ thống lưu trữ dữ liệu lớn mà bạn có thể sử dụng API Spark để đọc và ghi dữ liệu. Ngoài dataframe API, bạn có thể dùng mô-đun Spark SQL để truy vấn các bảng Iceberg.
Apache Spark có hai catalog: org.apache.iceberg.spark.SparkCatalog và org.apache.iceberg.spark.SparkSessionCatalog. Các catalog này giúp Spark khám phá và truy cập siêu dữ liệu của các bảng Iceberg khả dụng.
metadataorg.apache.iceberg.spark.SparkCatalog: Dùng với dịch vụ catalog bên ngoài như Hive hoặc Hadoop.org.apache.iceberg.spark.SparkSessionCatalog: Catalog tích hợp sẵn của Spark có thể xử lý cả bảng Iceberg và không phải Iceberg trong cùng một phiên.
Apache Flink
Tích hợp Apache Flink và Iceberg nổi bật trong xử lý dữ liệu streaming. Tích hợp này cho phép bạn stream dữ liệu trực tiếp từ nhiều nguồn vào các bảng Iceberg và dễ dàng thực hiện phân tích trên dữ liệu streaming thời gian thực.
Presto và Trino
Preso và Trino nổi tiếng với khả năng xử lý dữ liệu nhanh so với Hive hoặc các engine SQL khác. Do đó, nếu bạn có khối lượng dữ liệu khổng lồ cần truy vấn và phân tích, tích hợp Iceberg với Presto/Trino là lựa chọn tuyệt vời.
Trino không có catalog tích hợp sẵn. Nó dựa vào các dịch vụ catalog bên ngoài như Hive Metastore hoặc AWS Glue để trỏ tới các bảng Iceberg.
Khả năng tương thích với data lake
Các data lake truyền thống không hỗ trợ thuộc tính ACID, dẫn đến đọc dữ liệu không đầy đủ hoặc ghi đồng thời xung đột. Tuy nhiên, tích hợp một data lake với Iceberg sẽ đảm bảo tính nhất quán và chính xác của dữ liệu.
- Amazon S3: Amazon S3 là dịch vụ lưu trữ đám mây phổ biến hỗ trợ nhiều định dạng tệp. Nó được dùng làm lớp lưu trữ trong kiến trúc data lake. Để dùng Iceberg với S3, bạn sẽ dùng AWS Glue làm dịch vụ catalog. Sau khi cấu hình catalog, bạn có thể dùng bất kỳ ngôn ngữ truy vấn nào để phân tích bảng.
- Google Cloud Storage: Data lake trên Google Cloud mang lại kiến trúc dữ liệu linh hoạt và mở rộng hơn. Nhiều công ty có hạ tầng dữ liệu xây dựng quanh Google Cloud có thể tận dụng định dạng bảng Iceberg. Các bảng Iceberg có thể được truy vấn bằng BigQuery của Google hoặc các ngôn ngữ truy vấn tiêu chuẩn.
- Azure Blob Storage: Đây là hệ thống lưu trữ của Microsoft được tối ưu để lưu trữ lượng lớn dữ liệu phi cấu trúc trên đám mây. Iceberg tích hợp với Azure và cung cấp khả năng truy cập dữ liệu nhanh, đáng tin cậy.
Apache Iceberg và Delta Lake
Apache Iceberg và Delta Lake đều là các định dạng bảng tiên tiến được thiết kế để mang thuộc tính ACID vào data lake, nhưng chúng khác nhau về tính năng, tích hợp và trường hợp sử dụng.
Dưới đây là so sánh chi tiết giữa hai bên:
Tổng quan về Delta Lake
Delta Lake là định dạng bảng cung cấp thuộc tính ACID cho một tập các tệp Parquet, đảm bảo người đọc không bao giờ thấy dữ liệu không nhất quán.
Được phát triển bởi Databricks, công ty đứng sau Apache Spark, Delta Lake tương thích cao với Spark cho xử lý và phân tích dữ liệu lớn.
Delta Lake sử dụng log giao dịch để quản lý tính năng du hành thời gian. Log giao dịch là danh sách các tệp JSON theo dõi các thay đổi thực hiện với bảng. Mỗi lần chèn, xóa hoặc cập nhật sẽ tạo một tệp log mới theo dõi thay đổi cụ thể.
Delta Lake định kỳ tạo các tệp checkpoint, đại diện cho snapshot của toàn bộ bảng tại những thời điểm cụ thể và được lưu ở định dạng Parquet.
So sánh tính năng giữa Apache Iceberg và Delta Lake
|
Tính năng |
Apache Iceberg |
Delta Lake |
|
Định nghĩa |
Định dạng bảng Iceberg cung cấp hạ tầng có thể mở rộng với hỗ trợ cho nhiều engine xử lý. |
Delta Lake là lớp lưu trữ đáng tin cậy, đặc biệt phù hợp với hệ sinh thái Databricks. |
|
Định dạng tệp |
Iceberg hỗ trợ nhiều định dạng tệp, bao gồm Parquet, Avro và ORC. |
Delta Lake hỗ trợ nguyên bản duy nhất định dạng tệp Parquet. |
|
Hỗ trợ thuộc tính ACID |
Iceberg hỗ trợ giao dịch ACID. |
Delta Lake cung cấp thuộc tính ACID mạnh mẽ. |
|
Xử lý phân vùng |
Iceberg hỗ trợ phân vùng động, nghĩa là có thể cập nhật phân vùng mà không cần viết lại lược đồ. |
Phân vùng là cố định và bạn nên định nghĩa khi tạo bảng. Sửa đổi phân vùng đã định có thể cần viết lại dữ liệu. |
|
Du hành thời gian |
Mỗi thay đổi thực hiện với bảng sẽ tạo một snapshot mới. |
Cung cấp tính năng du hành thời gian thông qua log giao dịch, với các thay đổi được theo dõi trong tệp JSON. |
|
Tích hợp |
Iceberg hỗ trợ nhiều engine xử lý dữ liệu như SQL, Spark, Trino, Hive, Flink, Presto và hơn thế nữa. |
Delta Lake gắn kết chặt chẽ với Apache Spark. |
Trường hợp sử dụng của Apache Iceberg và Delta Lake
|
Trường hợp sử dụng |
Apache Iceberg |
Delta Lake |
|
Tính linh hoạt về engine |
Tốt nhất khi dùng nhiều engine, bao gồm Apache Spark, Flink, Presto, Hive, v.v. Lý tưởng cho môi trường cần các engine khác nhau cho các tác vụ xử lý khác nhau. |
Tốt nhất cho người dùng sử dụng Apache Spark nguyên bản, mang lại tích hợp chặt chẽ và hiệu năng tối ưu trong hệ sinh thái Spark. |
|
Streaming dữ liệu |
Hỗ trợ nạp dữ liệu liên tục từ nhiều nguồn, xử lý theo thời gian thực. |
Hợp nhất xử lý batch và stream, lý tưởng cho các trường hợp cần cả hai trong một pipeline. |
Các cân nhắc bổ sung giữa Apache Iceberg và Delta Lake
- Cộng đồng và hệ sinh thái: Cả Iceberg và Delta Lake đều có cộng đồng sôi động và tài liệu phong phú. Tuy nhiên, Delta Lake được hậu thuẫn bởi Databricks, cung cấp hỗ trợ mạnh trong hệ sinh thái Databricks.
- Hiệu năng: Dù cả hai định dạng đều có tối ưu hiệu năng, sự tích hợp chặt chẽ của Delta Lake với Spark có thể mang lại lợi ích cho các quy trình tập trung vào Spark. Tính linh hoạt của Iceberg với nhiều engine có thể đem lại lợi thế hiệu năng trong môi trường đa engine.
Tổng thể, Delta Lake phù hợp với các trường hợp cần xử lý thời gian thực và tích hợp chặt với Spark và hệ sinh thái Databricks. Ngược lại, Apache Iceberg mang lại nhiều linh hoạt hơn cho xử lý dữ liệu quy mô lớn và khả năng chọn engine tốt nhất cho từng trường hợp cụ thể.
Bắt đầu với Apache Iceberg
Thiết lập và sử dụng Apache Iceberg bao gồm cấu hình môi trường và nắm các thao tác cơ bản lẫn nâng cao. Hướng dẫn này sẽ giúp bạn bắt đầu.
Cài đặt và thiết lập
Để thiết lập và chạy các bảng Iceberg, bạn cần cấu hình các môi trường sau trên máy của mình:
- Java JDK
- PySpark
- Python
- Apache Spark
Việc có kiến thức cơ bản về các công cụ và công nghệ này cũng rất hữu ích. Bạn có thể học thông qua các khóa sau:
- Big Data với PySpark
- Giới thiệu về PySpark
- Giới thiệu về Spark SQL bằng Python
- Những điều cơ bản về Big Data với PySpark
- Lập trình Python
Khi đã sẵn sàng, bạn có thể làm theo các bước dưới đây để thiết lập các bảng Iceberg:
- Tải các tệp JAR của Iceberg và đặt chúng trong một thư mục trên máy của bạn.
- Tạo một thư mục mới tên
iceberg-warehouseđể lưu trữ các bảng Iceberg.
mkdir iceberg-warehouse
- Cấu hình các tệp jar trong phiên Spark như bên dưới.
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Iceberg-sample") \
.config("spark.jars", "jars/iceberg-spark-runtime-<version>.jar") \
.getOrCreate()
Thay “jars/iceberg-spark-runtime-<version>.jar” bằng thư mục thực tế chứa các tệp jar và phiên bản bạn đang dùng.
- Cấu hình PySpark để sử dụng các bảng Iceberg.
from pyspark.sql import SparkSession
spark = SparkSession.builder \
.appName("Iceberg-Sample") \
.config("spark.jars", "jars/iceberg-spark-runtime-<version>.jar") \
.config("spark.sql.catalog.catalog_name", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.catalog_name.type", "hadoop") \
.config("spark.sql.catalog.catalog_name.warehouse", "file:///C:/HP/iceberg-warehouse") \
.getOrCreate()
Thay "jars/iceberg-spark-runtime-<version>.jar" bằng đường dẫn và phiên bản thực của các tệp JAR Iceberg, và đảm bảo đường dẫn warehouse là chính xác.
Giờ bạn có thể tạo và sử dụng các bảng Iceberg bằng PySpark.
Các thao tác cơ bản
- Tạo một bảng Iceberg và chèn dữ liệu vào đó.
spark.sql(""" CREATE TABLE my_catalog.emp_table ( id INT, data STRING ) USING iceberg """)
spark.sql(""" INSERT INTO catalog_name.emp_table VALUES (14, 'james'),('15','john')""")
- Lệnh xóa dữ liệu khỏi các bảng Iceberg.
spark.sql("DELETE FROM catalog_name.emp_table WHERE id = 14")
Các thao tác nâng cao
Thêm, cập nhật hoặc loại bỏ cột mà không ảnh hưởng dữ liệu hiện có là một phần của tiến hóa lược đồ.
- Dưới đây là cách bạn có thể thêm một cột mới.
spark.sql("ALTER TABLE ADD catalog_name.emp_table COLUMN salary INT")
Tiến hóa phân vùng nghĩa là thay đổi các cột phân vùng mà không ghi đè các tệp dữ liệu hiện có.
- Đây là cách bạn có thể thêm một cột phân vùng mới.
spark.sql("ALTER TABLE catalog_name.emp_table ADD PARTITION FIELD emp_join_date")
Những bước và lệnh này cung cấp khung cơ bản để bắt đầu với Apache Iceberg và giúp bạn hình dung công việc với định dạng này trông như thế nào.
Kết luận
Chúng ta đã bao quát khá nhiều nội dung hôm nay; hãy tóm tắt bằng vài điểm chính.
Apache Iceberg mang lại cấu trúc bảng vững chắc cho một tập tệp dữ liệu, hỗ trợ giao dịch ACID và đảm bảo tính nhất quán, độ tin cậy của dữ liệu.
Định dạng Iceberg giới thiệu tiến hóa lược đồ linh hoạt, phân vùng liền mạch và khả năng mở rộng cho hệ thống lưu trữ. Việc tích hợp với các engine xử lý dữ liệu như Apache Spark và Flink cho phép xử lý hiệu quả cả dữ liệu batch lẫn streaming thời gian thực.
Nếu bạn muốn tìm hiểu sâu hơn về kiến trúc và quản lý dữ liệu hiện đại, hãy tham khảo thêm các tài nguyên sau:
Câu hỏi thường gặp
Apache Iceberg có xử lý được các cấu trúc dữ liệu lồng nhau phức tạp không?
Có, Apache Iceberg có thể xử lý các cấu trúc dữ liệu lồng nhau phức tạp. Nó hỗ trợ các kiểu dữ liệu lồng nhau như struct, map và array, phù hợp với nhiều kịch bản dữ liệu.
Apache Iceberg đảm bảo tính nhất quán dữ liệu khi ghi đồng thời như thế nào?
Apache Iceberg đảm bảo tính nhất quán dữ liệu trong khi ghi đồng thời bằng cách sử dụng kiểm soát đồng thời lạc quan. Nó theo dõi thay đổi với lớp siêu dữ liệu có phiên bản, và mỗi thao tác ghi tạo ra một snapshot mới. Nếu có ghi đồng thời, Iceberg sẽ kiểm tra xung đột và đảm bảo chỉ một lần ghi thành công, bảo toàn tính toàn vẹn dữ liệu.
Tác động hiệu năng của việc dùng Apache Iceberg so với các data lake truyền thống là gì?
Apache Iceberg có thể cải thiện hiệu năng đáng kể so với các data lake truyền thống bằng cách tối ưu bố cục dữ liệu, hỗ trợ phân vùng động và cho phép quản lý siêu dữ liệu chi tiết. Những tính năng này giảm lượng dữ liệu cần quét trong truy vấn và cải thiện hiệu suất truy vấn tổng thể.
Apache Iceberg có thể dùng với các giải pháp lưu trữ đám mây không thuộc Hadoop không?
Có, Apache Iceberg có thể được sử dụng với nhiều giải pháp lưu trữ đám mây không thuộc Hadoop, bao gồm Amazon S3, Google Cloud Storage và Azure Blob Storage. Nó được thiết kế độc lập với lớp lưu trữ, cho phép bạn tận dụng các khả năng của Iceberg trên nhiều nền tảng.
Apache Iceberg xử lý thay đổi lược đồ mà không cần dừng hệ thống như thế nào?
Apache Iceberg xử lý thay đổi lược đồ thông qua tính năng tiến hóa lược đồ nguyên bản. Nó cho phép bạn thêm, xóa hoặc cập nhật cột mà không cần dừng hệ thống hoặc viết lại dữ liệu hiện có. Những thay đổi này được áp dụng vào siêu dữ liệu, và dữ liệu mới sẽ được ghi theo lược đồ đã cập nhật.
Có giao diện người dùng để quản lý và truy vấn các bảng Iceberg không?
Mặc dù bản thân Apache Iceberg không cung cấp giao diện người dùng tích hợp, nó có thể được tích hợp với nhiều nền tảng dữ liệu và engine truy vấn có giao diện người dùng. Các công cụ như Apache Spark, Trino và Presto có thể được dùng để tương tác với các bảng Iceberg thông qua UI tương ứng của chúng.
Apache Iceberg so với các định dạng bảng khác như Apache Hudi như thế nào?
Apache Iceberg và Apache Hudi đều cung cấp giao dịch ACID và khả năng du hành thời gian, nhưng chúng có triết lý thiết kế và trường hợp sử dụng khác nhau. Iceberg tập trung cung cấp định dạng bảng hiệu năng cao với hỗ trợ cho nhiều engine, trong khi Hudi nhấn mạnh vào nạp dữ liệu thời gian thực và xử lý gia tăng. Việc lựa chọn phụ thuộc vào trường hợp sử dụng cụ thể và nhu cầu tích hợp.
Apache Iceberg có thể được dùng cho quy trình học máy không?
Có, Apache Iceberg có thể được sử dụng cho quy trình học máy. Khả năng quản lý hiệu quả các bộ dữ liệu lớn và hỗ trợ nhiều định dạng tệp (như Parquet và Avro) khiến nó phù hợp để chuẩn bị và xử lý dữ liệu cho mô hình học máy. Việc tích hợp với các framework xử lý dữ liệu lớn như Apache Spark càng tăng tính hữu dụng trong quy trình ML.
Apache Iceberg xử lý bảo mật dữ liệu và kiểm soát truy cập như thế nào?
Apache Iceberg dựa vào lớp lưu trữ và các engine xử lý bên dưới để đảm bảo bảo mật dữ liệu và kiểm soát truy cập. Bạn có thể triển khai các biện pháp bảo mật như mã hóa, chính sách IAM và kiểm soát truy cập ở lớp lưu trữ (ví dụ Amazon S3, Google Cloud Storage) và lớp xử lý (ví dụ Apache Spark, Flink). Ngoài ra, các dịch vụ catalog như AWS Glue và Hive Metastore có thể được dùng để quản lý quyền và kiểm soát truy cập.
Srujana là một cây bút công nghệ tự do với bằng Cử nhân Khoa học Máy tính. Việc viết về nhiều chủ đề như khoa học dữ liệu, điện toán đám mây, phát triển, lập trình, bảo mật và nhiều lĩnh vực khác đến với cô một cách tự nhiên. Cô yêu thích văn học kinh điển và khám phá những điểm đến mới.
