paint-brush
Iceberg, Tabular ve MinIO ile Etkili Modern Veri Mimarileri Oluşturmaile@minio
7,928 okumalar
7,928 okumalar

Iceberg, Tabular ve MinIO ile Etkili Modern Veri Mimarileri Oluşturma

ile MinIO7m2024/04/17
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Modern datalake'ler tüm veri ihtiyaçlarınız için merkezi bir merkez sağlar. Ancak etkili bir veri gölü oluşturmak ve yönetmek karmaşık olabilir.
featured image - Iceberg, Tabular ve MinIO ile Etkili Modern Veri Mimarileri Oluşturma
MinIO HackerNoon profile picture
0-item
1-item


Modern veri ortamı, yapılandırılmış ve yapılandırılmamış verileri sorunsuz bir şekilde entegre eden, zahmetsizce ölçeklenen ve verimli AI/ML iş yüklerini güçlendiren yeni bir altyapı türü gerektirir. burası modern veri gölleri tüm veri ihtiyaçlarınız için merkezi bir merkez sağlayarak devreye girin. Ancak etkili bir veri gölü oluşturmak ve yönetmek karmaşık olabilir.


Bu blog gönderisinde mevcut yaklaşımınızı optimize edebilecek üç güçlü araç derinlemesine inceleniyor: Apaçi Buzdağı , Tablo şeklinde, ve MinIO. Aşağıdaki adımlar, AI/ML iş yükleri için özel olarak optimize edilmiş sağlam, bulutta yerel bir veri gölü mimarisi oluşturmak için bu hizmetlerin sorunsuz bir şekilde nasıl birleştiği konusunda size yol gösterecektir.

Tabular nedir?

Tabular, Apache Iceberg'in orijinal yaratıcıları tarafından oluşturulan bir veri platformudur. Herhangi bir bilgi işlem katmanına bağlanan bağımsız, evrensel bir depolama platformu sağlamak ve veri sağlayıcısına bağlılığı ortadan kaldırmak üzere tasarlanmıştır. Bu özellik, modern veri yığını için kritik öneme sahiptir; kullanıcıların, belirli bir satıcının eskimiş ve/veya uyumsuz araç setine mecbur kalmadan, sınıfının en iyisi bilgi işlem ve depolama araçlarını seçmelerine olanak tanır.


bir mimari MinIO ve Iceberg'in ve Tabular tarafından geliştirilebilir. Tabular, MinIO'da depolanan Iceberg verilerini yönetmek ve sorgulamak için kullanılabilir; bu da yapılandırılmış verilerin ölçeklenebilir, yüksek performanslı ve bulutta yerel bir şekilde depolanmasına ve yönetilmesine olanak tanır. Bu Kubernetes yerel bileşenleri, çok az sürtünmeyle sorunsuz bir şekilde birlikte çalışır ve birbirlerinin uygun ölçekte performans gösterme yeteneklerini geliştirir.

Neden Hadoop'un file-io'su yerine S3FileIO?

Bu uygulama Iceberg'in S3FileIO'sundan yararlanır. S3FileIO, çeşitli nedenlerden dolayı Hadoop'un file-io'sundan daha iyi kabul edilir. Bunlardan bazılarını daha önce tartıştık başka yerde :


  1. Bulut Depolama için Optimize Edildi : Iceberg'in S3FileIO'su bulutta yerel depolamayla çalışacak şekilde tasarlanmıştır.


  2. Geliştirilmiş Verim ve En Aza İndirilmiş Kısıtlama: Iceberg, ObjectStoreLocationProvider dosyaları bir MinIO kümesinde birden çok önek boyunca dağıtmak için, bu da S3 ile ilgili IO işlemleri için kısıtlamayı en aza indirmeye ve verimi en üst düzeye çıkarmaya yardımcı olur.


  3. Sıkı Tutarlılık: Buzdağı güncellenmiş Performansı etkileyebilecek gereksiz tutarlılık kontrollerini ortadan kaldırarak sıkı tutarlılıktan tam olarak yararlanmak.


  4. Aşamalı Çok Parçalı Yükleme: Iceberg'in S3FileIO'su, aşamalı çok parçalı yükleme Her parça hazır olur olmaz veri dosyası parçalarını paralel olarak yükleyen algoritma, yerel disk kullanımını azaltır ve yükleme hızını artırır.


  5. Sağlama Toplamı Doğrulaması: Iceberg şunları sağlar: sağlama toplamı doğrulamaları S3 API'si için, yüklenen nesnelerin bütünlüğünü sağlamak üzere yazma işlemi yapılır ve bu, uygun katalog özelliğinin ayarlanmasıyla etkinleştirilebilir.


  6. Özel Etiketler: Iceberg eklemeyi destekliyor özel etiketler Maliyet takibi ve yönetimi açısından faydalı olabilecek S3 API ile yazma ve silme işlemleri sırasında nesnelere.


  7. Negatif Önbelleğe Almadan Kaçınma: Iceberg'deki FileIO arayüzü, Hadoop uyumlu FileSystem kadar katı garantiler gerektirmez; negatif önbelleğe almayı önleme aksi takdirde performansı düşürebilir.


Buna karşılık, S3FileIO'dan önce kullanılan Hadoop'un S3A Dosya Sistemi, bulut depolama için aynı seviyede optimizasyon sunmuyor. Bütün bunlar şunu söylüyor: Geleceğe yönelik veri gölü altyapınızı geçmişin tuzaklarıyla aksatmayın.

Önkoşullar

Başlamadan önce sisteminizin aşağıdaki gereksinimleri karşıladığından emin olun:

Sıfırdan başlıyorsanız, her ikisini de kullanarak yükleyebilirsiniz. Docker Masaüstü özel platformunuz için yükleyici. Genellikle Docker ve Docker Compose'u ayrı ayrı indirmekten daha kolaydır. Aşağıdaki komutu çalıştırarak Docker'ın kurulu olup olmadığını doğrulayın:


 docker-compose --version


Başlarken

Başlamak için YAML dosyasını Tabular'a kopyalayın veya kopyalayın. git deposu . Bu eğitim için yalnızca YAML'ye ihtiyacınız var. Deponun geri kalanını daha sonra keşfetmekten çekinmeyin.


Onu Kırmak

Sağlanan YAML dosyası bir Docker Compose yapılandırma dosyasıdır. Çok kapsayıcılı bir Docker uygulaması için bir dizi hizmeti ve bunların yapılandırmalarını tanımlar. Bu durumda iki hizmet vardır: Spark-Iceberg ve MinIO. Her bölümü parçalayalım:


1. Kıvılcım-Buzdağı Hizmeti:


 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: Kıvılcım buzdağı hizmeti için kullanılacak Docker görüntüsünü belirtir. Bu durumda tabulario/spark-iceberg:en son görüntüyü kullanır.

Depend_on: Spark-iceberg hizmetinin dinlenme ve minio hizmetlerine bağlı olduğunu belirtir.

Container_name: Konteynere belirli bir isim (kıvılcım-buzdağı) atar.

ortam: Spark ve AWS kimlik bilgileri de dahil olmak üzere konteyner için ortam değişkenlerini ayarlar.

hacimler: Yerel dizinleri (./warehouse ve ./notebooks) konteynerin içine birimler olarak bağlar.

portlar: Spark kullanıcı arayüzüne ve diğer hizmetlere erişim için konteyner bağlantı noktalarını ana bilgisayar bağlantı noktalarına eşler.


2. Minio Hizmeti:


 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: MinIO hizmeti için Docker görüntüsünü belirtir.

Container_name: Container'a belirli bir isim (MinIO) atar.

ortam: Kök kullanıcı kimlik bilgileri de dahil olmak üzere MinIO'yu yapılandırmak için ortam değişkenlerini ayarlar.

bağlantı noktaları: MinIO kullanıcı arayüzüne erişim için konteyner bağlantı noktalarını ana bilgisayar bağlantı noktalarına eşler.

komut: MinIO sunucusunu belirli parametrelerle başlatma komutunu belirtir.


MinIO hizmetinin bir başka yönü de mc , MinIO'nun komut satırı aracı.


 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 "


Depend_on: mc hizmetinin MinIO hizmetine bağlı olduğunu belirtir.

image: mc hizmeti için Docker görüntüsünü belirtir.

konteyner_adı: Konteynere belirli bir ad (mc) atar.

ortam: MinIO istemcisini yapılandırmak için ortam değişkenlerini ayarlar.

giriş noktası: MinIO istemcisi için kurulum adımları da dahil olmak üzere konteyner için giriş noktası komutunu tanımlar.


 /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 "



Bu komut dizisi esas olarak aşağıdaki görevleri yerine getirir:


  • Mevcut depo dizinini ve içeriğini MinIO sunucusundan kaldırır.

  • Ambar adında yeni bir paket oluşturur.

  • Ambar paketinin erişim ilkesini genel olarak ayarlar.


Bu Docker Compose dosyası, Spark, PostgreSQL, MinIO hizmetleriyle çok kapsayıcılı bir ortamı düzenler. Hizmetlerin birlikte çalıştırılması için gerekli bağımlılıkları, ortam değişkenlerini ve komutları ayarlar. Hizmetler, Spark ve Iceberg'i kullanarak nesne depolama arka ucu olarak MinIO'yu kullanarak veri işleme için bir geliştirme ortamı oluşturmak üzere birlikte çalışır.

Başlatılıyor

Bir terminal penceresinde, depodaki tabular-spark-setup dizinine cd yazın ve aşağıdaki komutu çalıştırın:


 docker-compose up


Depo paketinin oluşturulduğunu görmek için http://127.0.0.1:9001 adresinden admin:password kimlik bilgileriyle MinIO'da oturum açın.



Tüm kapsayıcılar çalışır duruma geldiğinde, http://localhost:8888 adresine giderek Jupyter Notebook sunucunuza erişebilirsiniz.



Örnek not defterlerinden birini çalıştırın ve deponuzun verilerle dolu olduğunu görmek için http://127.0.0.1:9001 adresinden MinIO'ya dönün.


Modern Datalake'inizi Oluşturma

Iceberg, Tabular ve MinIO ile modern bir datalake oluşturmaya yönelik bu eğitim yalnızca başlangıçtır. Bu güçlü üçlü, olasılıklar dünyasının kapılarını açıyor. Bu araçlarla, gizli kalıpları ortaya çıkarmak ve yeniliği teşvik eden veri odaklı kararları desteklemek için yapılandırılmış ve yapılandırılmamış tüm verilerinizi sorunsuz bir şekilde entegre edebilir ve analiz edebilirsiniz. AI/ML girişimlerinizi hızlandırmak ve makine öğrenimi modellerinizin gerçek potansiyelini ortaya çıkarmak için üretimde bu mimarinin verimliliğinden ve esnekliğinden yararlanın ve çığır açan keşiflere giden yolunuzu hızlandırın. Bize ulaşın [email protected] veya bizim Gevşek Oluştururken herhangi bir sorunuz olursa kanala bakın.