Операции файловой системы в 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 доступен пример кода, который используется для создания файлов в хранилище, объединения и скачивания файлов, а также для удаления файлов из хранилища. В этом разделе статьи рассматриваются основные части этого кода.
Создайте проект Maven с использованием архетипа mvn с помощью командной строки или интегрированной среды разработки (IDE). Инструкции по созданию проекта Java с использованием IntelliJ см. здесь. Инструкции по созданию проекта с использованием Eclipse см. здесь.
Добавьте приведенные ниже зависимости в файл 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. Сведения о других вариантах ведения журнала в приложении см. здесь.Добавьте следующие инструкции импорта в приложение.
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-го поколения с использованием Java.
- Дополнительные сведения о проверке подлинности между службами в приложении см. в статье Проверка подлинности между службами в Data Lake Storage 1-го поколения с использованием Java.
Создание клиента 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();
Создание и запуск приложения
- Для запуска из среды IDE найдите и нажмите кнопку запуска. Для запуска из Maven выполните команду exec:exec.
- Чтобы получить автономный JAR-файл, который можно запустить из командной строки, создайте такой файл со всеми зависимостями с помощью подключаемого модуля сборки Maven. Пример содержится в файле pom.xml в исходном коде на сайте GitHub.