Opérations de gestion du système de fichiers sur Azure Data Lake Storage Gen1 à l’aide du Kit de développement logiciel (SDK) Java

Découvrez comment utiliser le Kit de développement logiciel (SDK) Java Azure Data Lake Storage Gen1 pour effectuer des opérations de base comme créer des dossiers ou charger et télécharger des fichiers de données. Pour plus d’informations sur Data Lake Storage Gen1, consultez Azure Data Lake Storage Gen1.

Vous pouvez accéder à la documentation de l’API du Kit de développement logiciel (SDK) Java pour Data Lake Storage Gen1 dans la documentation de l’API Java Azure Data Lake Storage Gen1.

Prérequis

  • Kit de développement Java (JDK 7 ou version ultérieure, utilisant Java version 1.7 ou ultérieure)
  • Compte Data Lake Storage Gen1. Suivez les instructions de Prise en main d’Azure Data Lake Storage Gen1 avec le portail Azure.
  • Maven. Ce didacticiel utilise Maven pour les dépendances de build et de projet. Bien qu’il soit possible de créer sans utiliser un système de build comme Maven ou Gradle, ces systèmes facilitent considérablement la gestion des dépendances.
  • (Facultatif) Et un environnement IDE comme IntelliJ IDEA ou Eclipse ou similaire.

Création d’une application Java

L’exemple de code disponible sur GitHub vous guide tout au long du processus de création de fichiers dans le magasin, de concaténation de fichiers, de téléchargement d’un fichier et de suppression de certains fichiers du compte. Cette section de l’article vous guide tout au long des principales parties du code.

  1. Créez un projet Maven en utilisant mvn archetype à partir de la ligne de commande ou à l’aide d’un environnement de développement intégré (IDE). Vous trouverez ici des instructions sur la création d’un projet Java à l’aide d’IntelliJ. Vous trouverez ici des instructions sur la création d’un projet à l’aide d’Eclipse.

  2. Ajoutez les dépendances suivantes à votre fichier Maven pom.xml. Ajoutez l’extrait de code suivant avant la balise </project> :

    <dependencies>
        <dependency>
        <groupId>com.microsoft.azure</groupId>
        <artifactId>azure-data-lake-store-sdk</artifactId>
        <version>2.1.5</version>
        </dependency>
        <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-nop</artifactId>
        <version>1.7.21</version>
        </dependency>
    </dependencies>
    

    La première dépendance consiste à utiliser le kit de développement logiciel (SDK) Data Lake Storage Gen1 (azure-data-lake-store-sdk) à partir du référentiel maven. La seconde dépendance consiste à spécifier le framework de journalisation (slf4j-nop) à utiliser pour cette application. Le SDK Data Lake Storage Gen1 utilise la façade de journalisation SLF4J. Cela vous permet de choisir parmi plusieurs frameworks de journalisation populaires, par exemple Log4j, la journalisation Java, Logback, etc. Vous pouvez aussi n’utiliser aucune journalisation. Pour cet exemple, nous désactivons la journalisation et, par conséquent, nous utilisons la liaison slf4j-nop. Vous trouverez ici des informations pour utiliser d’autres options de journalisation.

  3. Ajoutez les instructions import ci-après à votre application.

    import com.microsoft.azure.datalake.store.ADLException;
    import com.microsoft.azure.datalake.store.ADLStoreClient;
    import com.microsoft.azure.datalake.store.DirectoryEntry;
    import com.microsoft.azure.datalake.store.IfExists;
    import com.microsoft.azure.datalake.store.oauth2.AccessTokenProvider;
    import com.microsoft.azure.datalake.store.oauth2.ClientCredsTokenProvider;
    
    import java.io.*;
    import java.util.Arrays;
    import java.util.List;
    

Authentification

Créer un client Data Lake Storage Gen1

La création d’un objet ADLStoreClient vous oblige à spécifier les noms du compte Data Lake Storage Gen1 et du fournisseur de jetons que vous avez générés quand vous vous êtes authentifié avec Data Lake Storage Gen1 (voir la section Authentification). Le nom du compte Data Lake Storage Gen1 doit être un nom de domaine complet. Par exemple, remplacez FILL-IN-HERE (à remplir) par quelque chose comme mydatalakestoragegen1.azuredatalakestore.net.

private static String accountFQDN = "FILL-IN-HERE";  // full account FQDN, not just the account name
ADLStoreClient client = ADLStoreClient.createClient(accountFQDN, provider);

Les extraits de code des sections suivantes contiennent des exemples d’opérations de gestion du système de fichiers communes. Vous pouvez consulter toute la documentation sur l’API SDK Java Data Lake Storage Gen1 de l’objet ADLStoreClient pour afficher d’autres opérations.

Créer un répertoire

L’extrait de code suivant permet de créer la structure d’un répertoire à la racine du compte Data Lake Storage Gen1 spécifié.

// create directory
client.createDirectory("/a/b/w");
System.out.println("Directory created.");

Créer un fichier

L’extrait de code suivant permet de créer un fichier (c.txt) dans la structure du répertoire et d’y écrire des données.

// create file and write some content
String filename = "/a/b/c.txt";
OutputStream stream = client.createFile(filename, IfExists.OVERWRITE  );
PrintStream out = new PrintStream(stream);
for (int i = 1; i <= 10; i++) {
    out.println("This is line #" + i);
    out.format("This is the same line (%d), but using formatted output. %n", i);
}
out.close();
System.out.println("File created.");

Vous pouvez aussi créer un fichier (d.txt) à l’aide de tableaux d’octets.

// create file using byte arrays
stream = client.createFile("/a/b/d.txt", IfExists.OVERWRITE);
byte[] buf = getSampleContent();
stream.write(buf);
stream.close();
System.out.println("File created using byte array.");

La définition de la fonction getSampleContent (utilisée dans l’extrait de code précédent) est disponible dans l’exemple sur GitHub.

Ajout à un fichier

L’extrait de code suivant permet d’ajouter du contenu à un fichier existant.

// append to file
stream = client.getAppendStream(filename);
stream.write(getSampleContent());
stream.close();
System.out.println("File appended.");

La définition de la fonction getSampleContent (utilisée dans l’extrait de code précédent) est disponible dans l’exemple sur GitHub.

Lire un fichier

L’extrait de code suivant permet de lire le contenu d’un fichier dans un compte Data Lake Storage Gen1.

// Read File
InputStream in = client.getReadStream(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line;
while ( (line = reader.readLine()) != null) {
    System.out.println(line);
}
reader.close();
System.out.println();
System.out.println("File contents read.");

Concaténation de fichiers

L’extrait de code suivant permet de concaténer deux fichiers dans un compte Data Lake Storage Gen1. En cas de réussite, le fichier concaténé remplace les deux fichiers existants.

// concatenate the two files into one
List<String> fileList = Arrays.asList("/a/b/c.txt", "/a/b/d.txt");
client.concatenateFiles("/a/b/f.txt", fileList);
System.out.println("Two files concatenated into a new file.");

Renommer un fichier

L’extrait de code suivant permet de renommer un fichier dans un compte Data Lake Storage Gen1.

//rename the file
client.rename("/a/b/f.txt", "/a/b/g.txt");
System.out.println("New file renamed.");

Obtenir les métadonnées d’un fichier

L’extrait de code suivant permet d’obtenir les métadonnées d’un fichier du compte Data Lake Storage Gen1.

// get file metadata
DirectoryEntry ent = client.getDirectoryEntry(filename);
printDirectoryInfo(ent);
System.out.println("File metadata retrieved.");

Définir les autorisations sur un fichier

L’extrait de code suivant permet de définir les autorisations sur le fichier que vous avez créé dans la section précédente.

// set file permission
client.setPermission(filename, "744");
System.out.println("File permission set.");

Afficher le contenu du répertoire

L’extrait de code suivant permet d’afficher le contenu d’un répertoire de manière récursive.

// list directory contents
List<DirectoryEntry> list = client.enumerateDirectory("/a/b", 2000);
System.out.println("Directory listing for directory /a/b:");
for (DirectoryEntry entry : list) {
    printDirectoryInfo(entry);
}
System.out.println("Directory contents listed.");

La définition de la fonction printDirectoryInfo (utilisée dans l’extrait de code précédent) est disponible dans l’exemple sur GitHub.

Supprimer des fichiers et dossiers

L’extrait de code suivant permet de supprimer les fichiers et dossiers spécifiques d’un compte Data Lake Storage Gen1 de manière récursive.

// delete directory along with all the subdirectories and files in it
client.deleteRecursive("/a");
System.out.println("All files and folders deleted recursively");
promptEnterKey();

Génération et exécution de l’application

  1. Pour une exécution au sein d’un environnement IDE, recherchez et appuyez sur le bouton Run (Exécuter). Pour une exécution depuis Maven, utilisez exec:exec.
  2. Pour produire un fichier jar autonome que vous pouvez exécuter à partir de la ligne de commande, créez le fichier jar en incluant toutes les dépendances à l’aide du plug-in assembly Maven. Le fichier pom.xml de l'exemple de code source sur GitHub contient un exemple.

Étapes suivantes