Operazioni del file system in Azure Data Lake Storage Gen1 con Java SDK
Informazioni su come usare Azure Data Lake Storage Gen1 Java SDK per eseguire operazioni di base, ad esempio creare cartelle, caricare e scaricare file di dati e così via. Per altre informazioni su Data Lake Storage Gen1, vedere Azure Data Lake Storage Gen1.
È possibile accedere alla documentazione dell'API Java SDK per Data Lake Storage Gen1 documentazione dell'API Java di Azure Data Lake Storage Gen1.
Prerequisiti
- Java Development Kit (JDK 7 o versione successiva, con Java versione 1.7 o successiva)
- Data Lake Storage Gen1 Account. Seguire le istruzioni riportate in Introduzione ad Azure Data Lake Storage Gen1 usando il portale di Azure.
- Maven. Questa esercitazione utilizza Maven per la compilazione e le dipendenze del progetto. Sebbene sia possibile compilare senza usare un sistema di compilazione come Maven o Gradle, questi sistemi semplificano notevolmente la gestione delle dipendenze.
- (Facoltativo) Un IDE come IntelliJ IDEA o Eclipse o simili.
Creare un'applicazione Java
L'esempio di codice disponibile in GitHub illustra il processo di creazione di file nell'archivio, la concatenazione di file, il download di un file e l'eliminazione di alcuni file nell'archivio. Questa sezione dell'articolo illustra le parti principali del codice.
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.
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'usare Data Lake Storage Gen1 SDK (
azure-data-lake-store-sdk
) dal repository maven. La seconda dipendenza consiste nel specificare il framework di registrazione (slf4j-nop
) da usare per questa applicazione. Data Lake Storage Gen1 SDK utilizza SLF4J come facciata di logging, che consente di scegliere tra alcuni dei framework di logging più diffusi, come Log4j, Java Logging, Logback e così via, oppure di non utilizzare alcun logging. Per questo esempio la registrazione viene disabilitata, quindi si usa il binding slf4j-nop. Per usare altre opzioni di registrazione nell'app, vedere qui.Aggiungere le seguenti istruzioni di importazione nell'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
- Per l'autenticazione dell'utente finale per l'applicazione, vedere 'autenticazione dell'utente finale con Data Lake Storage Gen1 usando Java.
- Per l'autenticazione da servizio a servizio per l'applicazione, vedere l'autenticazione da servizio a servizio con Data Lake Storage Gen1 utilizzando Java.
Creare un client Data Lake Storage Gen1
La creazione di un oggetto ADLStoreClient richiede di specificare il nome dell'account Data Lake Storage Gen1 e il provider di token generato durante l'autenticazione con Data Lake Storage Gen1 (vedere la sezione Authentication). Il nome dell'account Data Lake Storage Gen1 deve essere un nome di dominio completo. Ad esempio, sostituire FILL-IN-HERE con qualcosa come 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 la documentazione completa dell'API Java SDK di Data Lake Storage Gen1 dell'oggetto ADLStoreClient per visualizzare altre operazioni.
Creare una cartella
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 della funzione getSampleContent
usata nel precedente frammento di codice è disponibile come parte dell'esempio su GitHub.
Accodare 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 da un file in un 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. In caso di 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 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 per un file in un account Data Lake Storage Gen1.
// get file metadata
DirectoryEntry ent = client.getDirectoryEntry(filename);
printDirectoryInfo(ent);
System.out.println("File metadata retrieved.");
Impostare le autorizzazioni per un file
Il frammento di codice seguente imposta le autorizzazioni per il file creato nella sezione precedente.
// set file permission
client.setPermission(filename, "744");
System.out.println("File permission set.");
Elenca i contenuti 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 i file e le cartelle 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
- Per eseguire dall'interno di un IDE, individuare e premere il pulsante Esegui. Per eseguire in Maven, usare exec:exec.
- Per produrre un file JAR autonomo che è possibile eseguire dalla riga di comando, compila il file JAR con tutte le dipendenze incluse, usando il plug-in assembly Maven. Il pom.xml nel codice sorgente di esempio su GitHub presenta un esempio.