paint-brush
Những bí ẩn về hồ dữ liệu được tiết lộ: Nessie, Dremio và MinIO tạo nên làn sóngtừ tác giả@minio
7,746 lượt đọc
7,746 lượt đọc

Những bí ẩn về hồ dữ liệu được tiết lộ: Nessie, Dremio và MinIO tạo nên làn sóng

từ tác giả MinIO6m2024/02/22
Read on Terminal Reader

dài quá đọc không nổi

Bài viết này cung cấp hướng dẫn từng bước trình bày cách Nessie, Dremio và MinIO phối hợp với nhau để nâng cao chất lượng dữ liệu và cộng tác trong quy trình kỹ thuật dữ liệu của bạn.
featured image - Những bí ẩn về hồ dữ liệu được tiết lộ: Nessie, Dremio và MinIO tạo nên làn sóng
MinIO HackerNoon profile picture


Nhiều người trong chúng tôi đã thực hiện các thay đổi đối với dữ liệu dựa trên các yêu cầu phát triển sau này. Đến lúc chúng ta nhận ra điều đó thì việc quay trở lại là điều không thể. Thay đổi không chỉ là một hằng số; đó là một phần thiết yếu trong việc quản lý dữ liệu đòi hỏi một cách tiếp cận phức tạp. Nhập chức năng giống Git của danh mục dữ liệu Nessie của Dremio.


Giống như Git đã trở thành nền tảng cho việc phát triển phần mềm, các kỹ sư dữ liệu cần các công cụ tương tự để hoạt động song song, so sánh các phiên bản dữ liệu, thúc đẩy các thay đổi trong quá trình sản xuất và khôi phục dữ liệu khi cần. Nessie cung cấp cho các kỹ sư dữ liệu hệ thống kiểm soát phiên bản giống Git để quản lý các phiên bản dữ liệu, nhánh, hợp nhất và cam kết. Điều này có thể rất hữu ích khi có nhiều kỹ sư dữ liệu đang làm việc và chuyển đổi dữ liệu cùng một lúc. Nessie cho phép mỗi kỹ sư làm việc ở các nhánh riêng biệt trong khi vẫn duy trì một nguồn sự thật duy nhất dưới dạng nhánh chính. Chức năng này trao quyền cho các nhóm kỹ thuật dữ liệu để duy trì chất lượng dữ liệu một cách cộng tác trước sự thay đổi không ngừng.


Bài viết này cung cấp hướng dẫn từng bước trình bày cách Nessie, Dremio và MinIO phối hợp với nhau để nâng cao chất lượng dữ liệu và cộng tác trong quy trình kỹ thuật dữ liệu của bạn. Cho dù bạn là kỹ sư dữ liệu, kỹ sư ML hay chỉ là người đam mê hồ dữ liệu hiện đại, blog này sẽ trang bị cho bạn kiến thức và công cụ cần thiết để nâng cao hiệu quả các phương pháp lập phiên bản dữ liệu của bạn.

Hiểu những điều cơ bản: Khối lượng công việc của Nessie

Nessie cho phép khối lượng công việc giống như Git cho phép bạn thử nghiệm, phát triển và đưa vào sản xuất. Hãy chia nhỏ một số khái niệm chính:


  • Nhánh: Giống như trong Git, các nhánh trong Nessie cho phép bạn làm việc đồng thời trên các nhiệm vụ kỹ thuật dữ liệu khác nhau. Ví dụ: bạn có thể có một nhánh để phát triển tính năng, làm sạch dữ liệu và chuyển đổi dữ liệu. Mỗi nhánh có thể có tập hợp thay đổi dữ liệu riêng.


  • Cam kết: Trong Nessie, cam kết thể hiện ảnh chụp nhanh dữ liệu tại một thời điểm cụ thể. Khi bạn thực hiện các thay đổi đối với dữ liệu của mình, bạn sẽ tạo một cam kết mới ghi lại những thay đổi đó. Cam kết được liên kết với một chi nhánh cụ thể. Khi bạn cần hoàn nguyên dữ liệu của mình về trạng thái ổn định hoặc đã biết rõ, Nessie giúp bạn dễ dàng chọn một cam kết cụ thể và quay lại phiên bản dữ liệu đó. Điều này đảm bảo chất lượng dữ liệu và tính nhất quán.


  • Hợp nhất : Nessie cho phép bạn hợp nhất các thay đổi từ nhánh này sang nhánh khác. Điều này tương tự như việc hợp nhất các thay đổi mã trong Git. Khi bạn hợp nhất một nhánh, những thay đổi dữ liệu được thực hiện trong nhánh đó sẽ trở thành một phần của nhánh đích.

Các thành phần



Dremio là một công cụ phân tích phân tán hoạt động như một nền tảng nguồn mở, cung cấp giao diện tự phục vụ trực quan để khám phá, chuyển đổi và cộng tác dữ liệu. Thiết kế của nó dựa trên Mũi tên Apache, một định dạng bộ nhớ cột tốc độ cao.


Chúng ta đã khám phá cách triển khai Dremio với Kubernetes cũng như cách truy vấn bảng Iceberg trên MinIO với Dremio . Để biết thêm thông tin về Dremio, hãy tham khảo ý kiến Tài nguyên Dremio .


MinIO là bộ lưu trữ đối tượng hiệu suất cao. Nổi tiếng vì sự đặc biệt của nó tốc độ khả năng mở rộng , MinIO đóng vai trò là thành phần then chốt trong việc xây dựng và duy trì cơ sở hạ tầng hồ dữ liệu hiện đại. MinIO trao quyền cho các kiến trúc sư để quản lý và lưu trữ khối lượng lớn dữ liệu một cách hiệu quả tại chỗ, trên kim loại trần, ở rìa hoặc trên bất kỳ đám mây công cộng nào.


tảng băng trôi Apache là một định dạng bảng mở phù hợp để quản lý khối lượng lớn dữ liệu trong hồ dữ liệu. Các tính năng độc đáo như du hành thời gian, tiến hóa lược đồ động và Tiến hóa phân vùng khiến nó trở thành một công cụ thay đổi cuộc chơi, cho phép các công cụ truy vấn hoạt động đồng thời trên cùng một dữ liệu một cách an toàn và hiệu quả. Nhìn thấy Hướng dẫn dứt khoát về Kiến trúc Lakehouse với Iceberg và MinIO để biết thêm thông tin về các tính năng của Iceberg.

Bắt đầu

Bạn sẽ cần Công cụ Docker Docker Soạn cho hướng dẫn này. Cách dễ nhất để có được cả hai nếu bạn chưa có là cài đặt Docker Desktop.


Phần hướng dẫn này dựa trên Dremio bài viết trên blog . Bạn có thể lấy repo cho dự án này đây .


Để bắt đầu, hãy mở một thiết bị đầu cuối và điều hướng đến thư mục nơi bạn đã sao chép/tải xuống kho lưu trữ và chạy lệnh bên dưới để khởi động Dremio.


 docker-compose up dremio


Đợi một lát rồi điều hướng đến http://localhost:9047 để truy cập Dremio. Cập nhật các trường được yêu cầu rồi nhấp vào Tiếp theo.



Tiếp theo, chạy lệnh sau để khởi động MinIO.


 docker-compose up minio


Lệnh docker-compose up cuối cùng bên dưới sẽ khởi động Nessie.


 docker-compose up nessie


Điều hướng đến http://localhost:9001 để đăng nhập vào MinIO bằng tên người dùng và mật khẩu của minioadmin:minioadmin . Bạn sẽ được nhắc tạo một nhóm.



Tạo một tên có tên là iceberg-datalake .



Sau đó quay lại Dremio tại http://localhost:9047 và nhấp vào Thêm nguồn và chọn Nessie.



  • Đặt tên thành nessie
  • Đặt URL điểm cuối thành http://nessie:19120/api/v2
  • Đặt xác thực thành none



Đừng nhấp vào Lưu. Thay vào đó, trong bảng điều hướng ở bên trái, hãy nhấp vào Bộ nhớ. MinIO là bộ lưu trữ đối tượng tương thích với S3-API và có thể sử dụng cùng đường dẫn kết nối như AWS S3.


  • Đối với khóa truy cập của bạn, hãy đặt minioadmin
  • Đối với khóa bí mật của bạn, hãy đặt minioadmin
  • Đặt đường dẫn gốc tới /iceberg-datalake



Cuộn xuống để xem bộ hướng dẫn tiếp theo.

  • Nhấp vào nút Add Property trong Connection Properties để tạo và định cấu hình các thuộc tính sau.
    • fs.s3a.path.style.access thành true
    • fs.s3a.endpoint tới minio:9000
    • dremio.s3.compat thành true
    • Bỏ chọn Encrypt connection



Sau đó nhấp vào Lưu. Bây giờ bạn sẽ thấy Danh mục Nessie trong nguồn dữ liệu của mình.



Tạo nguồn dữ liệu

Trong Dremio điều hướng đến SQL Runner ở phía bên trái. Đảm bảo rằng Context ở khu vực phía trên bên phải của trình soạn thảo văn bản được đặt thành nguồn Nessie của chúng tôi. Nếu không, bạn sẽ phải tham chiếu ngữ cảnh như nessie.SalesData thay vì chỉ SalesData để chạy truy vấn này. Sao chép và dán đoạn SQL bên dưới và chạy.


 CREATE TABLE SalesData (    id INT,    product_name VARCHAR,    sales_amount DECIMAL,    transaction_date DATE ) PARTITION BY (transaction_date); 



Chạy truy vấn bên dưới để chèn dữ liệu vào bảng bạn vừa tạo.


 INSERT INTO SalesData (id, product_name, sales_amount, transaction_date) VALUES    (1, 'ProductA', 1500.00, '2023-10-15'),    (2, 'ProductB', 2000.00, '2023-10-15'),    (3, 'ProductA', 1200.00, '2023-10-16'),    (4, 'ProductC', 1800.00, '2023-10-16'),    (5, 'ProductB', 2200.00, '2023-10-17'); 



Điều hướng quay lại MinIO để thấy rằng hồ dữ liệu của bạn đã được điền vào các bảng Iceberg.


Phân nhánh và hợp nhất với Nessie

Quay lại Dremio tại http://localhost:9047 . Bắt đầu bằng cách truy vấn một bảng trên nhánh chính bằng cú pháp AT BRANCH :


 SELECT * FROM nessie.SalesData AT BRANCH main; 



Tạo một nhánh ETL (Trích xuất chuyển đổi và tải) để cho phép bạn thử nghiệm và chuyển đổi dữ liệu mà không ảnh hưởng đến quá trình sản xuất.


 CREATE BRANCH etl_06092023 in nessie


Trong nhánh ETL, chèn dữ liệu mới vào bảng:

 USE BRANCH etl_06092023 in nessie; INSERT INTO nessie.SalesData (id, product_name, sales_amount, transaction_date) VALUES (6, 'ProductC', 1400.00, '2023-10-18');


Xác nhận tính khả dụng ngay lập tức của dữ liệu mới trong nhánh ETL:

 SELECT * FROM nessie.SalesData AT BRANCH etl_06092023;


Lưu ý việc tách biệt các thay đổi khỏi người dùng trên nhánh chính:

 SELECT * FROM nessie.SalesData AT BRANCH main;


Hợp nhất các thay đổi từ nhánh ETL trở lại nhánh chính:

 MERGE BRANCH etl_06092023 INTO main in nessie;


Chọn lại nhánh chính để thấy rằng những thay đổi đã thực sự được hợp nhất.

 SELECT * FROM nessie.SalesData AT BRANCH main


Chiến lược phân nhánh này cho phép các kỹ sư dữ liệu xử lý độc lập nhiều giao dịch trên nhiều bảng. Khi sẵn sàng, các kỹ sư dữ liệu có thể hợp nhất các giao dịch này thành một giao dịch nhiều bảng toàn diện, duy nhất trong nhánh chính.

Phần kết luận

Bài đăng trên blog này đi sâu vào sức mạnh của việc kiểm soát phiên bản giống Git trong kỹ thuật dữ liệu, nhấn mạnh cách Nessie quản lý liền mạch các phiên bản dữ liệu, phân nhánh và hợp nhất. Hướng dẫn từng bước này trình bày cách Nessie, phối hợp với Dremio và MinIO, với tư cách là nền tảng lưu trữ đối tượng, nâng cao chất lượng dữ liệu và cộng tác trong quy trình kỹ thuật dữ liệu.


Hãy cho chúng tôi biết kho dữ liệu của bạn trông như thế nào xin chà[email protected] hoặc trên kênh Slack của chúng tôi .


Cũng xuất hiện ở đây .