Операции файловой системы в Azure Data Lake Storage 1-го поколения с использованием Java SDK

Узнайте, как использовать пакет SDK для Java для Azure Data Lake Storage 1-го поколения и выполнения основных операций, таких как создание папок, отправка и скачивание файлов данных и т. д. Дополнительные сведения о Data Lake Storage 1-го поколения см. в этой статье.

Документацию по API пакета Java SDK для Data Lake Storage 1-го поколения можно найти здесь.

Предварительные требования

  • Комплект разработчика Java (JDK 7 или более поздней версии с использованием Java версии 1.7 или более поздней).
  • Учетная запись Data Lake Storage 1-го поколения. Следуйте инструкциям из статьи Начало работы с Azure Data Lake Storage Gen1 с помощью портала Azure.
  • Maven. В этом руководстве это средство используется для создания зависимостей проекта. Хотя зависимости можно создать и без использования таких систем, как Maven или Gradle, они существенно упрощают управление ими.
  • Интегрированная среда разработки, например IntelliJ IDEA, Eclipse или аналогичная (необязательно).

Создание приложения Java

На сайте GitHub доступен пример кода, который используется для создания файлов в хранилище, объединения и скачивания файлов, а также для удаления файлов из хранилища. В этом разделе статьи рассматриваются основные части этого кода.

  1. Создайте проект Maven с использованием архетипа mvn с помощью командной строки или интегрированной среды разработки (IDE). Инструкции по созданию проекта Java с использованием IntelliJ см. здесь. Инструкции по созданию проекта с использованием Eclipse см. здесь.

  2. Добавьте приведенные ниже зависимости в файл Maven pom.xml. Добавьте следующий фрагмент кода перед тегом </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>
    

    Первая зависимость предназначена для использования пакета SDK для Data Lake Storage 1-го поколения (azure-data-lake-store-sdk) из репозитория Maven. Вторая зависимость нужна, чтобы указать, какие платформы ведения журналов (slf4j-nop) будут использоваться для этого приложения. Пакет SDK для Data Lake Storage 1-го поколения использует библиотеку SLF4J, которая позволяет выбрать любую из ряда популярных платформ ведения журналов, таких как Log4j, платформа для Java, Logback и др., или отключить ведение журнала. В этом примере мы отключим ведение журнала, так как используем привязку slf4j-nop. Сведения о других вариантах ведения журнала в приложении см. здесь.

  3. Добавьте следующие инструкции импорта в приложение.

    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;
    

Аутентификация

Создание клиента Data Lake Storage 1-го поколения

Создавая объект ADLStoreClient, укажите имя учетной записи Data Lake Storage 1-го поколения и поставщик маркера, который был создан при проверке подлинности в Data Lake Storage 1-го поколения (см. раздел Проверка подлинности). Для учетной записи Data Lake Storage 1-го поколения необходимо указать полное доменное имя. Например, замените часть FILL-IN-HERE примерно таким значением: mydatalakestoragegen1.azuredatalakestore.net.

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

Фрагменты кода в следующих разделах содержат примеры некоторых распространенных операций с файловой системой. Другие операции можно найти в полной документации по API пакета Java SDK для Data Lake Storage 1-го поколения в разделе об объекте ADLStoreClient.

Создание каталога

Следующий фрагмент создает структуру каталогов в корне указанной учетной записи Data Lake Storage 1-го поколения.

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

Создание файла

Следующий фрагмент кода создает файл (c.txt) в структуре каталогов и записывает в него некоторые данные.

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

Можно также создать файл (d.txt) с помощью массивов байтов.

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

Определение функции getSampleContent, используемой в предыдущем фрагменте кода, доступно как часть примера на GitHub.

Добавление данных в файл

Следующий фрагмент кода добавляет содержимое в имеющийся файл.

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

Определение функции getSampleContent, используемой в предыдущем фрагменте кода, доступно как часть примера на GitHub.

Чтение файла

Следующий фрагмент кода считывает содержимое из файла в учетной записи Data Lake Storage 1-го поколения.

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

Сцепление файлов

Следующий фрагмент кода сцепляет два файла в учетной записи Data Lake Storage 1-го поколения. При успешном сцеплении объединенный файл заменяет два имеющихся файла.

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

Переименуйте файл

Следующий фрагмент кода переименовывает файл в учетной записи Data Lake Storage 1-го поколения.

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

Получение метаданных для файла

Следующий фрагмент кода считывает метаданные из файла в учетной записи Data Lake Storage 1-го поколения.

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

Установка разрешений для файла

Следующий фрагмент кода задает разрешения для файла, созданного в предыдущем разделе.

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

Вывод содержимого каталогов

Следующий фрагмент кода рекурсивно отображает содержимое каталога.

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

Определение функции printDirectoryInfo, используемой в предыдущем фрагменте кода, доступно как часть примера на GitHub.

Удаление файлов и папок

Следующий фрагмент кода рекурсивно удаляет указанные файлы и папки из учетной записи хранения Data Lake Storage 1-го поколения.

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

Создание и запуск приложения

  1. Для запуска из среды IDE найдите и нажмите кнопку запуска. Для запуска из Maven выполните команду exec:exec.
  2. Чтобы получить автономный JAR-файл, который можно запустить из командной строки, создайте такой файл со всеми зависимостями с помощью подключаемого модуля сборки Maven. Пример содержится в файле pom.xml в исходном коде на сайте GitHub.

Дальнейшие действия