E-MapReduce(EMR)V3.30.0以降では、ブロックストレージモードのJindoFSを使用して、名前空間全体のメタデータをオブジェクトストレージサービス(OSS)にダンプし、Jindo SQLを使用してメタデータを分析できます。
背景情報
Hadoop Distributed File System(HDFS)では、メタデータはfsimageという名前のスナップショットファイルに保存されます。 スナップショットファイルには、名前空間、メタデータを保存するファイル、ブロック、ファイルシステムクォータなど、メタデータに関する以下の情報が含まれています。 HDFSでは、コマンドを実行してXML形式のfsimageファイルをオンプレミスマシンにダウンロードし、このファイルを表示してメタデータをオフラインで分析できます。 JindoFSでは、メタデータをオンプレミスマシンにダウンロードする必要はありません。
HDFSメタデータをOSSにアップロードする
次のコマンドを実行して、特定の名前空間のメタデータをOSSにアップロードします。
jindo jfs -dumpMetadata <nsName>
<nsName>
は、ブロックストレージモードの名前空間の名前を示します。
たとえば、test-block名前空間のメタデータをOSSにアップロードし、メタデータをオフラインで分析します。 
jindo jfs -dumpMetadata test-block

次の情報が表示された場合、データはOSSにアップロードされ、JSON形式のファイルとして保存されます。
Sucessfully upload namespace metadata to OSS.
メタデータのアップロードパス
メタデータのアップロードパスは、JindoFSの sysinfo の下のmetadataDumpサブディレクトリです。
たとえば、
namespace.sysinfo.oss.uri
が oss://abc/
に設定されている場合、メタデータは oss://abc/metadataDump
ディレクトリにアップロードされます。 パラメーター | 説明 |
namespace.sysinfo.oss.uri | OSSバケットのパス。 |
namespace.sysinfo.oss.endpoint | エンドポイント。別のリージョンで指定されたエンドポイントも使用できます。 |
namespace.sysinfo.oss.access.key | Alibaba CloudアカウントのAccessKey ID。 |
namespace.sysinfo.oss.access.secret | Alibaba CloudアカウントのAccessKeyシークレット。 |
バッチ情報:HDFSのメタデータは、使用状況に基づいて変更されます。 メタデータを分析するたびに、コマンドを実行してメタデータのスナップショットファイルを表示する必要があります。 Jindoコマンドを実行してメタデータをアップロードするたびに、アップロード時刻に基づいて生成されるバッチ番号が、メタデータを保存するルートディレクトリとして使用されます。 これにより、毎回アップロードしたデータが上書きされないようになります。 必要に応じて履歴データを削除できます。 

- 1 は、OSSのシステム情報の構成パスを示します。
- 2 は、名前空間を示します。
- 3 は、バッチ番号を示します。
メタデータスキーマ
OSSにアップロードされたHDFSメタデータは、JSON形式のファイルとして保存されます。 スキーマ情報:
{
"type":"string", /*Inode タイプ、FILE DIRECTORY*/
"id": "string", /*INode ID*/
"parentId" :"string", /*親ノード ID*/
"name":"string", /*Inode 名*/
"size": "int", /*Inode サイズ、BIGINT*/
"permission":"int", /*権限、INT*/
"owner":"string", /*所有者名*/
"ownerGroup":"string", /*所有者グループ名*/
"mtime":"int", /*Inode 更新時刻、BIGINT*/
"atime":"int", /*Inode が最後にアクセスされた時刻、BIGINT*/
"attributes":"string", /*ファイル関連の属性*/
"state":"string", /*Inode ステータス*/
"storagePolicy":"string", /*ストレージポリシー*/
"etag":"string" /*etag*/
}
Jindo SQLを使用してメタデータを分析する
- 次の図に示すコマンドを実行して、Jindo SQLを起動します。
- Jindo SQLで分析できるデータを持つテーブルをクエリします。
show tables
コマンドを実行して、分析できるデータを持つテーブルを表示します。 Jindo SQLには、監査とメタデータ分析用の2つの組み込みモジュール audit_log と fs_image があります。show partitions fs_image
コマンドを実行して、fs_imageテーブルのパーティション情報を表示します。 各パーティションには、jindo jfs -dumpMetadata
コマンドを使用して生成されたデータが含まれています。次の図は例を示しています。
- メタデータをクエリして分析します。Jindo SQLはSpark-SQL構文を使用します。 Jindo SQLを使用して、fs_imageテーブルのデータをクエリおよび分析できます。次の図は例を示しています。
namespace列とdatetime列が追加され、名前空間名とメタデータがアップロードされたときのタイムスタンプが示されます。
例:ダンプされたメタデータに基づいて、特定の名前空間内のディレクトリ数を取得します。
Hiveを使用してメタデータを分析する
- Hiveでテーブルスキーマを作成します。
次のコマンドを使用して、Hiveでクエリに使用されるメタデータのテーブルスキーマを作成できます。
CREATE EXTERNAL TABLE `table_name` (`type` string, `id` string, `parentId` string, `name` string, `size` bigint, `permission` int, `owner` string, `ownerGroup` string, `mtime` bigint, `atime` bigint, `attr` string, `state` string, `storagePolicy` string, `etag` string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE LOCATION 'ファイルデータがアップロードされる OSS パス';
- Hiveを使用してデータをオフラインで分析します。Hiveテーブルを作成した後、Hive SQLを使用してメタデータを分析できます。
select * from table_name limit 200;
次の図は例を示しています。