Bestandssysteembewerkingen in Azure Data Lake Storage Gen1 met behulp van Java SDK

Meer informatie over het gebruik van de Azure Data Lake Storage Gen1 Java SDK voor het uitvoeren van basisbewerkingen, zoals het maken van mappen, het uploaden en downloaden van gegevensbestanden, enzovoort. Zie Azure Data Lake Storage Gen1 voor meer informatie over Data Lake Storage Gen1.

U hebt toegang tot de Java SDK API-documenten voor Data Lake Storage Gen1 in Azure Data Lake Storage Gen1 Java API-documenten.

Vereisten

  • Java Development Kit (JDK 7 of hoger met Java versie 1.7 of hoger)
  • Data Lake Storage Gen1 account. Volg de instructies in Aan de slag met Azure Data Lake Storage Gen1 met behulp van de Azure Portal.
  • Maven. In deze zelfstudie wordt Maven gebruikt voor build- en projectafhankelijkheden. Hoewel het mogelijk is te ontwikkelen zonder een buildsysteem als Maven of Gradle, maken deze systemen het veel eenvoudiger om afhankelijkheden te beheren.
  • (Optioneel) Een IDE zoals IntelliJ IDEA, Eclipse of vergelijkbaar.

Een Java-toepassing maken

Dit codevoorbeeld beschikbaar in GitHub doorloopt het proces waarin bestanden in het archief worden gemaakt, bestanden worden samengevoegd, een bestand wordt gedownload en een aantal bestanden uit het archief wordt verwijderd. In dit gedeelte van het artikel komen de belangrijkste onderdelen van de code aan bod.

  1. Maak een Maven-project met behulp van mvn archetype vanaf de opdrachtregel of met behulp van een IDE. Hier vindt u instructies over het maken van een Java-project met behulp van IntelliJ. Hier vindt u instructies over het maken van een Java-project met behulp van Eclipse.

  2. Voeg de volgende afhankelijkheden toe aan het pom.xml-bestand in Maven. Voeg het volgende codefragment toe vóór de <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>
    

    De eerste afhankelijkheid is het gebruik van de Data Lake Storage Gen1 SDK (azure-data-lake-store-sdk) uit de maven-opslagplaats. De tweede afhankelijkheid dient om op te geven welk framework voor logboekregistratie (slf4j-nop) voor deze toepassing moet worden gebruikt. De Data Lake Storage Gen1 SDK maakt gebruik van SLF4J-logboekregistratie, waarmee u kunt kiezen uit een aantal populaire frameworks voor logboekregistratie, zoals Log4j, Java-logboekregistratie, Logback, enzovoort, of geen logboekregistratie. In dit voorbeeld wordt logboekregistratie uitgeschakeld. Daarom wordt de binding slf4j-nop gebruikt. Hier vindt u andere opties voor logboekregistratie voor uw toepassing.

  3. Voeg de volgende importinstructies toe aan uw toepassing.

    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;
    

Verificatie

Een Data Lake Storage Gen1-client maken

Voor het maken van een ADLStoreClient-object moet u de naam van het Data Lake Storage Gen1 account en de tokenprovider opgeven die u hebt gegenereerd bij de verificatie met Data Lake Storage Gen1 (zie de sectie Verificatie). De Data Lake Storage Gen1 accountnaam moet een volledig gekwalificeerde domeinnaam zijn. Vervang bijvoorbeeld FILL-IN-HERE door iets als mydatalakestoragegen1.azuredatalakestore.net.

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

De codefragmenten in de volgende secties bevatten voorbeelden van enkele veelvoorkomende bestandssysteembewerkingen. U kunt de volledige Data Lake Storage Gen1 Java SDK API-documenten van het ADLStoreClient-object bekijken om andere bewerkingen te bekijken.

Een map maken

Met het volgende codefragment wordt een mapstructuur gemaakt in de hoofdmap van het Data Lake Storage Gen1-account dat u hebt opgegeven.

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

Een bestand maken

In het volgende codefragment wordt een bestand (c.txt) in de mapstructuur gemaakt en worden er gegevens naar het bestand geschreven.

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

U kunt ook een bestand (d.txt) maken met behulp van bytematrices.

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

De definitie van functie getSampleContent die in het bovenstaande codefragment wordt gebruikt, is beschikbaar als onderdeel van het voorbeeld op GitHub.

Toevoegen aan een bestand

In het volgende codefragment wordt inhoud toegevoegd aan een bestaand bestand.

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

De definitie van functie getSampleContent die in het bovenstaande codefragment wordt gebruikt, is beschikbaar als onderdeel van het voorbeeld op GitHub.

Een bestand lezen

Het volgende codefragment leest inhoud uit een bestand in een Data Lake Storage Gen1-account.

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

Bestanden samenvoegen

Het volgende codefragment voegt twee bestanden samen in een Data Lake Storage Gen1-account. Als dit lukt, worden de twee bestaande bestanden vervangen door het samengevoegde bestand.

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

De naam van een bestand wijzigen

In het volgende codefragment wordt de naam van een bestand in een Data Lake Storage Gen1-account gewijzigd.

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

Metagegevens ophalen voor een bestand

Met het volgende codefragment worden de metagegevens opgehaald voor een bestand in een Data Lake Storage Gen1-account.

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

Machtigingen instellen voor een bestand

In het volgende codefragment worden machtigingen ingesteld voor het bestand dat u in de vorige sectie hebt gemaakt.

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

Mapinhoud weergeven

In het volgende codefragment wordt recursief de inhoud van een map weergegeven.

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

De definitie van functie printDirectoryInfo die in het bovenstaande codefragment wordt gebruikt, is beschikbaar als onderdeel van het voorbeeld op GitHub.

Bestanden en mappen verwijderen

Met het volgende fragment worden de opgegeven bestanden en mappen in een Data Lake Storage Gen1-account recursief verwijderd.

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

De toepassing bouwen en uitvoeren.

  1. Klik op de knop Uitvoeren om de toepassing vanuit een IDE uit te voeren. Gebruik exec:exec om deze vanuit Maven uit te voeren.
  2. Als u een afzonderlijke jar wilt maken die u vanuit de opdrachtregel kunt uitvoeren, bouwt u de jar met alle afhankelijkheden geïntegreerd met behulp van de Maven assembly-invoegtoepassing. De pom.xml in de voorbeeldbroncode op GitHub bevat een voorbeeld.

Volgende stappen