Operações do sistema de ficheiros no Azure Data Lake Storage Gen1 com o SDK Java

Saiba como utilizar o SDK Java Azure Data Lake Storage Gen1 para realizar operações básicas, como criar pastas, carregar e transferir ficheiros de dados, etc. Para obter mais informações sobre Data Lake Storage Gen1, consulte Azure Data Lake Storage Gen1.

Pode aceder aos documentos da API do SDK Java para Data Lake Storage Gen1 em documentos da API Java do Azure Data Lake Storage Gen1.

Pré-requisitos

  • Kit de Desenvolvimento do Java (JDK 7 ou superior, com Java versão 1.7 ou superior)
  • Data Lake Storage Gen1 conta. Siga as instruções em Introdução ao Azure Data Lake Storage Gen1 com o portal do Azure.
  • Maven. Este tutorial utiliza o Maven para dependências de compilação e do projeto. Embora seja possível compilar sem utilizar um sistema de compilação como Maven ou Gradle, estes sistemas facilitam muito a gestão das dependências.
  • (Opcional) E IDE como IntelliJ IDEIA, Eclipse ou semelhante.

Criar uma aplicação Java

O exemplo de código disponível no GitHub explica-lhe o processo de criação de ficheiros no arquivo, de concatenação de ficheiros, de transferência de um ficheiro e de eliminação de alguns ficheiros do arquivo. Esta secção do artigo explica-lhe as partes principais do código.

  1. Crie um projeto Maven com o arquétipo mvn a partir da linha de comandos ou com um IDE. Para obter instruções sobre como criar um projeto Java com IntelliJ, veja aqui. Para obter instruções sobre como criar um projeto com Eclipse, clique aqui.

  2. Adicione as seguintes dependências ao ficheiro pom.xml do Maven. Adicione o seguinte fragmento antes da <etiqueta /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>
    

    A primeira dependência é utilizar o SDK Data Lake Storage Gen1 (azure-data-lake-store-sdk) do repositório maven. A segunda dependência é para especificar a arquitetura de registo (slf4j-nop) a utilizar para esta aplicação. O SDK de Data Lake Storage Gen1 utiliza a fachada de registo SLF4J, que lhe permite escolher entre várias arquiteturas de registo populares, como Log4j, registo java, Logback, etc., ou nenhum registo. Neste exemplo, vamos desativar o registo e, por conseguinte, utilizar o enlace slf4j-nop. Para utilizar outras opções de registo na sua aplicação, clique aqui.

  3. Adicione as seguintes declarações de importação à aplicação.

    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;
    

Autenticação

Criar um cliente Data Lake Storage Gen1

Criar um objeto ADLStoreClient requer que especifique o nome da conta Data Lake Storage Gen1 e o fornecedor de tokens que gerou quando se autenticou com Data Lake Storage Gen1 (consulte a secção Autenticação). O nome da conta Data Lake Storage Gen1 tem de ser um nome de domínio completamente qualificado. Por exemplo, substitua FILL-IN-HERE por algo como mydatalakestoragegen1.azuredatalakestore.net.

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

Os fragmentos de código nas secções seguintes contêm exemplos de algumas operações comuns do sistema de ficheiros. Pode ver os documentos completos Data Lake Storage Gen1 API do SDK Java do objeto ADLStoreClient para ver outras operações.

Criar um diretório

O fragmento seguinte cria uma estrutura de diretório na raiz da conta Data Lake Storage Gen1 que especificou.

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

Criar um ficheiro

O fragmento seguinte cria um ficheiro (c.txt) na estrutura de diretórios e escreve alguns dados no ficheiro.

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

Também pode criar um ficheiro (d.txt) através de matrizes de bytes.

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

A definição da função getSampleContent utilizada no fragmento anterior está disponível como parte do exemplo no GitHub.

Acrescentar a um ficheiro

O fragmento seguinte acrescenta conteúdo a um ficheiro existente.

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

A definição da função getSampleContent utilizada no fragmento anterior está disponível como parte do exemplo no GitHub.

Ler um ficheiro

O fragmento seguinte lê conteúdo de um ficheiro numa conta 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.");

Concatenar ficheiros

O fragmento seguinte concatena dois ficheiros numa conta Data Lake Storage Gen1. Se for efetuado com êxito, o ficheiro concatenado substitui os dois ficheiros existentes.

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

Mudar o nome de um ficheiro

O fragmento seguinte muda o nome de um ficheiro numa conta Data Lake Storage Gen1.

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

Obter metadados para um ficheiro

O fragmento seguinte obtém os metadados de um ficheiro numa conta Data Lake Storage Gen1.

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

Definir permissões num ficheiro

O fragmento seguinte define as permissões do ficheiro que criou na secção anterior.

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

Listar conteúdo do diretório

O fragmento seguinte lista o conteúdo de um diretório, em modo recursivo.

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

A definição da função printDirectoryInfo utilizada no fragmento anterior está disponível como parte do exemplo no GitHub.

Eliminar ficheiros e pastas

O fragmento seguinte elimina os ficheiros e pastas especificados numa conta Data Lake Storage Gen1, recursivamente.

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

Compilar e executar a aplicação

  1. Para executar a partir de um IDE, localize e prima o botão Executar. Para executar a partir do Maven, utilize exec:exec.
  2. Para produzir um jar autónomo que pode executar a partir da linha de comandos, compile um jar com todas as dependências incluídas com o plug-in de montagem do Maven. A pom.xml no código fonte de exemplo no GitHub tem um exemplo.

Passos seguintes