この記事では、階層型名前空間機能が有効になっているアカウントのAzure Data Lake Storageの既知の問題と制限事項について説明します。 この情報を使用してデータ ワークフローを管理し、さまざまな API と統合を使用する際の潜在的な落とし穴を回避します。
注
この記事で説明する機能の一部は、ネットワーク ファイル システム (NFS) 3.0 のサポートが有効になっているアカウントではサポートされていない場合があります。 さまざまな機能が有効になっている場合の機能サポートの影響を示す表を表示するには、「Azure ストレージ アカウントにおける Blob Storage 機能のサポート」を参照してください。
機能、サービス、プラットフォームのサポート
ほとんどの Blob Storage 機能、Azure サービス統合、およびオープン ソース プラットフォームは、階層型名前空間を持つアカウントでサポートされています。 完全な一覧については、次を参照してください。
- Azure Data Lake Storageで利用できるBlob Storage機能
- Azure Data Lake Storage がサポートされている Azure のサービス
- Azure Data Lake Storageをサポートするオープンソース プラットフォーム
BLOB ストレージ API
Data Lake Storage API、NFS 3.0、BLOB API は、同じデータを操作できます。
このセクションでは、BLOB API、NFS 3.0、Data Lake Storage API を使用して同じデータを操作する場合の問題と制限について説明します。
BLOB API、NFS 3.0、Data Lake Storage API を使用して、ファイルの同じインスタンスに書き込むことはできません。 Data Lake Storage API または NFS 3.0 を使用してファイルに書き込む場合、そのファイルのブロックは Get Block List BLOB API の呼び出しには表示されません。 唯一の例外は、上書きする場合です。 ファイルまたは BLOB は、API を使用するか、NFS 3.0 を使用してゼロ切り捨てオプション (書き込み前にファイルを 0 バイトに切り捨てる POSIX スタイルの操作) で上書きできます。
Data Lake Storage の Path - Create などの操作で作成された BLOB は、PutBlock または PutBlockList 操作を使用して上書きすることはできません。 ただし、PutBlob が使用する対応する API バージョンによって許容される最大 BLOB サイズに従って、 PutBlob 操作を使用してこれらの BLOB を上書きできます。
区切り記号を指定せずに List Blobs 操作を使用した場合、結果にはディレクトリと BLOB の両方が含まれます。 区切り文字を使用する場合は、フォワード スラッシュ (
/) のみを使用してください。 サポートされている区切り記号はこれだけです。Delete Blob API を使用してディレクトリを削除すると、ディレクトリは空の場合にのみ削除されます。 この条件は、BLOB API を使用してディレクトリを再帰的に削除できないことを意味します。
次の BLOB REST API はサポートされていません。
アンマネージド VM ディスクは、階層型名前空間があるアカウントではサポートされていません。 ストレージ アカウントで階層型名前空間を有効にする場合は、階層型名前空間機能が有効ではないストレージ アカウントにアンマネージド VM ディスクを配置してください。
Azure Data Lake Storageでのアクセス制御リスト (ACL) の再帰的な設定のサポート
親ディレクトリから子項目に ACL 変更を再帰的に適用する機能が公開されています。 この機能の現在のリリースでは、Azure Storage Explorer、PowerShell、Azure CLI、.NET、Java、Python、Node.js SDK を使用して ACL の変更を適用できます。 Azure portal のサポートはまだ提供されていません。
アクセス制御リスト (ACL) と匿名読み取りアクセス
コンテナーに対する匿名読み取りアクセスが許可されている場合、ACL は、そのコンテナーまたはそのコンテナー内のファイルには影響しません。 この制限は、読み取り要求にのみ影響します。 書き込みリクエストは引き続き ACL に従います。 blob データへのすべての要求に対して認可を必須にする。
Azure Data Lake Storageのプライベート エンドポイント
プライベート エンドポイントを使用してAzure Data Lake Storage (階層型名前空間が有効なストレージ アカウント) にアクセスする場合は、BLOB と dfs サブリソースの両方に対して作成する必要があります。 Data Lake Storage (dfs) エンドポイントを対象とする操作は BLOB エンドポイントにリダイレクトできます。一部の操作 (ACL の管理、ディレクトリの作成、ディレクトリの削除など) には DFS プライベート エンドポイントが必要です。 両方のサブリソースのプライベート エンドポイントを作成すると、すべての操作が正常に完了します。 詳細については、「Azure Storage のプライベート エンドポイントを使用する」を参照してください。
Azure Data Lake Storageを使用したAzCopy
階層型名前空間が有効になっているアカウントでAzCopyを使用する場合、AzCopy v10 のみが必要なData Lake Storage API をサポートします。 AzCopy の最新バージョン (AzCopy v10) のみを使用してください。 AzCopy v8.1 など、以前のバージョンはサポートされていません。
Azure Data Lake Storage 対応の Azure Storage Explorer
階層型名前空間が有効になっているストレージ アカウントでAzure Storage Explorerを使用する場合は、1.6.0以降のバージョンのみを使用します。 以前のバージョンでは、ファイルとディレクトリの管理に必要な階層型名前空間 API はサポートされていません。
Azure portal のストレージ ブラウザー
Azure portal に表示されるストレージ ブラウザーでは、パスを指定してファイルやフォルダーにアクセスすることはできません。 代わりに、フォルダーを参照してファイルに到達する必要があります。 そのため、ACL によってユーザーにファイルへの読み取りアクセス権が付与されていても、ファイルに至るまでのすべてのフォルダーへの読み取りアクセス権が付与されていない場合、そのユーザーはストレージ ブラウザーでそのファイルを表示できません。
サードパーティ アプリケーション
REST API を使用するサード パーティ製アプリケーションは、Data Lake Storageで使用した場合でも引き続き動作します。 BLOB API を呼び出すアプリケーションが機能する可能性があります。
Windows Azure Storage Blob (WASB) ドライバー
現時点では、BLOB API のみで動作するように設計された WASB ドライバーでは、いくつかの一般的なシナリオで問題が発生します。 特に、階層型名前空間が有効なストレージ アカウントのクライアントである場合です。 Data Lake Storageでのマルチプロトコル アクセスでは、これらの問題は軽減されません。
階層型名前空間が有効なストレージ アカウントへのクライアントとして WASB ドライバーを使用することはできません。 代わりに、Hadoop 環境で Azure BLOB ファイル システム (ABFS) ドライバーを使用します。 オンプレミスの Hadoop 環境(Hadoop ブランチ 3 より前のバージョン)からの移行を検討している場合は、組織に適した今後の進め方を判断するため、Azure サポート チケットを作成して支援を受けてください。
Azure Data Lake Storage における BLOB の論理削除
階層型名前空間を持つストレージ アカウントで、論理的に削除されたファイルまたはディレクトリの親ディレクトリの名前を変更すると、Azure ポータルに論理的に削除されたアイテムが正しく表示されないことがあります。 このような場合は、PowerShell またはAzure CLIを使用して、論理的に削除されたアイテムを一覧表示および復元します。
Azure Data Lake Storageのイベント サブスクリプション
階層型名前空間を持つストレージ アカウントで、アカウントにイベント サブスクリプションがある場合、セカンダリ エンドポイント (geo 冗長ストレージ アカウントの読み取り専用レプリカ) に対する読み取り操作によってエラーが発生します。 この問題を解決するには、イベント サブスクリプションを削除します。 非階層型名前空間が有効なアカウントに対して Data Lake Storage エンドポイント (abfss://URI) を使用してもイベントは生成されませんが、BLOB エンドポイント (wasb:// URI) によってイベントが生成されます。
ヒント
セカンダリ エンドポイントへの読み取りアクセスは、読み取りアクセス geo 冗長ストレージ (RA-GRS) または読み取りアクセス geo ゾーン冗長ストレージ (RA-GZRS) を有効にした場合にのみ使用できます。