Operazioni del file system in Azure Data Lake Storage Gen1 con Java SDK

Informazioni su come usare Java SDK di Azure Data Lake Storage Gen1 per eseguire operazioni di base, ad esempio creare cartelle, caricare e scaricare file di dati e così via. Per altre informazioni sulle Data Lake Storage Gen1, vedere Azure Data Lake Storage Gen1.

Per la documentazione dell'API Java SDK per Data Lake Storage Gen1 accedere a Documentazione dell'API Java di Azure Data Lake Storage Gen1.

Prerequisiti

  • Kit di sviluppo Java (JDK 7 o versione successiva, usando Java versione 1.7 o successive)
  • Account Data Lake Storage Gen1. Seguire le istruzioni fornite in Introduzione ad Azure Data Lake Storage Gen1 con il portale di Azure.
  • Maven. Questa esercitazione usa Maven per compilare e progettare le dipendenze. Sebbene sia possibile compilare senza ricorrere a un sistema di compilazione come Maven o Gradle, questi sistemi semplificano la gestione delle dipendenze.
  • (Facoltativo) E IDE come IntelliJ IDEA oppure Eclipse o simili.

Creare un'applicazione Java

Il codice di esempio disponibile in GitHub offre una descrizione dei processi di creazione dei file nell'archivio, concatenazione dei file, download di un file ed eliminazione di alcuni file nell'archivio. Questa sezione dell'articolo descrive in modo dettagliato le parti principali del codice.

  1. Creare un progetto Maven usando l'archetipo mvn dalla riga di comando o con un IDE. Per istruzioni su come creare un progetto Java usando IntelliJ, vedere qui. Per istruzioni su come creare un progetto Java usando Eclipse, vedere qui.

  2. Aggiungere le dipendenze seguenti al file pom.xml di Maven. Aggiungere il frammento di codice seguente prima del <tag /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 prima dipendenza consiste nell'uso di Data Lake Storage Gen1 SDK (azure-data-lake-store-sdk) dal repository maven. La seconda dipendenza serve a specificare il framework di registrazione (slf4j-nop) da usare per questa applicazione. L'SDK di Data Lake Storage Gen1 usa la facciata di registrazione SLF4J, che consente di scegliere tra diversi framework di registrazione comuni, ad esempio Log4j, registrazione Java, Logback e così via, o nessuna registrazione. Per questo esempio la registrazione viene disabilitata, quindi si usa il binding slf4j-nop. Per usare altre opzioni di registrazione nell'applicazione, vedere qui.

  3. Aggiungere le istruzioni import seguenti all'applicazione.

    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;
    

Authentication

Creare un client Data Lake Storage Gen1

Per la creazione di un oggetto ADLStoreClient è necessario specificare il nome dell'account Data Lake Storage Gen1 e il provider di token generato quando è stata eseguita l'autenticazione con Data Lake Storage Gen1 (vedere la sezione Autenticazione). Il nome dell'account Data Lake Storage Gen1 deve essere un nome di dominio completo. Ad esempio, sostituire COMPLETARE QUI con qualcosa simile a mydatalakestoragegen1.azuredatalakestore.net.

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

I frammenti di codice nelle sezioni seguenti contengono esempi di alcune operazioni comuni del file system. È possibile esaminare tutta la documentazione dell'API Java SDK di Data Lake Storage Gen1 dell'oggetto ADLStoreClient per vedere altre operazioni.

Creare una directory

Il frammento di codice seguente crea una struttura di directory nella radice dell'account Data Lake Storage Gen1 specificato.

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

Creare un file

Il frammento di codice seguente crea un file (c.txt) nella struttura di directory e scrive alcuni dati nel file.

// 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.");

È anche possibile creare un file (d.txt) usando matrici di byte.

// 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 definizione per la funzione getSampleContent usata nel frammento di codice precedente è disponibile come parte dell'esempio su GitHub.

Aggiungere a un file

Il frammento di codice seguente aggiunge contenuto a un file esistente.

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

La definizione per la funzione getSampleContent usata nel frammento di codice precedente è disponibile come parte dell'esempio su GitHub.

Leggere un file

Il frammento di codice seguente legge il contenuto di un file nell'account 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.");

Concatenare file

Il frammento di codice seguente concatena due file in un account Data Lake Storage Gen1. Se l'operazione ha esito positivo, il file concatenato sostituisce i due file esistenti.

// 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.");

Rinomina un file

Il frammento di codice seguente rinomina un file in un account Data Lake Storage Gen1.

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

Ottenere i metadati per un file

Il frammento di codice seguente recupera i metadati di un file nell'account Data Lake Storage Gen1.

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

Impostare le autorizzazioni in un file

Il frammento di codice seguente imposta le autorizzazioni nel file creato nella sezione precedente.

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

Elencare il contenuto della directory

Il frammento di codice seguente elenca il contenuto di una directory, in modo ricorsivo.

// 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 definizione per la funzione printDirectoryInfo usata nel frammento di codice precedente è disponibile come parte dell'esempio su GitHub.

Eliminare file e cartelle

Il frammento di codice seguente elimina le cartelle e i file specificati in un account Data Lake Storage Gen1, in modo ricorsivo.

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

Compilare ed eseguire l'applicazione

  1. Per eseguirla da un IDE, individuare l'applicazione e premere il pulsante Esegui. Per eseguirla da Maven, usare exec:exec.
  2. Per produrre un file jar autonomo eseguibile dalla riga di comando, compilare il file jar con tutte le dipendenze incluse usando il plug-in dell'assembly Maven. Il file pom.xml nell'esempio di codice sorgente su GitHub offre un esempio.

Passaggi successivi