すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:メタデータのオフライン分析

最終更新日:Apr 14, 2025

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
test-block
次の情報が表示された場合、データはOSSにアップロードされ、JSON形式のファイルとして保存されます。
Sucessfully upload namespace metadata to OSS.

メタデータのアップロードパス

メタデータのアップロードパスは、JindoFSの sysinfo の下のmetadataDumpサブディレクトリです。

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

  1. 次の図に示すコマンドを実行して、Jindo SQLを起動します。
    start_sql
  2. Jindo SQLで分析できるデータを持つテーブルをクエリします。
    • show tables コマンドを実行して、分析できるデータを持つテーブルを表示します。 Jindo SQLには、監査とメタデータ分析用の2つの組み込みモジュール audit_log と fs_image があります。
    • show partitions fs_image コマンドを実行して、fs_imageテーブルのパーティション情報を表示します。 各パーティションには、jindo jfs -dumpMetadata コマンドを使用して生成されたデータが含まれています。
      次の図は例を示しています。 show_partitions
  3. メタデータをクエリして分析します。
    Jindo SQLはSpark-SQL構文を使用します。 Jindo SQLを使用して、fs_imageテーブルのデータをクエリおよび分析できます。
    次の図は例を示しています。 check fs_image

    namespace列とdatetime列が追加され、名前空間名とメタデータがアップロードされたときのタイムスタンプが示されます。

    例:ダンプされたメタデータに基づいて、特定の名前空間内のディレクトリ数を取得します。 Number of queries

Hiveを使用してメタデータを分析する

  1. 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 パス';
  2. Hiveを使用してデータをオフラインで分析します。
    Hiveテーブルを作成した後、Hive SQLを使用してメタデータを分析できます。
    select * from table_name limit 200;
    次の図は例を示しています。 Offline analysis