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

Saiba como usar o SDK do Java do Azure Data Lake Storage Gen1 para executar operações básicas, como criar pastas, carregar e baixar arquivos de dados, etc. Para obter mais informações sobre o Data Lake Storage Gen1, consulte Azure Data Lake Storage Gen1.

É possível acessar os documentos da API do SDK do Java para Data Lake Storage Gen1 nos documentos de API do Java do Azure Data Lake Storage Gen1.

Pré-requisitos

  • Java Development Kit (JDK 7 ou superior, usando Java versão 1.7 ou superior)
  • Conta do Data Lake Storage Gen1. Siga as instruções em Introdução ao Azure Data Lake Storage Gen1 usando o portal do Azure.
  • Maven. Este tutorial usa o Maven para compilação e dependências de projeto. Embora seja possível compilar sem usar um sistema de compilação como Maven ou Gradle, com esses sistemas é muito mais fácil gerenciar dependências.
  • (Opcional) E IDE como IntelliJ IDEA ou Eclipse ou semelhante.

Criar um aplicativo Java

O exemplo de código disponível no GitHub explica o processo de criação de arquivos no armazenamento, concatenação de arquivos, download de um arquivo e exclusão de alguns arquivos no armazenamento. Esta seção do artigo percorre com você as principais partes do código.

  1. Crie um projeto do Maven usando mvn archetype na linha de comando ou usando um IDE. Para obter instruções sobre como criar um projeto Java usando IntelliJ, veja aqui. Para obter instruções sobre como criar um projeto usando o Eclipse, veja aqui.

  2. Adicione as dependências a seguir para o arquivo pom.xml do Maven. Adicione o seguinte snippet antes da marca </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 é usar o SDK do Data Lake Storage Gen1 (azure-data-lake-store-sdk) do repositório maven. A segunda dependência serve para especificar qual estrutura de registros (slf4j-nop) usar para o aplicativo. O SDK do Data Lake Storage Gen1 usa fachada de registros SLF4J, o que permite escolher entre uma série de estruturas de registros populares como Log4j, registro do Java, Logback, etc., ou nenhum registro. Para este exemplo, desabilitamos o registro em log, por isso, usamos a associação slf4j-nop. Para usar outras opções de log em seu aplicativo, veja aqui.

  3. Adicione as seguintes instruções import ao seu aplicativo.

    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 do Data Lake Storage Gen1

A criação de um objeto ADLStoreClient exige a especificação do nome da conta do Data Lake Storage Gen1 e o provedor de token gerado durante a autenticação com o Data Lake Storage Gen1 (consulte a seção Autenticação). O nome da conta do Data Lake Storage Gen1 deve ser um nome de domínio totalmente 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 snippets de código nas seções a seguir contêm exemplos de algumas operações comuns de filesystem. Você pode examinar os documentos de API do SDK do Java do Data Lake Storage Gen1 completos do objeto ADLStoreClient para ver outras operações.

Criar um diretório

O snippet a seguir cria uma estrutura de diretório na raiz da conta do Data Lake Storage Gen1 especificada.

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

Criar um arquivo

O snippet a seguir cria um arquivo (c.txt) na estrutura de diretório e grava alguns dados no arquivo.

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

Você também pode criar um arquivo (d.txt) usando matrizes de 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.");

A definição para a função getSampleContent usada no snippet de código anterior está disponível como parte do exemplo no GitHub.

Anexar a um arquivo

O snippet a seguir acrescenta o conteúdo a um arquivo existente.

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

A definição para a função getSampleContent usada no snippet de código anterior está disponível como parte do exemplo no GitHub.

Ler um arquivo

O snippet a seguir lê conteúdo de um arquivo na conta do 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 arquivos

O snippet a seguir concatena dois arquivos em uma conta do Data Lake Storage Gen1. Se houver êxito, o arquivo concatenado substituirá os dois arquivos 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.");

Renomear um arquivo

O snippet a seguir renomeia um arquivo em uma conta do 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 de um arquivo

O snippet a seguir recupera os metadados de um arquivo em uma conta do Data Lake Storage Gen1.

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

Definir permissões em um arquivo

O snippet a seguir define permissões no arquivo que você criou na seção anterior.

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

Listar conteúdo do diretório

O snippet a seguir lista o conteúdo de um diretório, recursivamente.

// 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 para a função printDirectoryInfo usada no snippet de código anterior está disponível como parte do exemplo no GitHub.

Excluir arquivos e pastas

O snippet a seguir exclui os arquivos e pastas especificados em uma conta do Data Lake Storage Gen1, de forma recursiva.

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

Compile e execute o aplicativo

  1. Para executar por meio de um IDE, localize e pressione o botão Executar. Para executar por meio do Maven, use exec:exec.
  2. Para produzir um jar autônomo que você pode executar na linha de comando, compile o jar com todas as dependências incluídas, usando o plug-in de assembly do Maven. O pom.xml no código-fonte de exemplo no GitHub tem um exemplo.

Próximas etapas