Operazioni del file system in Data Lake Store con Java SDK

Informazioni su come usare l'SDK Java con Azure Data Lake Store per eseguire le operazioni di base, ad esempio creare cartelle, caricare e scaricare i file di dati e così via. Per altre informazioni su Data Lake, vedere Azure Data Lake Store.

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

Prerequisiti

  • Kit di sviluppo Java (JDK 7 o versione successiva, usando Java versione 1.7 o successive)
  • Account di Azure Data Lake Store. Seguire le istruzioni fornite in Introduzione ad Azure Data Lake Store 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 serve a usare l'SDK di Data Lake Store (azure-data-lake-store-sdk) dal repository di Maven. La seconda dipendenza serve a specificare il framework di registrazione (slf4j-nop) da usare per questa applicazione. L'SDK di Data Lake Store usa la façade di registrazione SLF4J, che consente di scegliere tra un numero di framework di registrazione comuni, come SLF4J, 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;
    

Autenticazione

Creare un client Azure Data Lake Store

Per la creazione di un oggetto ADLStoreClient, è necessario specificare il nome dell'account Data Lake Store e il provider di token generato quando è stata eseguita l'autenticazione con Data Lake Store (vedere la sezione Autenticazione). Il nome dell'account Data Lake Store deve essere un nome di dominio completo. Ad esempio, sostituire COMPLETARE QUI con qualcosa simile a mydatalakestore.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 API relativa all'SDK Java di Data Lake Store 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 Store 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 Store.

// 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 nell'account Data Lake Store. 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.");

Rinominare un file

Il frammento di codice seguente rinomina un file nell'account Data Lake Store.

//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 per un file nell'account Data Lake Store.

// 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 Store, 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