DBFS ve Unity Kataloğu için en iyi uygulamalar
Unity Kataloğu, veri idaresine DBFS'den tamamen farklı yaklaşan bir dizi yeni yapılandırma ve kavram tanıtır. Bu makalede Unity Kataloğu dış konumları ve DBFS ile çalışmayla ilgili birkaç en iyi yöntem özetlenmiştir.
Databricks, Unity Kataloğu özellikli Azure Databricks çalışma alanlarında çoğu kullanım örneğinde DBFS ve bağlı bulut nesne depolaması kullanılmasını önerir. Bu makalede, bağlı bulut nesne depolaması kullanmanız gereken birkaç senaryo açıklanmaktadır. Burada depolanan dosyaları veya verileri Unity Kataloğu'na geçirmeniz gerekmediği sürece Databricks'in DBFS kökünü Unity Kataloğu ile birlikte kullanmanızı önermediğini unutmayın.
Unity Kataloğu etkin çalışma alanlarında DBFS nasıl kullanılır?
Tablolarda hive_metastore
gerçekleştirilen eylemler, DBFS tarafından yönetilen verileri ve depolama kimlik bilgilerini içerebilen eski veri erişim desenlerini kullanır. Çalışma alanı kapsamındaki hive_metastore
yönetilen tablolar DBFS kökünde depolanır.
DBFS tek kullanıcı erişim modunda nasıl çalışır?
Tek kullanıcı erişim moduyla yapılandırılan kümeler, DBFS kökündeki tüm dosyalar ve bağlı veriler dahil olmak üzere DBFS'ye tam erişime sahiptir.
DBFS paylaşılan erişim modunda nasıl çalışır?
Paylaşılan erişim modu, Unity Kataloğu veri idaresi ile Azure Databricks eski tablo ACL'lerini birleştirir. içindeki hive_metastore
verilere erişim yalnızca açıkça izinleri olan kullanıcılar tarafından kullanılabilir.
Doğrudan DBFS kullanarak dosyalarla etkileşime geçmek için izinlere sahip ANY FILE
olmanız gerekir. ANY FILE
Kullanıcıların içindeki eski tablo ACL'lerini hive_metastore
atlamasına ve DBFS tarafından yönetilen tüm verilere erişmesine izin verdiğinden, Databricks bu ayrıcalığı sağlarken dikkatli olunmasını önerir.
DBFS'i Unity Kataloğu dış konumlarıyla kullanmayın
Unity Kataloğu, yönetilen nesne depolama dizinlerindeki izinleri tanımlamak için tam bulut URI yollarını kullanarak dış konumlardaki verilere erişimin güvenliğini sağlar. DBFS bağlamaları, Unity Kataloğu'nu tamamen atlayan tamamen farklı bir veri erişim modeli kullanır. Databricks, çalışma alanları veya hesaplar arasında veri paylaşırken de dahil olmak üzere DBFS bağlamaları ve UC dış birimleri arasında bulut nesnesi depolama birimlerini yeniden kullanmamanızı önerir.
Unity Kataloğu tarafından yönetilen depolama alanınızın güvenliğini sağlama
Yönetilen tablolar ve birimler için veri dosyalarını depolamak için yönetilen depolama konumlarını kullanan Unity Kataloğu.
Databricks yönetilen depolama konumları için aşağıdakileri önerir:
- Yeni depolama hesaplarını veya demetleri kullanın.
- Unity Kataloğu için özel bir kimlik ilkesi tanımlayın.
- Unity Kataloğu tarafından yönetilen Azure Databricks'e tüm erişimi kısıtlayın.
- Unity Kataloğu için oluşturulan kimlik erişim ilkelerine tüm erişimi kısıtlayın.
Var olan verileri dış konumlara ekleme
Dış konumları kullanarak mevcut depolama hesaplarını Unity Kataloğu'na yüklemek mümkündür. En yüksek güvenlik için Databricks, diğer tüm depolama kimlik bilgilerini ve erişim düzenlerini iptal ettikten sonra yalnızca depolama hesaplarının dış konumlara yüklenmesini önerir.
Unity Kataloğu'nda dış konum olarak DBFS kökü olarak kullanılan bir depolama hesabını asla yüklememelisiniz.
Küme yapılandırmaları Unity Kataloğu dosya sistemi erişimi tarafından yoksayılır
Unity Kataloğu, dosya sistemi ayarları için küme yapılandırmalarına uygun değildir. Bu, Unity Kataloğu'nu kullanarak verilere erişirken bulut nesne depolamasıyla özel davranış yapılandırmaya yönelik Hadoop dosya sistemi ayarlarının çalışmadığı anlamına gelir.
Birden çok yol erişimiyle ilgili sınırlama
Unity Kataloğu ve DBFS'yi genel olarak birlikte kullanabilirsiniz ancak aynı komutta veya not defteri hücresinde farklı erişim yöntemleri kullanılarak bir üst/alt ilişkiyi eşit veya paylaşan yollara başvurulamaz.
Örneğin, konumunda bir dış tablo foo
ve hive_metastore
a/b/c
üzerinde a/b/
Unity Kataloğu'nda bir dış konum tanımlanmışsa, aşağıdaki kod hataya neden olur:
spark.read.table("foo").filter("id IS NOT NULL").write.mode("overwrite").save("a/b/c")
Bu mantık iki hücreye ayrılırsa bu hata oluşmaz:
df = spark.read.table("foo").filter("id IS NOT NULL")
df.write.mode("overwrite").save("a/b/c")