paint-brush
Xây dựng kiến trúc dữ liệu hiện đại hiệu quả với Iceberg, Tabular và MinIOtừ tác giả@minio
7,928 lượt đọc
7,928 lượt đọc

Xây dựng kiến trúc dữ liệu hiện đại hiệu quả với Iceberg, Tabular và MinIO

từ tác giả MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

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

Các hồ dữ liệu hiện đại cung cấp một trung tâm trung tâm cho tất cả các nhu cầu dữ liệu của bạn. Tuy nhiên, việc xây dựng và quản lý hồ dữ liệu hiệu quả có thể phức tạp.
featured image - Xây dựng kiến trúc dữ liệu hiện đại hiệu quả với Iceberg, Tabular và MinIO
MinIO HackerNoon profile picture
0-item
1-item


Bối cảnh dữ liệu hiện đại đòi hỏi một loại cơ sở hạ tầng mới – một loại cơ sở hạ tầng tích hợp liền mạch dữ liệu có cấu trúc và không cấu trúc, mở rộng quy mô một cách dễ dàng và hỗ trợ khối lượng công việc AI/ML hiệu quả. Đây là đâu hồ dữ liệu hiện đại hãy tham gia, cung cấp một trung tâm trung tâm cho tất cả các nhu cầu dữ liệu của bạn. Tuy nhiên, việc xây dựng và quản lý hồ dữ liệu hiệu quả có thể phức tạp.


Bài đăng trên blog này đi sâu vào ba công cụ mạnh mẽ có thể tối ưu hóa phương pháp tiếp cận hiện tại của bạn: tảng băng trôi Apache , dạng bảng, và MinIO. Các bước bên dưới sẽ hướng dẫn bạn cách kết hợp liền mạch các dịch vụ này để tạo ra kiến trúc hồ dữ liệu gốc đám mây mạnh mẽ, được tối ưu hóa đặc biệt cho khối lượng công việc AI/ML.

Bảng là gì?

Tabular là một nền tảng dữ liệu được tạo ra bởi những người sáng tạo ban đầu của Apache Iceberg. Nó được thiết kế để cung cấp một nền tảng lưu trữ phổ quát, độc lập, kết nối với bất kỳ lớp điện toán nào, loại bỏ sự khóa chặt của nhà cung cấp dữ liệu. Tính năng này rất quan trọng đối với ngăn xếp dữ liệu hiện đại. Nó cho phép người dùng chọn các công cụ lưu trữ và tính toán tốt nhất mà không bị buộc phải sử dụng bộ công cụ cũ và hoặc không khớp của một nhà cung cấp cụ thể.


trong một ngành kiến trúc của MinIO và Iceberg và có thể được nâng cao bằng Tabular. Tabular có thể được sử dụng để quản lý và truy vấn dữ liệu Iceberg được lưu trữ trong MinIO, cho phép lưu trữ và quản lý dữ liệu có cấu trúc theo cách có thể mở rộng, hiệu suất cao và dựa trên nền tảng đám mây. Các thành phần gốc của Kubernetes này hoạt động cùng nhau trơn tru với rất ít ma sát và dựa trên khả năng của nhau để hoạt động trên quy mô lớn.

Tại sao S3FileIO thay vì file-io của Hadoop?

Việc triển khai này tận dụng S3FileIO của Iceberg. S3FileIO được coi là tốt hơn file-io của Hadoop vì nhiều lý do. Một số trong đó chúng tôi đã thảo luận nơi khác :


  1. Tối ưu hóa cho lưu trữ đám mây : S3FileIO của Iceberg được thiết kế để hoạt động với bộ lưu trữ gốc trên đám mây.


  2. Cải thiện thông lượng và giảm thiểu điều tiết: Iceberg sử dụng ObjectStoreLocationProvider để phân phối tệp trên nhiều tiền tố trong nhóm MinIO, giúp giảm thiểu điều tiết và tối đa hóa thông lượng cho các hoạt động IO liên quan đến S3.


  3. Tính nhất quán chặt chẽ: Iceberg đã được đã cập nhật tận dụng tối đa tính nhất quán nghiêm ngặt bằng cách loại bỏ các kiểm tra tính nhất quán dư thừa có thể ảnh hưởng đến hiệu suất.


  4. Tải lên nhiều phần lũy tiến: S3FileIO của Iceberg triển khai một tải lên nhiều phần lũy tiến thuật toán tải lên song song các phần của tệp dữ liệu ngay khi mỗi phần sẵn sàng, giảm mức sử dụng đĩa cục bộ và tăng tốc độ tải lên.


  5. Xác minh tổng kiểm tra: Iceberg cho phép xác thực tổng kiểm tra cho API S3 ghi để đảm bảo tính toàn vẹn của các đối tượng được tải lên, có thể được kích hoạt bằng cách đặt thuộc tính danh mục thích hợp.


  6. Thẻ tùy chỉnh: Iceberg hỗ trợ thêm thẻ tùy chỉnh tới các đối tượng trong quá trình ghi và xóa bằng API S3, API này có thể hữu ích cho việc theo dõi và quản lý chi phí.


  7. Tránh bộ đệm âm: Giao diện FileIO trong Iceberg không yêu cầu đảm bảo nghiêm ngặt như Hệ thống tệp tương thích với Hadoop, cho phép nó tránh bộ nhớ đệm tiêu cực nếu không thì có thể làm giảm hiệu suất.


Ngược lại, Hệ thống tệp S3A của Hadoop, được sử dụng trước S3FileIO, không cung cấp cùng mức độ tối ưu hóa cho lưu trữ đám mây. Tất cả những điều này muốn nói: Đừng làm cản trở cơ sở hạ tầng hồ dữ liệu hướng tới tương lai của bạn bằng những cạm bẫy trong quá khứ.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy đảm bảo hệ thống của bạn đáp ứng các yêu cầu sau:

Nếu bạn đang bắt đầu từ đầu, bạn có thể cài đặt cả hai bằng cách sử dụng Máy tính để bàn Docker trình cài đặt cho nền tảng cụ thể của bạn. Việc này thường dễ dàng hơn việc tải xuống Docker và Docker Compose riêng biệt. Xác minh xem Docker đã được cài đặt chưa bằng cách chạy lệnh sau:


 docker-compose --version


Bắt đầu

Để bắt đầu, hãy sao chép hoặc sao chép tệp YAML trong Tabular's kho git . Bạn chỉ cần YAML cho hướng dẫn này. Hãy thoải mái khám phá phần còn lại của kho lưu trữ sau này.


Phá vỡ nó xuống

Tệp YAML được cung cấp là tệp cấu hình Docker Compose. Nó xác định một tập hợp các dịch vụ và cấu hình của chúng cho ứng dụng Docker nhiều container. Trong trường hợp này, có hai dịch vụ: Spark-Iceberg và MinIO. Hãy chia nhỏ từng phần:


1. Dịch vụ Spark-Iceberg:


 spark-iceberg: image: tabulario/spark-iceberg container_name: spark-iceberg build: spark/ networks: iceberg_net: depends_on: - rest - minio volumes: - ./warehouse:/home/iceberg/warehouse - ./notebooks:/home/iceberg/notebooks/notebooks environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 ports: - 8888:8888 - 8080:8080 - 10000:10000 - 10001:10001 rest: image: tabulario/iceberg-rest container_name: iceberg-rest networks: iceberg_net: ports: - 8181:8181 environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 - CATALOG_WAREHOUSE=s3://warehouse/ - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO - CATALOG_S3_ENDPOINT=http://minio:9000



image: Chỉ định hình ảnh Docker để sử dụng cho dịch vụ spark-iceberg. Trong trường hợp này, nó sử dụng hình ảnh tabulario/spark-iceberg:latest.

phụ thuộc_on: Chỉ định rằng dịch vụ spark-iceberg phụ thuộc vào phần còn lại và dịch vụ minio.

container_name: Gán một tên cụ thể (spark-iceberg) cho vùng chứa.

môi trường: Đặt các biến môi trường cho vùng chứa, bao gồm thông tin đăng nhập Spark và AWS.

tập: Gắn các thư mục cục bộ (./warehouse và ./notebooks) dưới dạng các tập bên trong vùng chứa.

cổng: Ánh xạ các cổng container tới các cổng máy chủ để truy cập Spark UI và các dịch vụ khác.


2. Dịch vụ Minio:


 minio: image: minio/minio container_name: minio environment: - MINIO_ROOT_USER=admin - MINIO_ROOT_PASSWORD=password - MINIO_DOMAIN=minio networks: iceberg_net: aliases: - warehouse.minio ports: - 9001:9001 - 9000:9000 command: ["server", "/data", "--console-address", ":9001"]


image: Chỉ định hình ảnh Docker cho dịch vụ MinIO.

container_name: Gán một tên cụ thể (MinIO) cho vùng chứa.

môi trường: Đặt các biến môi trường để định cấu hình MinIO, bao gồm thông tin đăng nhập của người dùng root.

cổng: Ánh xạ các cổng container tới các cổng máy chủ để truy cập giao diện người dùng MinIO.

lệnh: Chỉ định lệnh khởi động máy chủ MinIO với các tham số cụ thể.


Một khía cạnh khác của dịch vụ MinIO là mc , công cụ dòng lệnh của MinIO.


 mc: depends_on: - minio image: minio/mc container_name: mc networks: iceberg_net: environment: - AWS_ACCESS_KEY_ID=admin - AWS_SECRET_ACCESS_KEY=password - AWS_REGION=us-east-1 entrypoint: > /bin/sh -c " until (/usr/bin/mc config host add minio http://minio:9000 admin password) do echo '...waiting...' && sleep 1; done; /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "


phụ thuộc_on: Chỉ định rằng dịch vụ mc phụ thuộc vào dịch vụ MinIO.

image: Chỉ định hình ảnh Docker cho dịch vụ mc.

container_name: Gán tên cụ thể (mc) cho vùng chứa.

môi trường: Đặt các biến môi trường để định cấu hình máy khách MinIO.

điểm vào: Xác định lệnh điểm vào cho vùng chứa, bao gồm các bước thiết lập cho máy khách MinIO.


 /usr/bin/mc rm -r --force minio/warehouse; /usr/bin/mc mb minio/warehouse; /usr/bin/mc policy set public minio/warehouse; tail -f /dev/null "



Chuỗi lệnh này về cơ bản thực hiện các nhiệm vụ sau:


  • Xóa thư mục kho hiện có và nội dung của nó khỏi máy chủ MinIO.

  • Tạo một nhóm mới có tên là kho.

  • Đặt chính sách truy cập của nhóm kho thành công khai.


Tệp Docker Compose này phối hợp môi trường nhiều vùng chứa với các dịch vụ cho Spark, PostgreSQL, MinIO. Nó thiết lập các phần phụ thuộc, biến môi trường và các lệnh cần thiết để chạy các dịch vụ cùng nhau. Các dịch vụ này hoạt động song song để tạo môi trường phát triển xử lý dữ liệu bằng Spark và Iceberg với MinIO làm phụ trợ lưu trữ đối tượng.

Khởi động

Trong cửa sổ terminal, cd vào thư mục tabular-spark-setup trong kho lưu trữ và chạy lệnh sau:


 docker-compose up


Đăng nhập vào MinIO tại http://127.0.0.1:9001 bằng thông tin đăng nhập admin:password để biết rằng nhóm kho đã được tạo.



Khi tất cả các vùng chứa đã được thiết lập và chạy, bạn có thể truy cập máy chủ Jupyter Notebook của mình bằng cách điều hướng đến http://localhost:8888



Chạy một trong các sổ ghi chép mẫu và quay lại MinIO tại http://127.0.0.1:9001 để xem kho của bạn đã được điền dữ liệu.


Xây dựng Datalake hiện đại của bạn

Hướng dẫn xây dựng một cơ sở dữ liệu hiện đại với Iceberg, Tabular và MinIO này chỉ là bước khởi đầu. Bộ ba quyền lực này mở ra cánh cửa dẫn đến một thế giới đầy tiềm năng. Với những công cụ này, bạn có thể tích hợp và phân tích liền mạch tất cả dữ liệu của mình, có cấu trúc và không có cấu trúc, để khám phá các mẫu ẩn và thúc đẩy các quyết định dựa trên dữ liệu nhằm thúc đẩy sự đổi mới. Tận dụng hiệu quả và tính linh hoạt của kiến trúc này trong sản xuất để đẩy nhanh các sáng kiến AI/ML của bạn và khai thác tiềm năng thực sự của các mô hình học máy, đẩy nhanh con đường dẫn đến những khám phá đột phá của bạn. Hãy liên hệ với chúng tôi tại xin chà[email protected] hoặc trên của chúng tôi chùng xuống kênh nếu bạn có bất kỳ câu hỏi nào khi xây dựng.