Megosztás a következőn keresztül:


Címtárak és fájlok kezelése a Java használatával az Azure Data Lake Storage Gen2-ben

Ez a cikk bemutatja, hogyan hozhat létre és kezelhet címtárakat és fájlokat a Java használatával hierarchikus névtérrel rendelkező tárfiókokban.

A címtárak és fájlok hozzáférés-vezérlési listáinak (ACL) beszerzéséről, beállításáról és frissítéséről a Használat című témakörben olvashat . Java az ACL-ek kezeléséhez az Azure Data Lake Storage Gen2-ben.

Package (Maven) | Samples | API reference | Gen1 to Gen2 mapping | Give Feedback

Előfeltételek

  • Azure-előfizetés. További információ: Ingyenes Azure-próbaidőszak lekérése.

  • Olyan tárfiók, amely engedélyezve van a hierarchikus névtérrel. Az alábbi utasításokat követve hozzon létre egyet.

A projekt beállítása

Első lépésként nyissa meg ezt a lapot , és keresse meg a Java-kódtár legújabb verzióját. Ezután nyissa meg a pom.xml fájlt a szövegszerkesztőben. Adjon hozzá egy függőségi elemet, amely az adott verzióra hivatkozik.

Ha microsoft Entra-azonosítóval szeretné hitelesíteni az ügyfélalkalmazást, adjon hozzá egy függőséget az Azure Identity-kódtárhoz. További információkért tekintse meg a Java Azure Identity ügyfélkódtárát.

Ezután adja hozzá ezeket az importálási utasításokat a kódfájlhoz.

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.*;

Feljegyzés

A Data Lake Storage többprotokollos hozzáférése lehetővé teszi az alkalmazások számára, hogy a Blob API-kat és a Data Lake Storage Gen2 API-kat is használják a hierarchikus névtérrel (HNS) rendelkező tárfiókokban lévő adatok kezeléséhez. A Data Lake Storage Gen2-ben egyedülálló képességek, például a címtárműveletek és az ACL-ek használatakor használja a Data Lake Storage Gen2 API-kat, ahogyan az ebben a cikkben látható.

Az adott forgatókönyvben használni kívánt API-k kiválasztásakor vegye figyelembe az alkalmazás számítási feladatait és igényeit, valamint a HNS ismert problémáit és a számítási feladatokra és alkalmazásokra gyakorolt hatását.

Hozzáférés engedélyezése és csatlakozás az adaterőforrásokhoz

A cikkben szereplő példakódok használatához létre kell hoznia egy hitelesített DataLakeServiceClient-példányt , amely a tárfiókot jelöli. Az objektumokat DataLakeServiceClient a Microsoft Entra-azonosító, a fiókhozzáférés kulcsa vagy a közös hozzáférésű jogosultságkód (SAS) használatával engedélyezheti.

Az Azure Identity Java-ügyfélkódtárával hitelesítheti az alkalmazást a Microsoft Entra-azonosítóval.

Hozzon létre egy DataLakeServiceClient-példányt , és adja át a DefaultAzureCredential osztály új példányát.

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;
}

Ha többet szeretne megtudni az adatokhoz való hozzáférés engedélyezéséről DefaultAzureCredential , tekintse meg a Java-hoz készült Azure Identity ügyfélkódtárat.

Tároló létrehozása

A tároló fájlrendszerként működik a fájlokhoz. Tárolót a következő módszerrel hozhat létre:

Az alábbi példakód létrehoz egy tárolót, és egy DataLakeFileSystemClient objektumot ad vissza későbbi használatra:

public DataLakeFileSystemClient CreateFileSystem(
        DataLakeServiceClient serviceClient,
        String fileSystemName) {

    DataLakeFileSystemClient fileSystemClient = serviceClient.createFileSystem(fileSystemName);

    return fileSystemClient;
}

Címtár létrehozása

A tárolóban a következő módszerrel hozhat létre címtárhivatkozást:

Az alábbi példakód egy könyvtárat ad hozzá egy tárolóhoz, majd hozzáad egy alkönyvtárat, és visszaad egy DataLakeDirectoryClient objektumot későbbi használatra:

public DataLakeDirectoryClient CreateDirectory(
        DataLakeFileSystemClient fileSystemClient,
        String directoryName,
        String subDirectoryName) {

    DataLakeDirectoryClient directoryClient = fileSystemClient.createDirectory(directoryName);

    return directoryClient.createSubdirectory(subDirectoryName);
}

Címtár átnevezése vagy áthelyezése

A címtárak átnevezhetők vagy áthelyezhetők a következő módszerrel:

Adja meg a kívánt könyvtár elérési útját paraméterként. Az alábbi példakód bemutatja, hogyan nevezhet át alkönyvtárat:

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));
}

Az alábbi példakód bemutatja, hogyan helyezhet át egy alkönyvtárat egy könyvtárból egy másik könyvtárba:

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));
}

Fájl feltöltése könyvtárba

A következő módszerrel tölthet fel tartalmat egy új vagy meglévő fájlba:

Az alábbi példakód bemutatja, hogyan tölthet fel helyi fájlt egy könyvtárba a uploadFromFile metódus használatával:

public void UploadFile(
        DataLakeDirectoryClient directoryClient,
        String fileName) {

    DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);

    fileClient.uploadFromFile("filePath/sample-file.txt");
}

Ezzel a módszerrel tartalmakat hozhat létre és tölthet fel egy új fájlba, vagy beállíthatja, hogy true a overwrite paraméter felülírjon egy meglévő fájlt.

Adatok hozzáfűzése fájlhoz

A fájlhoz fűzendő adatokat az alábbi módszerrel töltheti fel:

Az alábbi példakód bemutatja, hogyan fűzhet adatokat egy fájl végéhez az alábbi lépésekkel:

  • Hozzon létre egy DataLakeFileClient objektumot, amely a használt fájlerőforrást jelöli.
  • Adatok feltöltése a fájlba a DataLakeFileClient.append módszerrel.
  • A feltöltés befejezéséhez hívja meg a metódust a DataLakeFileClient.flush korábban feltöltött adatok fájlba írásához.
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);
}

Letöltés könyvtárból

Az alábbi példakód bemutatja, hogyan tölthet le egy fájlt egy könyvtárból egy helyi fájlba az alábbi lépésekkel:

  • Hozzon létre egy DataLakeFileClient objektumot, amely a letölteni kívánt fájlt jelöli.
  • A metódus használatával DataLakeFileClient.readToFile olvassa be a fájlt. Ez a példa egy overwrite meglévő fájlt felülíró paramétert trueállít be.
public void DownloadFile(
        DataLakeDirectoryClient directoryClient,
        String fileName) {

    DataLakeFileClient fileClient = directoryClient.getFileClient(fileName);

    fileClient.readToFile("filePath/sample-file.txt", true);
}

Könyvtár tartalmának listázása

A címtár tartalmát az alábbi módszerrel és az eredmény számbavételével listázhatja:

Az eredményben szereplő elérési utak számbavétele több kérést is eredményezhet a szolgáltatáshoz az értékek beolvasása közben.

Az alábbi példakód a könyvtárban található egyes fájlok nevét nyomtatja ki:

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();
    }

}

Könyvtár törlése

A címtárat az alábbi módszerek egyikével törölheti:

Az alábbi példakód egy nem létező könyvtár és a könyvtár alatti összes elérési út törlésére szolgál 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);
}

Lásd még