次の方法で共有


Java SDK を使用した Azure Data Lake Storage Gen1 に対するファイルシステム操作

Azure Data Lake Storage Gen1 Java SDK を使用して、フォルダーの作成、データ ファイルのアップロードとダウンロードなどの基本的な操作を実行する方法について説明します。Data Lake Storage Gen1 の詳細については、「 Azure Data Lake Storage Gen1」を参照してください。

Data Lake Storage Gen1 の Java SDK API ドキュメントには 、Azure Data Lake Storage Gen1 Java 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 IDEAEclipse などの IDE も同様です。

Java アプリケーションの作成

GitHub で入手できるコード サンプルでは、ストア内のファイルの作成、ファイルの連結、ファイルのダウンロード、ストア内の一部のファイルの削除のプロセスについて紹介します。 この記事のこのセクションでは、コードの主要な部分について説明します。

  1. コマンド ラインで mvn archetype を使用するか、IDE を使用して、Maven プロジェクトを作成します。 IntelliJ を使用して Java プロジェクトを作成する方法については、こちらをご覧ください。 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>
    

    最初の依存関係は、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 バインドを使用します。 アプリで他のログ オプションを使用するには、 こちらを参照してください。

  3. アプリケーションに次の 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 クライアントを作成する

ADLStoreClient オブジェクトを作成するには、Data Lake Storage Gen1 アカウント名と、Data Lake Storage Gen1 で認証したときに生成したトークン プロバイダーを指定する必要があります (「認証」セクションを参照)。 Data Lake Storage Gen1 アカウント名は、完全修飾ドメイン名である必要があります。 たとえば、 FILL-IN-HEREmydatalakestoragegen1.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();

アプリケーションの構築と実行

  1. IDE 内から実行するには、[ 実行 ] ボタンを見つけて押します。 Maven から実行するには、 exec:exec を使用します
  2. コマンド ラインから実行できるスタンドアロン jar を生成するには、 Maven アセンブリ プラグインを使用して、すべての依存関係を含む jar をビルドします。 GitHub のサンプル ソース コードの pom.xml には例があります。

次のステップ