Dateisystemvorgänge in Azure Data Lake Storage Gen1 mit dem Java SDK

Hier erfahren Sie, wie Sie mit dem Azure Data Lake Storage Gen1 Java SDK einfache Vorgänge ausführen (also beispielsweise Ordner erstellen oder Datendateien hoch- und herunterladen). Weitere Informationen zu Data Lake Storage Gen1 finden Sie unter Azure Data Lake Storage Gen1.

Die Java SDK-API-Dokumente für Azure Data Lake Storage Gen1 finden Sie hier.

Voraussetzungen

  • Java Development Kit (JDK 7 oder höher mit Java-Version 1.7 oder höher)
  • Data Lake Storage Gen1-Konto. Befolgen Sie die Anweisungen unter Erste Schritte mit Azure Data Lake Storage Gen1 über das Azure-Portal.
  • Maven. Dieses Tutorial verwendet Maven für die Erstellung und für Projektabhängigkeiten. Die Erstellung ist zwar auch ohne ein Buildsystem wie Maven oder Gradle möglich, mit einem solchen System lassen sich Abhängigkeiten jedoch deutlich einfacher verwalten.
  • (Optional) Eine IDE wie IntelliJ IDEA oder Eclipse.

Erstellen einer Java-Anwendung

Das auf GitHub verfügbare Codebeispiel veranschaulicht Schritt für Schritt den Prozess zum Erstellen der Dateien im Speicher, zum Verketten von Dateien, zum Herunterladen einer Datei und zum Löschen einiger Dateien aus dem Speicher. In diesem Abschnitt des Artikels werden die wichtigsten Teile des Codes beschrieben.

  1. Erstellen Sie ein Maven-Projekt. Verwenden Sie hierfür mvn archetype in der Befehlszeile oder eine IDE. Eine Anleitung zum Erstellen eines Java-Projekts mit IntelliJ finden Sie hier. Eine Anleitung zum Erstellen eines Projekts mit Eclipse finden Sie hier.

  2. Fügen Sie Ihrer Maven-Datei pom.xml die folgenden Abhängigkeiten hinzu. Fügen Sie den folgenden Codeausschnitt vor dem Tag </project> hinzu:

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

    Die erste Abhängigkeit ist die Verwendung des Data Lake Storage Gen1 SDK (azure-data-lake-store-sdk) aus dem Maven-Repository. Die zweite Abhängigkeit ist die Angabe des Protokollierungsframeworks (slf4j-nop) für diese Anwendung. Das Data Lake Storage Gen1 SDK verwendet die Protokollierungsfassade SLF4J, bei der Sie zwischen mehreren gängigen Protokollierungsframeworks wie Log4j, Java-Protokollierung, Logback usw. auswählen oder die Protokollierung deaktivieren können. Da wir im vorliegenden Beispiel die Protokollierung deaktivieren möchten, verwenden wir die Bindung slf4j-nop. Informationen zur Verwendung anderer Protokollierungsoptionen für Ihre App finden Sie hier.

  3. Fügen Sie Ihrer Anwendung die folgenden Importanweisungen hinzu.

    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;
    

Authentifizierung

Erstellen eines Data Lake Storage Gen1-Clients

Zum Erstellen eines Objekts vom Typ ADLStoreClient müssen Sie den Data Lake Storage Gen1-Kontonamen und den Tokenanbieter angeben, den Sie beim Authentifizieren mit Data Lake Storage Gen1 angegeben haben (siehe Abschnitt Authentifizierung). Beim Namen des Data Lake Storage Gen1-Kontos muss es sich um einen vollqualifizierten Domänennamen handeln. Ersetzen Sie FILL-IN-HERE also beispielsweise durch einen Wert wie mydatalakestoragegen1.azuredatalakestore.net.

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

Die Codeausschnitte in den folgenden Abschnitten enthalten Beispiele für einige allgemeine Dateisystemvorgänge. Weitere Vorgänge finden Sie in den vollständigen API-Dokumenten für das Data Lake Storage Gen1 Java SDK des Objekts ADLStoreClient.

Erstellen eines Verzeichnisses

Im folgenden Codeausschnitt wird eine Verzeichnisstruktur im Stammverzeichnis des von Ihnen angegebenen Data Lake Storage Gen1-Kontos erstellt.

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

Erstellen von Dateien

Im folgenden Codeausschnitt wird eine Datei (c.txt) in der Verzeichnisstruktur erstellt, und es werden einige Daten in die Datei geschrieben.

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

Sie können auch mithilfe von Bytearrays eine Datei (d.txt) erstellen.

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

Die Definition für die Funktion getSampleContent im vorherigen Codeausschnitt ist im Rahmen des Beispiels auf GitHub verfügbar.

Anfügen an eine Datei

Im folgenden Codeausschnitt wird Inhalt an eine vorhandene Datei angefügt.

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

Die Definition für die Funktion getSampleContent im vorherigen Codeausschnitt ist im Rahmen des Beispiels auf GitHub verfügbar.

Lesen einer Datei

Im folgenden Codeausschnitt wird Inhalt aus einer Datei in einem Data Lake Storage Gen1-Konto gelesen.

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

Verketten von Dateien

Im folgenden Codeausschnitt werden zwei Dateien in einem Data Lake Storage Gen1-Konto verkettet. Bei erfolgreicher Ausführung ersetzt die verkettete Datei die beiden vorhandenen Dateien.

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

Umbenennen einer Datei

Im folgenden Codeausschnitt wird eine Datei in einem Data Lake Storage Gen1-Konto umbenannt.

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

Abrufen von Metadaten für eine Datei

Im folgenden Codeausschnitt werden die Metadaten für eine Datei in einem Data Lake Storage Gen1-Konto gelesen.

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

Festlegen von Berechtigungen für eine Datei

Im folgenden Codeausschnitt werden Berechtigungen für die Datei festgelegt, die Sie im vorherigen Abschnitt erstellt haben.

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

Auflisten des Verzeichnisinhalts

Im folgenden Codeausschnitt wird der Inhalt eines Verzeichnisses rekursiv aufgelistet.

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

Die Definition für die Funktion printDirectoryInfo im vorherigen Codeausschnitt ist im Rahmen des Beispiels auf GitHub verfügbar.

Löschen von Dateien und Ordnern

Im folgenden Codeausschnitt werden die angegebenen Dateien und Ordner in einem Data Lake Storage Gen1-Konto rekursiv gelöscht.

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

Erstellen und Ausführen der Anwendung

  1. Verwenden Sie in einer IDE die Schaltfläche Ausführen, um die Anwendung auszuführen. Verwenden Sie in Maven den Befehl exec:exec, um die Anwendung auszuführen.
  2. Wenn Sie eine eigenständige, über die Befehlszeile ausführbare JAR-Datei generieren möchten, erstellen Sie mithilfe des Maven-Assembly-Plug-Ins eine JAR-Datei mit sämtlichen Abhängigkeiten. Ein Beispiel hierzu finden Sie in der Datei „pom.xml“ aus dem Beispielquellcode auf GitHub.

Nächste Schritte