Compartir a través de


Operaciones del sistema de archivos en Azure Data Lake Storage Gen1 mediante el SDK de Java

Aprenda a usar el SDK de Java de Azure Data Lake Storage Gen1 para realizar operaciones básicas, como crear carpetas, cargar y descargar archivos de datos, etc. Para más información sobre Data Lake Storage Gen1, consulte Azure Data Lake Storage Gen1.

Puede acceder a los documentos de la API del SDK de Java para Data Lake Storage Gen1 en los documentos de la API de Java de Azure Data Lake Storage Gen1.

Prerrequisitos

  • Kit de desarrollo de Java (JDK 7 o posterior, con java versión 1.7 o posterior)
  • Cuenta de Data Lake Storage Gen1. Siga las instrucciones de Introducción a Azure Data Lake Storage Gen1 con Azure Portal.
  • Maven. Este tutorial usa Maven para crear las dependencias de un proyecto. Aunque es posible generarlas sin utilizar un sistema como Maven o Gradle, estos sistemas facilitan mucho la administración de las dependencias.
  • (Opcional) Y un IDE como IntelliJ IDEA, Eclipse o similar.

Creación de una aplicación Java

El ejemplo de código disponible en GitHub le guía por el proceso de creación de archivos en el almacén, concatenación de archivos, descarga de un archivo y eliminación de algunos archivos en el almacén. Esta sección del artículo le guía por las partes principales del código.

  1. Cree un proyecto de Maven mediante mvn archetype en la línea de comandos o con un entorno de desarrollo integrado. Para ver instrucciones sobre cómo crear un proyecto de Java mediante IntelliJ, consulte este artículo. Para ver instrucciones sobre cómo crear un proyecto con Eclipse, consulte este artículo.

  2. Agregue las siguientes dependencias a su archivo pom.xml de Maven. Agregue el siguiente fragmento de código antes de la 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>
    

    La primera dependencia es el uso del SDK de Data Lake Storage Gen1 (azure-data-lake-store-sdk) desde el repositorio de Maven. La segunda dependencia consiste en especificar qué plataforma de registro (slf4j-nop) se usará para esta aplicación. El SDK de Data Lake Storage Gen1 usa la fachada de registro SLF4J, que permite elegir entre una serie de plataformas de registro populares, como Log4J, registro de Java, Logback, etc., o no registrarse. En este ejemplo, se deshabilita el registro, por lo que usamos la vinculación slf4j-nop. Para usar otras opciones de registro en su aplicación, consulte este artículo.

  3. Agregue las siguientes instrucciones de importación a la aplicación.

    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;
    

Autenticación

Creación de un cliente de Data Lake Storage Gen1

La creación de un objeto ADLStoreClient requiere que especifique el nombre de la cuenta de Data Lake Storage Gen1 y el proveedor de tokens que generó al autenticarse con Data Lake Storage Gen1 (consulte la sección Autenticación ). El nombre de la cuenta de Data Lake Storage Gen1 debe ser un nombre de dominio completo. Por ejemplo, reemplace 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);

Los fragmentos de código de las secciones siguientes contienen ejemplos de algunas operaciones comunes del sistema de archivos. Puede consultar los documentos completos de la API del SDK de Java de Data Lake Storage Gen1 del objeto ADLStoreClient para ver otras operaciones.

Creación de un directorio

El fragmento de código siguiente crea una estructura de directorios en la raíz de la cuenta de Data Lake Storage Gen1 que especificó.

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

Creación de un archivo

El fragmento de código siguiente crea un archivo (c.txt) en la estructura de directorios y escribe algunos datos en el archivo.

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

También puede crear un archivo (d.txt) mediante matrices 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.");

La definición de la getSampleContent función usada en el fragmento de código anterior está disponible como parte del ejemplo en GitHub.

Anexar a un archivo

El fragmento de código siguiente anexa contenido a un archivo existente.

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

La definición de la getSampleContent función usada en el fragmento de código anterior está disponible como parte del ejemplo en GitHub.

Lectura de un archivo

El fragmento de código siguiente lee el contenido de un archivo en una cuenta de 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.");

Concatenación de archivos

El siguiente fragmento de código concatena dos archivos en una cuenta de Data Lake Storage Gen1. Si se ejecuta correctamente, el archivo concatenado reemplaza los dos archivos 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.");

Cambiar el nombre de un archivo

El fragmento de código siguiente cambia el nombre de un archivo en una cuenta de Data Lake Storage Gen1.

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

Obtener metadatos de un archivo

El fragmento de código siguiente recupera los metadatos de un archivo en una cuenta de Data Lake Storage Gen1.

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

Establecimiento de permisos en un archivo

El fragmento de código siguiente establece permisos en el archivo que creó en la sección anterior.

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

Lista del contenido del directorio

En el fragmento de código siguiente se muestra el contenido de un directorio de forma recursiva.

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

La definición de la printDirectoryInfo función usada en el fragmento de código anterior está disponible como parte del ejemplo en GitHub.

Eliminar archivos y carpetas

El fragmento de código siguiente elimina los archivos y carpetas especificados en una cuenta de 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();

Compilación y ejecución de la aplicación

  1. Para ejecutar desde un IDE, busque y presione el botón Ejecutar . Para ejecutar desde Maven, use exec:exec.
  2. Para generar un archivo jar independiente que puede ejecutar desde la línea de comandos, compile el archivo jar con todas las dependencias incluidas, mediante el complemento de ensamblado de Maven. El pom.xml del código fuente de ejemplo en GitHub tiene un ejemplo.

Pasos siguientes