Azure Data Lake Storage'da dizinleri ve dosyaları yönetmek için Java kullanma
Bu makalede, hiyerarşik ad alanına sahip depolama hesaplarında dizinleri ve dosyaları oluşturmak ve yönetmek için Java'nın nasıl kullanılacağı gösterilmektedir.
Dizinlerin ve dosyaların erişim denetim listelerini (ACL) alma, ayarlama ve güncelleştirme hakkında bilgi edinmek için bkz . Kullanma. Azure Data Lake Storage'da ACL'leri yönetmek için Java.
Paket (Maven) | Örnek | API başvurusu | 1. Nesil ile 2. Nesil eşlemesi | Geri Bildirim Ver
Önkoşullar
Azure aboneliği. Daha fazla bilgi için bkz . Azure ücretsiz deneme sürümünü edinme.
Hiyerarşik ad alanı etkinleştirilmiş bir depolama hesabı. Oluşturmak için bu yönergeleri izleyin.
Projenizi ayarlama
Başlamak için bu sayfayı açın ve Java kitaplığının en son sürümünü bulun. Ardından, pom.xml dosyasını metin düzenleyicinizde açın. Bu sürüme başvuran bir bağımlılık öğesi ekleyin.
İstemci uygulamanızın kimliğini Microsoft Entra Id kullanarak doğrulamayı planlıyorsanız Azure Kimlik kitaplığına bir bağımlılık ekleyin. Daha fazla bilgi için bkz . Java için Azure Identity istemci kitaplığı.
Ardından, bu içeri aktarma deyimlerini kod dosyanıza ekleyin.
import com.azure.identity.*;
import com.azure.storage.common.StorageSharedKeyCredential;
import com.azure.core.http.rest.PagedIterable;
import com.azure.core.util.BinaryData;
import com.azure.storage.file.datalake.*;
import com.azure.storage.file.datalake.models.*;
import com.azure.storage.file.datalake.options.*;
Not
Data Lake Storage'da çoklu protokol erişimi, uygulamaların hiyerarşik ad alanı (HNS) etkinleştirilmiş depolama hesaplarındaki verilerle çalışmak için hem Blob API'lerini hem de Data Lake Storage 2. Nesil API'lerini kullanmasını sağlar. Dizin işlemleri ve ACL'ler gibi Data Lake Storage 2. Nesil benzersiz özelliklerle çalışırken, bu makalede gösterildiği gibi Data Lake Storage 2. Nesil API'lerini kullanın.
Belirli bir senaryoda kullanılacak API'leri seçerken, HNS'nin iş yükleri ve uygulamalar üzerindeki bilinen sorunları ve etkisinin yanı sıra uygulamanızın iş yükünü ve gereksinimlerini göz önünde bulundurun.
Erişimi yetkilendirme ve veri kaynaklarına bağlanma
Bu makaledeki kod örnekleriyle çalışmak için depolama hesabını temsil eden yetkili bir DataLakeServiceClient örneği oluşturmanız gerekir. Bir nesneyi Microsoft Entra Id, hesap erişim anahtarı veya paylaşılan erişim imzası (SAS) kullanarak yetkilandırabilirsiniz DataLakeServiceClient
.
Uygulamanızın kimliğini Microsoft Entra ID ile doğrulamak için Java için Azure kimlik istemci kitaplığını kullanabilirsiniz.
DataLakeServiceClient örneği oluşturun ve DefaultAzureCredential sınıfının yeni bir örneğini geçirin.
static public DataLakeServiceClient GetDataLakeServiceClient(String accountName){
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder().build();
DataLakeServiceClient dataLakeServiceClient = new DataLakeServiceClientBuilder()
.endpoint("https://" + accountName + ".dfs.core.windows.net")
.credential(defaultCredential)
.buildClient();
return dataLakeServiceClient;
}
Verilere erişimi yetkilendirmek için kullanma DefaultAzureCredential
hakkında daha fazla bilgi edinmek için bkz . Java için Azure Identity istemci kitaplığı.
Kapsayıcı oluşturma
Kapsayıcı, dosyalarınız için dosya sistemi görevi görür. Aşağıdaki yöntemi kullanarak kapsayıcı oluşturabilirsiniz:
Aşağıdaki kod örneği bir kapsayıcı oluşturur ve daha sonra kullanmak üzere bir DataLakeFileSystemClient nesnesi döndürür:
public DataLakeFileSystemClient CreateFileSystem(
DataLakeServiceClient serviceClient,
String fileSystemName) {
DataLakeFileSystemClient fileSystemClient = serviceClient.createFileSystem(fileSystemName);
return fileSystemClient;
}
Dizin oluşturma
Aşağıdaki yöntemi kullanarak kapsayıcıda dizin başvurusu oluşturabilirsiniz:
Aşağıdaki kod örneği kapsayıcıya bir dizin ekler, ardından bir alt dizin ekler ve daha sonra kullanmak üzere bir DataLakeDirectoryClient nesnesi döndürür:
public DataLakeDirectoryClient CreateDirectory(
DataLakeFileSystemClient fileSystemClient,
String directoryName,
String subDirectoryName) {
DataLakeDirectoryClient directoryClient = fileSystemClient.createDirectory(directoryName);
return directoryClient.createSubdirectory(subDirectoryName);
}
Bir dizini yeniden adlandırma veya taşıma
Aşağıdaki yöntemi kullanarak dizini yeniden adlandırabilir veya taşıyabilirsiniz:
İstenen dizinin yolunu parametre olarak geçirin. Aşağıdaki kod örneğinde bir alt dizinin nasıl yeniden adlandırılası gösterilmektedir:
public DataLakeDirectoryClient RenameDirectory(
DataLakeFileSystemClient fileSystemClient,
String directoryPath,
String subdirectoryName,
String subdirectoryNameNew) {
DataLakeDirectoryClient directoryClient = fileSystemClient
.getDirectoryClient(String.join("/", directoryPath, subdirectoryName));
return directoryClient.rename(
fileSystemClient.getFileSystemName(),
String.join("/", directoryPath, subdirectoryNameNew));
}
Aşağıdaki kod örneğinde bir alt dizinin bir dizinden farklı bir dizine nasıl taşınacakları gösterilmektedir:
public DataLakeDirectoryClient MoveDirectory(
DataLakeFileSystemClient fileSystemClient,
String directoryPathFrom,
String directoryPathTo,
String subdirectoryName) {
DataLakeDirectoryClient directoryClient = fileSystemClient
.getDirectoryClient(String.join("/", directoryPathFrom, subdirectoryName));
return directoryClient.rename(
fileSystemClient.getFileSystemName(),
String.join("/", directoryPathTo, subdirectoryName));
}
Dizine dosya yükleme
Aşağıdaki yöntemi kullanarak içeriği yeni veya mevcut bir dosyaya yükleyebilirsiniz:
Aşağıdaki kod örneği, yöntemini kullanarak yerel bir dosyanın bir dizine nasıl yüklendiğini uploadFromFile
gösterir:
public void UploadFile(
DataLakeDirectoryClient directoryClient,
String fileName) {
DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);
fileClient.uploadFromFile("filePath/sample-file.txt");
}
Bu yöntemi kullanarak yeni bir dosyaya içerik oluşturabilir ve karşıya yükleyebilir veya parametresini overwrite
varolan bir dosyanın üzerine yazacak şekilde true
ayarlayabilirsiniz.
Dosyaya veri ekleme
Aşağıdaki yöntemi kullanarak bir dosyaya eklenecek verileri karşıya yükleyebilirsiniz:
Aşağıdaki kod örneği, aşağıdaki adımları kullanarak dosyanın sonuna veri eklemeyi gösterir:
- Üzerinde çalıştığınız dosya kaynağını temsil eden bir
DataLakeFileClient
nesne oluşturun. - yöntemini kullanarak dosyaya
DataLakeFileClient.append
veri yükleyin. - Daha önce karşıya yüklenen verileri dosyaya yazmak için yöntemini çağırarak
DataLakeFileClient.flush
karşıya yüklemeyi tamamlayın.
public void AppendDataToFile(
DataLakeDirectoryClient directoryClient) {
DataLakeFileClient fileClient = directoryClient.getFileClient("sample-file.txt");
long fileSize = fileClient.getProperties().getFileSize();
String sampleData = "Data to append to end of file";
fileClient.append(BinaryData.fromString(sampleData), fileSize);
fileClient.flush(fileSize + sampleData.length(), true);
}
Dizinden indirme
Aşağıdaki kod örneğinde, aşağıdaki adımları kullanarak bir dizinden yerel dosyaya dosya indirme işlemi gösterilmektedir:
- İndirmek istediğiniz dosyayı temsil eden bir
DataLakeFileClient
nesne oluşturun. DataLakeFileClient.readToFile
dosyasını okumak için yöntemini kullanın. Bu örnek, parametresinioverwrite
true
, varolan bir dosyanın üzerine yazan olarak ayarlar.
public void DownloadFile(
DataLakeDirectoryClient directoryClient,
String fileName) {
DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);
fileClient.readToFile("filePath/sample-file.txt", true);
}
Dizin içeriğini listeleme
Dizin içeriğini listelemek için aşağıdaki yöntemi kullanabilir ve sonucu numaralandırabilirsiniz:
Sonuçta yolların numaralandırılması, değerleri getirirken hizmete birden çok istekte bulunabilir.
Aşağıdaki kod örneği, bir dizinde bulunan her dosyanın adlarını yazdırır:
public void ListFilesInDirectory(
DataLakeFileSystemClient fileSystemClient,
String directoryName) {
ListPathsOptions options = new ListPathsOptions();
options.setPath(directoryName);
PagedIterable<PathItem> pagedIterable = fileSystemClient.listPaths(options, null);
java.util.Iterator<PathItem> iterator = pagedIterable.iterator();
PathItem item = iterator.next();
while (item != null) {
System.out.println(item.getName());
if (!iterator.hasNext()) {
break;
}
item = iterator.next();
}
}
Bir dizini silme
Aşağıdaki yöntemlerden birini kullanarak bir dizini silebilirsiniz:
- DataLakeDirectoryClient.delete
- DataLakeDirectoryClient.deleteIfExists
- DataLakeDirectoryClient.deleteWithResponse
Aşağıdaki kod örneği, belirsiz bir dizini ve dizinin altındaki tüm yolları silmek için kullanır deleteWithResponse
:
public void DeleteDirectory(
DataLakeFileSystemClient fileSystemClient,
String directoryName) {
DataLakeDirectoryClient directoryClient = fileSystemClient.getDirectoryClient(directoryName);
// Set to true to delete all paths beneath the directory
boolean recursive = true;
directoryClient.deleteWithResponse(recursive, null, null, null);
}