Operaciones de sistema de archivos en Azure Data Lake Storage Gen1 mediante el uso del SDK de Java
Aprenda a utilizar 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.
Requisitos previos
- Kit de desarrollo de Java (JDK 7 o superior, 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 a través del 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 a través de las principales partes del código.
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.
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 tanto, se usa el enlace slf4j-nop. Para usar otras opciones de registro en su aplicación, consulte este artículo.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;
Authentication
- Para la autenticación del usuario final para la aplicación, consulte End-user authentication with Data Lake Store using Java (Autenticación del usuario final con Data Lake Storage Gen1 mediante Java).
- Para la autenticación entre servicios para la aplicación, consulte Service-to-service authentication with Data Lake Store using Java (Autenticación entre servicios con Data Lake Storage Gen1 mediante Java).
Creación de un cliente de Data Lake Storage Gen1
La creación de un objeto ADLStoreClient requiere la especificación del nombre de la cuenta de Data Lake Storage Gen1 y del proveedor de tokens que se generó con la autenticación en 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 similar a 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 operaciones de sistema de archivos comunes. Puede buscar en todos los documentos de la API de 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 especificada.
// 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 datos en él.
// 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) con 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 función getSampleContent
utilizada en el fragmento de código anterior está disponible como parte del ejemplo en GitHub.
Anexión 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 función getSampleContent
utilizada 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 de 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 fragmento de código siguiente concatena dos archivos en una cuenta de Data Lake Storage Gen1. Si se realiza correctamente, el archivo concatenado reemplaza los dos 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.");
Cambio del nombre de un archivo
El fragmento de código 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.");
Obtención de los metadatos para 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.");
Obtención de permisos en un archivo
El fragmento de código siguiente obtiene permisos en el archivo que se creó en la sección anterior.
// set file permission
client.setPermission(filename, "744");
System.out.println("File permission set.");
Lista del contenido del directorio
El fragmento de código siguiente enumera el contenido de un directorio, repetidamente.
// 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 función printDirectoryInfo
utilizada en el fragmento de código anterior está disponible como parte del ejemplo en GitHub.
Eliminación de archivos y carpetas
El fragmento de código siguiente elimina los archivos y las carpetas especificados de una cuenta de Data Lake Storage Gen1, repetidamente.
// 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
- Para ejecutarla desde un IDE, localícela y presione el botón Ejecutar. Para ejecutarla desde Maven, utilice exec:exec.
- Para generar un archivo jar independiente que puede ejecutar desde la línea de comandos, genere el archivo jar con todas las dependencias incluidas mediante el complemento de ensamblado de Maven. El archivo pom.xml del código fuente de ejemplo de GitHub contiene un ejemplo.