Filsystemåtgärder på Azure Data Lake Storage Gen1 med Java SDK

Lär dig hur du använder Azure Data Lake Storage Gen1 Java SDK för att utföra grundläggande åtgärder som att skapa mappar, ladda upp och ladda ned datafiler osv. Mer information om Data Lake Storage Gen1 finns i Azure Data Lake Storage Gen1.

Du kan komma åt Java SDK API-dokumenten för Data Lake Storage Gen1 i Azure Data Lake Storage Java API-dokument i Gen1.

Förutsättningar

  • Java Development Kit (JDK 7 eller senare, med Java version 1.7 eller senare)
  • Data Lake Storage Gen1 konto. Följ anvisningarna i Kom igång med Azure Data Lake Storage Gen1 med hjälp av Azure Portal.
  • Maven. Den här självstudien använder Maven för bygg- och projektberoenden. Även om det är möjligt att skapa utan att använda ett build-system som Maven eller Gradle, gör de här systemen det mycket enklare att hantera beroenden.
  • (Valfritt) Och IDE-liknande IntelliJ IDEA eller Eclipse eller liknande.

Skapa ett Java-program

Kodavsnittet som finns tillgängligt på GitHub ger dig en genomgång av processen att skapa filer i arkivet, sammanfoga filer, hämta en fil och ta bort några filer i arkivet. Det här avsnittet av artikeln går igenom de viktigaste delarna av koden.

  1. Skapa ett Maven-projekt med mvn archetype från kommandoraden eller med hjälp av en IDE. Anvisningar för hur du skapar ett Java-projekt med IntelliJ finns här. Anvisningar för hur du skapar ett Java-projekt med Eclipse finns här.

  2. Lägg till följande beroenden till din Maven pom.xml-fil. Lägg till följande kodfragment före taggen< /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>
    

    Det första beroendet är att använda Data Lake Storage Gen1 SDK (azure-data-lake-store-sdk) från maven-lagringsplatsen. Det andra beroendet är för att ange vilket loggningsramverk (slf4j-nop) som ska användas för programmet. Data Lake Storage Gen1 SDK använder SLF4J-loggningsfasad, som gör att du kan välja bland ett antal populära loggningsramverk, till exempel Log4j, Java-loggning, Logback osv. eller ingen loggning. I det här exemplet inaktiverar vi loggning, därför använder vi slf4j-nop bindning. Om du vill använda andra alternativ för loggning i din app, se här.

  3. Lägg till följande importuttryck i programmet.

    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;
    

Autentisering

Skapa en Data Lake Storage Gen1-klient

När du skapar ett ADLStoreClient-objekt måste du ange Data Lake Storage Gen1-kontonamnet och tokenprovidern som du genererade när du autentiserade med Data Lake Storage Gen1 (se avsnittet Autentisering). Det Data Lake Storage Gen1 kontonamnet måste vara ett fullständigt domännamn. Ersätt till exempel FILL-IN-HERE med något som liknar mydatalakestoragegen1.azuredatalakestore.net.

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

Fragmenten i följande avsnitt innehåller exempel på vissa vanliga filsystemsåtgärder. Du kan titta på de fullständiga Data Lake Storage Gen1 Java SDK API-dokumenten för ADLStoreClient-objektet för att se andra åtgärder.

Skapa en katalog

Följande kodfragment skapar en katalogstruktur i roten för det Data Lake Storage Gen1 konto som du angav.

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

Skapa en fil

Följande fragment skapar en fil (c.txt) i katalogstrukturen och skriver data till filen.

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

Du kan också skapa en fil (d.txt) med bytematriser.

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

Definitionen för funktionen getSampleContent som används i föregående fragment finns som en del av exemplet på GitHub.

Lägg till till en fil

Följande fragment lägger till innehåll i en befintlig fil.

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

Definitionen för funktionen getSampleContent som används i föregående fragment finns som en del av exemplet på GitHub.

Läs en fil

Följande kodfragment läser innehåll från en fil i ett Data Lake Storage Gen1 konto.

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

Sammanfoga filer

Följande kodfragment sammanfogar två filer i ett Data Lake Storage Gen1 konto. Om det lyckas ersätter den sammanfogade filen de två befintliga filerna.

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

Byt namn på en fil

Följande kodfragment byter namn på en fil i ett Data Lake Storage Gen1 konto.

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

Hämta metadata för en fil

Följande kodfragment hämtar metadata för en fil i ett Data Lake Storage Gen1 konto.

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

Ange behörigheter för en fil

Följande fragment anger behörigheter för filen du har skapat i föregående avsnitt.

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

Lista kataloginnehåll

Följande fragment visar innehållet i en katalog, rekursivt.

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

Definitionen för funktionen printDirectoryInfo som används i föregående fragment finns som en del av exemplet på GitHub.

Ta bort filer och mappar

Följande kodfragment tar bort de angivna filerna och mapparna i ett Data Lake Storage Gen1 konto rekursivt.

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

Skapa och kör appen

  1. För att köra inifrån en IDE, letar du upp och trycker på Kör-knappen. För att köra från Maven, använder du exec:exec.
  2. För att skapa en fristående jar som du kan köra från kommandoraden, skapar du jaren med alla beroenden inkluderade, med hjälp av Maven-plugin-paketet. pom.xml i källkodsexemplet på GitHub har ett exempel.

Nästa steg