Java SDK を使用した Azure Data Lake Storage Gen1 に対するファイルシステム操作
Azure Data Lake Storage Gen1 Java SDK を使用して、フォルダーの作成、データ ファイルのアップロードとダウンロードなどの基本操作を実行する方法について説明します。Data Lake Storage Gen1 について詳しくは、Azure Data Lake Storage Gen1 に関する記事をご覧ください。
Azure Data Lake Storage Gen1 Java API ドキュメントで、Data Lake Storage Gen1 に関する Java SDK API ドキュメントにアクセスできます。
前提条件
- Java Development Kit (JDK 7 以降、Java バージョン 1.7 以降を使用)。
- Data Lake Storage Gen1 アカウント。 「Azure portal で Azure Data Lake Storage Gen1 の使用を開始する」の手順に従ってください。
- Maven。 このチュートリアルでは、ビルドとプロジェクトの依存関係に Maven を使用します。 Maven や Gradle などのビルド システムを使用しなくてもビルドすることはできますが、これらのシステムを使用すると、依存関係の管理が容易になります。
- (オプション) IntelliJ IDEA や Eclipse などの IDE。
Java アプリケーションの作成
GitHub で入手できるコード サンプルは、ストアでのファイルの作成、ファイルの連結、ファイルのダウンロード、ストアでのファイルの削除のプロセスを示しています。 このセクションでは、コードの主要部分について説明します。
コマンド ラインで mvn archetype を使用するか、IDE を使用して、Maven プロジェクトを作成します。 IntelliJ を使用して Java プロジェクトを作成する方法については、こちらをご覧ください。 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>
最初の依存関係では、maven リポジトリから Data Lake Storage Gen1 SDK (
azure-data-lake-store-sdk
) を使用します。 2 番目の依存関係では、このアプリケーションで使用するログ記録フレームワーク (slf4j-nop
) を指定します。 Data Lake Storage Gen1 SDK では、SLF4J ログ ファサードを使用します。それを使用すると、Log4j、Java ログ、Logback などの多数の一般的なログ記録フレームの中から選択することも、ログを記録しないようにすることもできます。 この例ではログを無効にするため、slf4j-nop バインドを使用します。 アプリケーションで他のログ オプションを使用する場合は、こちらをご覧ください。アプリケーションに次の import ステートメントを追加します。
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 Gen1 による Java を使用したエンドユーザー認証に関する記事をご覧ください。
- アプリケーションのサービス間認証については、Data Lake Storage Gen1 による Java を使用したサービス間認証に関する記事をご覧ください。
Data Lake Storage Gen1 クライアントの作成
ADLStoreClient オブジェクトを作成するには、Data Lake Storage Gen1 アカウント名と、Data Lake Storage Gen1 による認証時に生成したトークン プロバイダーを指定する必要があります (「認証」セクションを参照)。 Data Lake Storage Gen1 アカウント名は、完全修飾ドメイン名である必要があります。 たとえば、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);
次のセクションのコード スニペットには、一般的なファイルシステム操作の例が含まれています。 他の操作については、ADLStoreClient オブジェクトの完全な Data Lake Storage Gen1 Java SDK API ドキュメントで確認できます。
ディレクトリを作成する
次のスニペットを使用して、指定した Data Lake Storage Gen1 アカウントのルートにディレクトリ構造を作成します。
// 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 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.");
ファイルを連結する
次のスニペットを使用して、Data Lake Storage Gen1 アカウントの 2 つのファイルを連結します。 成功した場合、既存の 2 つのファイルは連結されたファイルで置き換えられます。
// 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 Gen1 アカウントのファイルの名前を変更します。
//rename the file
client.rename("/a/b/f.txt", "/a/b/g.txt");
System.out.println("New file renamed.");
ファイルのメタデータを取得する
次のスニペットを使用して、Data Lake Storage Gen1 アカウントのファイルのメタデータを取得します。
// 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 Gen1 アカウントの指定したファイルとフォルダーを再帰的に削除します。
// 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 アセンブリ プラグインを使用して、すべての依存関係を含めて jar をビルドします。 GitHub のサンプル ソース コードの pom.xml に例が含まれています。